diff options
Diffstat (limited to '')
| -rw-r--r-- | src/MoonP/moon_compiler.cpp | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/MoonP/moon_compiler.cpp b/src/MoonP/moon_compiler.cpp index a3ed4de..1283422 100644 --- a/src/MoonP/moon_compiler.cpp +++ b/src/MoonP/moon_compiler.cpp | |||
| @@ -49,7 +49,7 @@ inline std::string s(std::string_view sv) { | |||
| 49 | } | 49 | } |
| 50 | 50 | ||
| 51 | const std::string_view version() { | 51 | const std::string_view version() { |
| 52 | return "0.4.1"sv; | 52 | return "0.4.3"sv; |
| 53 | } | 53 | } |
| 54 | 54 | ||
| 55 | // name of table stored in lua registry | 55 | // name of table stored in lua registry |
| @@ -134,12 +134,13 @@ public: | |||
| 134 | if (_useModule) { | 134 | if (_useModule) { |
| 135 | _useModule = false; | 135 | _useModule = false; |
| 136 | if (!_sameModule) { | 136 | if (!_sameModule) { |
| 137 | int top = lua_gettop(L); | ||
| 138 | DEFER(lua_settop(L, top)); | ||
| 137 | lua_pushliteral(L, MOONP_MODULE); // MOONP_MODULE | 139 | lua_pushliteral(L, MOONP_MODULE); // MOONP_MODULE |
| 138 | lua_rawget(L, LUA_REGISTRYINDEX); // reg[MOONP_MODULE], tb | 140 | lua_rawget(L, LUA_REGISTRYINDEX); // reg[MOONP_MODULE], tb |
| 139 | int idx = static_cast<int>(lua_objlen(L, -1)); | 141 | int idx = static_cast<int>(lua_objlen(L, -1)); |
| 140 | lua_pushnil(L); // tb nil | 142 | lua_pushnil(L); // tb nil |
| 141 | lua_rawseti(L, -2, idx); // tb[idx] = nil, tb | 143 | lua_rawseti(L, -2, idx); // tb[idx] = nil, tb |
| 142 | lua_pop(L, 1); // empty | ||
| 143 | } | 144 | } |
| 144 | } | 145 | } |
| 145 | } | 146 | } |
| @@ -2982,7 +2983,7 @@ private: | |||
| 2982 | break; | 2983 | break; |
| 2983 | case id<Exp_t>(): | 2984 | case id<Exp_t>(): |
| 2984 | transformExp(static_cast<Exp_t*>(item), temp, ExpUsage::Closure); | 2985 | transformExp(static_cast<Exp_t*>(item), temp, ExpUsage::Closure); |
| 2985 | temp.back() = s("["sv) + temp.back() + s("]"sv); | 2986 | temp.back() = s(temp.back().front() == '[' ? "[ "sv : "["sv) + temp.back() + s("]"sv); |
| 2986 | break; | 2987 | break; |
| 2987 | case id<InvokeArgs_t>(): transformInvokeArgs(static_cast<InvokeArgs_t*>(item), temp); break; | 2988 | case id<InvokeArgs_t>(): transformInvokeArgs(static_cast<InvokeArgs_t*>(item), temp); break; |
| 2988 | default: assert(false); break; | 2989 | default: assert(false); break; |
| @@ -3822,6 +3823,9 @@ private: | |||
| 3822 | case id<SingleString_t>(): transformSingleString(static_cast<SingleString_t*>(key), temp); | 3823 | case id<SingleString_t>(): transformSingleString(static_cast<SingleString_t*>(key), temp); |
| 3823 | temp.back() = s("["sv) + temp.back() + s("]"sv); | 3824 | temp.back() = s("["sv) + temp.back() + s("]"sv); |
| 3824 | break; | 3825 | break; |
| 3826 | case id<LuaString_t>(): transformLuaString(static_cast<LuaString_t*>(key), temp); | ||
| 3827 | temp.back() = s("[ "sv) + temp.back() + s("]"sv); | ||
| 3828 | break; | ||
| 3825 | default: assert(false); break; | 3829 | default: assert(false); break; |
| 3826 | } | 3830 | } |
| 3827 | auto value = pair->value.get(); | 3831 | auto value = pair->value.get(); |
