From db1994fef8d6425e710bb9a99694ff80eead41aa Mon Sep 17 00:00:00 2001 From: ruki Date: Fri, 24 May 2019 22:32:53 +0800 Subject: improve to load builtin modules for sandbox and interpreter --- xmake/core/base/interpreter.lua | 65 ++++++++++++++++++++++++----------------- 1 file changed, 39 insertions(+), 26 deletions(-) (limited to 'xmake/core/base/interpreter.lua') 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? -- cgit v1.3.1