From 9aa69e0e953570da5bbc67764eb35f2738e9aeb8 Mon Sep 17 00:00:00 2001 From: ARATA Mizuki Date: Sun, 7 Jul 2024 12:35:42 +0900 Subject: [PATCH] Make Lua.Lib.table.concat a built-in This enables more dead-code elimination. --- lib/lunarml/ml/basis/lua/lua.sml | 2 +- lib/lunarml/ml/basis/luajit/lua.sml | 2 +- lib/lunarml/mlinit-continuations.lua | 3 +++ lib/lunarml/mlinit-luajit.lua | 3 +++ lib/lunarml/mlinit.lua | 3 +++ src/codegen-lua.sml | 2 ++ src/initialenv.sml | 3 +++ 7 files changed, 16 insertions(+), 2 deletions(-) diff --git a/lib/lunarml/ml/basis/lua/lua.sml b/lib/lunarml/ml/basis/lua/lua.sml index 47bfe02..fe8ad1d 100644 --- a/lib/lunarml/ml/basis/lua/lua.sml +++ b/lib/lunarml/ml/basis/lua/lua.sml @@ -432,7 +432,7 @@ val unpack = LunarML.assumeDiscardable field (string, "unpack") val upper = LunarML.assumeDiscardable field (string, "upper") end structure table = struct -val concat = LunarML.assumeDiscardable field (table, "concat") +val concat = _Prim.Lua.Lib.table.concat val insert = LunarML.assumeDiscardable field (table, "insert") val move = LunarML.assumeDiscardable field (table, "move") val pack = _Prim.Lua.Lib.table.pack diff --git a/lib/lunarml/ml/basis/luajit/lua.sml b/lib/lunarml/ml/basis/luajit/lua.sml index 03c5740..7bd0744 100644 --- a/lib/lunarml/ml/basis/luajit/lua.sml +++ b/lib/lunarml/ml/basis/luajit/lua.sml @@ -450,7 +450,7 @@ val sub = LunarML.assumeDiscardable field (string, "sub") val upper = LunarML.assumeDiscardable field (string, "upper") end structure table = struct -val concat = LunarML.assumeDiscardable field (table, "concat") +val concat = _Prim.Lua.Lib.table.concat val insert = LunarML.assumeDiscardable field (table, "insert") val maxn = LunarML.assumeDiscardable field (table, "maxn") val pack = _Prim.Lua.Lib.table.pack diff --git a/lib/lunarml/mlinit-continuations.lua b/lib/lunarml/mlinit-continuations.lua index 1993592..7d50bf9 100644 --- a/lib/lunarml/mlinit-continuations.lua +++ b/lib/lunarml/mlinit-continuations.lua @@ -46,6 +46,9 @@ local string_format = string.format --BEGIN table local table = table --END +--BEGIN table_concat: table +local table_concat = table.concat +--END --BEGIN table_pack: table local table_pack = table.pack --END diff --git a/lib/lunarml/mlinit-luajit.lua b/lib/lunarml/mlinit-luajit.lua index 25d0482..f593f14 100644 --- a/lib/lunarml/mlinit-luajit.lua +++ b/lib/lunarml/mlinit-luajit.lua @@ -49,6 +49,9 @@ local table = table --BEGIN select local select = select --END +--BEGIN table_concat: table +local table_concat = table.concat +--END --BEGIN table_pack: select local table_pack = table.pack or function(...) return { n = select("#", ...), ... } end --END diff --git a/lib/lunarml/mlinit.lua b/lib/lunarml/mlinit.lua index 3e225a6..7cd41c4 100644 --- a/lib/lunarml/mlinit.lua +++ b/lib/lunarml/mlinit.lua @@ -46,6 +46,9 @@ local string_format = string.format --BEGIN table local table = table --END +--BEGIN table_concat: table +local table_concat = table.concat +--END --BEGIN table_pack: table local table_pack = table.pack --END diff --git a/src/codegen-lua.sml b/src/codegen-lua.sml index c1d1122..daf2497 100644 --- a/src/codegen-lua.sml +++ b/src/codegen-lua.sml @@ -77,6 +77,7 @@ val builtins ,(VId_Lua_Lib_string_char, "string_char") ,(VId_Lua_Lib_string_format, "string_format") ,(VId_Lua_Lib_table, "table") + ,(VId_Lua_Lib_table_concat, "table_concat") ,(VId_Lua_Lib_table_pack, "table_pack") ,(VId_Lua_Lib_table_unpack, "table_unpack") ] @@ -130,6 +131,7 @@ val builtinsLuaJIT ,(VId_Lua_Lib_string_char, "string_char") ,(VId_Lua_Lib_string_format, "string_format") ,(VId_Lua_Lib_table, "table") + ,(VId_Lua_Lib_table_concat, "table_concat") ,(VId_Lua_Lib_table_pack, "table_pack") ,(VId_Lua_Lib_table_unpack, "table_unpack") ,(VId_Lua_Lib_bit, "bit") diff --git a/src/initialenv.sml b/src/initialenv.sml index 23829e8..be96edd 100644 --- a/src/initialenv.sml +++ b/src/initialenv.sml @@ -61,6 +61,7 @@ structure InitialEnv :> sig val VId_Lua_Lib_string_char : TypedSyntax.VId val VId_Lua_Lib_string_format : TypedSyntax.VId val VId_Lua_Lib_table : TypedSyntax.VId + val VId_Lua_Lib_table_concat : TypedSyntax.VId val VId_Lua_Lib_table_pack : TypedSyntax.VId val VId_Lua_Lib_table_unpack : TypedSyntax.VId val VId_Lua_Lib_bit : TypedSyntax.VId @@ -193,6 +194,7 @@ val VId_Lua_Lib_string = newVId "_Prim.Lua.Lib.string" val VId_Lua_Lib_string_char = newVId "_Prim.Lua.Lib.string.char" val VId_Lua_Lib_string_format = newVId "_Prim.Lua.Lib.string.format" val VId_Lua_Lib_table = newVId "_Prim.Lua.Lib.table" +val VId_Lua_Lib_table_concat = newVId "_Prim.Lua.Lib.table.concat" val VId_Lua_Lib_table_pack = newVId "_Prim.Lua.Lib.table.pack" val VId_Lua_Lib_table_unpack = newVId "_Prim.Lua.Lib.table.unpack" val VId_Lua_Lib_bit = newVId "_Prim.Lua.Lib.bit" (* LuaJIT *) @@ -317,6 +319,7 @@ val initialEnv : Typing.Env ,("_Prim.Lua.Lib.math.ult", VId_Lua_Lib_math_ult, TypeScheme ([], primTy_Lua_value)) ,("_Prim.Lua.Lib.string.char", VId_Lua_Lib_string_char, TypeScheme ([], primTy_Lua_value)) ,("_Prim.Lua.Lib.string.format", VId_Lua_Lib_string_format, TypeScheme ([], primTy_Lua_value)) + ,("_Prim.Lua.Lib.table.concat", VId_Lua_Lib_table_concat, TypeScheme ([], primTy_Lua_value)) ,("_Prim.Lua.Lib.table.pack", VId_Lua_Lib_table_pack, TypeScheme ([], primTy_Lua_value)) ,("_Prim.Lua.Lib.table.unpack", VId_Lua_Lib_table_unpack, TypeScheme ([], primTy_Lua_value)) ,("_Prim.Lua.Lib.bit", VId_Lua_Lib_bit, TypeScheme ([], primTy_Lua_value))