diff options
| author | Li Jin <dragon-fly@qq.com> | 2020-10-21 23:44:50 +0800 |
|---|---|---|
| committer | Li Jin <dragon-fly@qq.com> | 2020-10-21 23:44:50 +0800 |
| commit | b6725202f4a8cac5f829dac9a72a81f3ff73e787 (patch) | |
| tree | c173accb869b60cba14babc7685284864bc80426 /src/MoonP/moonplus.cpp | |
| parent | 0777356cbe599b3f88bdfa476e3ffa64bb3a3a8c (diff) | |
| download | yuescript-b6725202f4a8cac5f829dac9a72a81f3ff73e787.tar.gz yuescript-b6725202f4a8cac5f829dac9a72a81f3ff73e787.tar.bz2 yuescript-b6725202f4a8cac5f829dac9a72a81f3ff73e787.zip | |
extend macro feature to support compiling Moonscript to other Lua dialect like teal.
add examples for how to write MoonPlus codes that compile to teal.
fix C++ macro to build without MoonPlus macro feature or built-in Lua.
add support for passing arguments from command line to compiler that can be accessed or altered by "require('moonp').options".
Diffstat (limited to 'src/MoonP/moonplus.cpp')
| -rw-r--r-- | src/MoonP/moonplus.cpp | 26 |
1 files changed, 13 insertions, 13 deletions
diff --git a/src/MoonP/moonplus.cpp b/src/MoonP/moonplus.cpp index c775d75..bea1d6e 100644 --- a/src/MoonP/moonplus.cpp +++ b/src/MoonP/moonplus.cpp | |||
| @@ -84,23 +84,21 @@ static int moontolua(lua_State* L) { | |||
| 84 | lua_pop(L, 1); | 84 | lua_pop(L, 1); |
| 85 | } | 85 | } |
| 86 | std::string s(input, size); | 86 | std::string s(input, size); |
| 87 | std::string codes, err; | 87 | auto result = MoonP::MoonCompiler(L, nullptr, sameModule).compile(s, config); |
| 88 | MoonP::GlobalVars globals; | 88 | if (result.codes.empty() && !result.error.empty()) { |
| 89 | std::tie(codes, err, globals) = MoonP::MoonCompiler(L, nullptr, sameModule).compile(s, config); | ||
| 90 | if (codes.empty() && !err.empty()) { | ||
| 91 | lua_pushnil(L); | 89 | lua_pushnil(L); |
| 92 | } else { | 90 | } else { |
| 93 | lua_pushlstring(L, codes.c_str(), codes.size()); | 91 | lua_pushlstring(L, result.codes.c_str(), result.codes.size()); |
| 94 | } | 92 | } |
| 95 | if (err.empty()) { | 93 | if (result.error.empty()) { |
| 96 | lua_pushnil(L); | 94 | lua_pushnil(L); |
| 97 | } else { | 95 | } else { |
| 98 | lua_pushlstring(L, err.c_str(), err.size()); | 96 | lua_pushlstring(L, result.error.c_str(), result.error.size()); |
| 99 | } | 97 | } |
| 100 | if (globals) { | 98 | if (result.globals) { |
| 101 | lua_createtable(L, static_cast<int>(globals->size()), 0); | 99 | lua_createtable(L, static_cast<int>(result.globals->size()), 0); |
| 102 | int i = 1; | 100 | int i = 1; |
| 103 | for (const auto& var : *globals) { | 101 | for (const auto& var : *result.globals) { |
| 104 | lua_createtable(L, 3, 0); | 102 | lua_createtable(L, 3, 0); |
| 105 | lua_pushlstring(L, var.name.c_str(), var.name.size()); | 103 | lua_pushlstring(L, var.name.c_str(), var.name.size()); |
| 106 | lua_rawseti(L, -2, 1); | 104 | lua_rawseti(L, -2, 1); |
| @@ -124,9 +122,11 @@ int luaopen_moonp(lua_State* L) { | |||
| 124 | lua_pushcfunction(L, moontolua); // package loaded moonp func | 122 | lua_pushcfunction(L, moontolua); // package loaded moonp func |
| 125 | lua_setfield(L, -2, "to_lua"); // moonp["to_lua"] = func, package loaded moonp | 123 | lua_setfield(L, -2, "to_lua"); // moonp["to_lua"] = func, package loaded moonp |
| 126 | lua_pushlstring(L, &MoonP::version.front(), MoonP::version.size()); // package loaded moonp version | 124 | lua_pushlstring(L, &MoonP::version.front(), MoonP::version.size()); // package loaded moonp version |
| 127 | lua_setfield(L, -2, "version"); // loaded["version"] = version, package loaded moonp | 125 | lua_setfield(L, -2, "version"); // moonp["version"] = version, package loaded moonp |
| 128 | lua_pushlstring(L, &MoonP::extension.front(), MoonP::extension.size()); // package loaded moonp ext | 126 | lua_createtable(L, 0, 0); // package loaded moonp options |
| 129 | lua_setfield(L, -2, "extension"); // loaded["extension"] = ext, package loaded moonp | 127 | lua_pushlstring(L, &MoonP::extension.front(), MoonP::extension.size()); // package loaded moonp options ext |
| 128 | lua_setfield(L, -2, "extension"); // options["extension"] = ext, package loaded moonp options | ||
| 129 | lua_setfield(L, -2, "options"); // moonp["options"] = options, package loaded moonp | ||
| 130 | lua_pushcfunction(L, init_stacktraceplus); // package loaded moonp func1 | 130 | lua_pushcfunction(L, init_stacktraceplus); // package loaded moonp func1 |
| 131 | lua_setfield(L, -2, "load_stacktraceplus"); // moonp["load_stacktraceplus"] = func1, package loaded moonp | 131 | lua_setfield(L, -2, "load_stacktraceplus"); // moonp["load_stacktraceplus"] = func1, package loaded moonp |
| 132 | lua_setfield(L, -2, "moonp"); // loaded["moonp"] = moonp, package loaded | 132 | lua_setfield(L, -2, "moonp"); // loaded["moonp"] = moonp, package loaded |
