summaryrefslogtreecommitdiff
path: root/xmake/core/base/interpreter.lua
diff options
context:
space:
mode:
authorruki <[email protected]>2019-05-24 22:32:53 +0800
committerruki <[email protected]>2019-05-24 09:17:19 +0800
commitdb1994fef8d6425e710bb9a99694ff80eead41aa (patch)
treecf83a262b03b90f61cd2225f769f022416561742 /xmake/core/base/interpreter.lua
parent06412d25342674387849e59d5c48b2b8aeb216b3 (diff)
improve to load builtin modules for sandbox and interpreter
Diffstat (limited to 'xmake/core/base/interpreter.lua')
-rw-r--r--xmake/core/base/interpreter.lua65
1 files changed, 39 insertions, 26 deletions
diff --git a/xmake/core/base/interpreter.lua b/xmake/core/base/interpreter.lua
index bcf60dd5b..029fe3e60 100644
--- a/xmake/core/base/interpreter.lua
+++ b/xmake/core/base/interpreter.lua
@@ -595,6 +595,42 @@ function interpreter:_script(script)
return instance:script()
end
+-- get builtin modules
+function interpreter._builtin_modules()
+ local builtin_modules = interpreter._BUILTIN_MODULES
+ if builtin_modules == nil then
+ builtin_modules = {}
+ local builtin_module_files = os.match(path.join(os.programdir(), "core/sandbox/modules/interpreter/*.lua"))
+ if builtin_module_files then
+ for _, builtin_module_file in ipairs(builtin_module_files) do
+
+ -- the module name
+ local module_name = path.basename(builtin_module_file)
+ assert(module_name)
+
+ -- load script
+ local script, errors = loadfile(builtin_module_file)
+ if script then
+
+ -- load module
+ local ok, results = utils.trycall(script)
+ if not ok then
+ os.raise(results)
+ end
+
+ -- save module
+ builtin_modules[module_name] = results
+ else
+ -- error
+ os.raise(errors)
+ end
+ end
+ end
+ interpreter._BUILTIN_MODULES = builtin_modules
+ end
+ return builtin_modules
+end
+
-- new an interpreter instance
function interpreter.new()
@@ -644,32 +680,9 @@ function interpreter.new()
instance:api_register(nil, "add_subfiles", interpreter.api_builtin_includes)
instance:api_register(nil, "set_xmakever", interpreter.api_builtin_set_xmakever)
- -- load builtin module files
- local builtin_module_files = os.match(path.join(os.programdir(), "core/sandbox/modules/interpreter/*.lua"))
- if builtin_module_files then
- for _, builtin_module_file in ipairs(builtin_module_files) do
-
- -- the module name
- local module_name = path.basename(builtin_module_file)
- assert(module_name)
-
- -- load script
- local script, errors = loadfile(builtin_module_file)
- if script then
-
- -- load module
- local ok, results = utils.trycall(script)
- if not ok then
- os.raise(results)
- end
-
- -- register module
- instance:api_register_builtin(module_name, results)
- else
- -- error
- os.raise(errors)
- end
- end
+ -- register the builtin modules
+ for module_name, module in pairs(interpreter._builtin_modules()) do
+ instance:api_register_builtin(module_name, module)
end
-- ok?