aboutsummaryrefslogtreecommitdiff
path: root/src/MoonP/moonplus.cpp
diff options
context:
space:
mode:
authorLi Jin <dragon-fly@qq.com>2020-10-21 23:44:50 +0800
committerLi Jin <dragon-fly@qq.com>2020-10-21 23:44:50 +0800
commitb6725202f4a8cac5f829dac9a72a81f3ff73e787 (patch)
treec173accb869b60cba14babc7685284864bc80426 /src/MoonP/moonplus.cpp
parent0777356cbe599b3f88bdfa476e3ffa64bb3a3a8c (diff)
downloadyuescript-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.cpp26
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