diff options
author | Li Jin <dragon-fly@qq.com> | 2024-08-10 08:44:30 +0800 |
---|---|---|
committer | Li Jin <dragon-fly@qq.com> | 2024-08-10 08:44:30 +0800 |
commit | 0731d4fce42ba2f13c4d8f8ecba1680f79d48065 (patch) | |
tree | f23792407d639d2e1e7b0e340c33d16550959e4b /src | |
parent | 8c9408bde7735065447891999042369ff64c95af (diff) | |
download | yuescript-0731d4fce42ba2f13c4d8f8ecba1680f79d48065.tar.gz yuescript-0731d4fce42ba2f13c4d8f8ecba1680f79d48065.tar.bz2 yuescript-0731d4fce42ba2f13c4d8f8ecba1680f79d48065.zip |
add a reusable macro env.
Diffstat (limited to 'src')
-rw-r--r-- | src/yuescript/yue_compiler.cpp | 2 | ||||
-rw-r--r-- | src/yuescript/yuescript.h | 6 |
2 files changed, 7 insertions, 1 deletions
diff --git a/src/yuescript/yue_compiler.cpp b/src/yuescript/yue_compiler.cpp index 9e778d7..8ec131f 100644 --- a/src/yuescript/yue_compiler.cpp +++ b/src/yuescript/yue_compiler.cpp | |||
@@ -5117,7 +5117,7 @@ private: | |||
5117 | newArgs.emplace_back(_parser.toString(argsDef->varArg)); | 5117 | newArgs.emplace_back(_parser.toString(argsDef->varArg)); |
5118 | } | 5118 | } |
5119 | } | 5119 | } |
5120 | std::string macroCodes = "_ENV=yue:require('yue'),<index>:_G,<newindex>:(k,v)=>_G[k]=v\n("s + join(newArgs, ","sv) + ")->"s + _parser.toString(macroLit->body); | 5120 | std::string macroCodes = "_ENV=require('yue').macro_env\n("s + join(newArgs, ","sv) + ")->"s + _parser.toString(macroLit->body); |
5121 | auto chunkName = "=(macro "s + macroName + ')'; | 5121 | auto chunkName = "=(macro "s + macroName + ')'; |
5122 | pushCurrentModule(); // cur | 5122 | pushCurrentModule(); // cur |
5123 | int top = lua_gettop(L) - 1; | 5123 | int top = lua_gettop(L) - 1; |
diff --git a/src/yuescript/yuescript.h b/src/yuescript/yuescript.h index 97ebdef..f6d12dc 100644 --- a/src/yuescript/yuescript.h +++ b/src/yuescript/yuescript.h | |||
@@ -225,4 +225,10 @@ yue.pcall = yue_call | |||
225 | yue.require = yue_require | 225 | yue.require = yue_require |
226 | yue.p = p | 226 | yue.p = p |
227 | yue.traceback = yue_traceback | 227 | yue.traceback = yue_traceback |
228 | yue.macro_env = setmetatable({yue = yue}, { | ||
229 | __index = _G, | ||
230 | __newindex = function(_, k, v) | ||
231 | _G[k] = v | ||
232 | end | ||
233 | }) | ||
228 | )yuescript_codes"; | 234 | )yuescript_codes"; |