From a8e82fc01f2558550289f76f55c917039296ec11 Mon Sep 17 00:00:00 2001 From: Benoit Giannangeli Date: Fri, 17 Feb 2017 11:33:23 +0100 Subject: lua_load (bytecode only), lua_call(k) --- src/lapi.js | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'src/lapi.js') diff --git a/src/lapi.js b/src/lapi.js index 976841d..6cc95b2 100644 --- a/src/lapi.js +++ b/src/lapi.js @@ -240,6 +240,24 @@ const lua_typename = function(L, t) { ** 'load' and 'call' functions (run Lua code) */ +const lua_load = function(L, data, chunckname) { + if (!chunckname) chunckname = "?"; + + let status = ldo.luaD_protectedparser(L, data, chunckname); + if (status === TS.LUA_OK) { + let f = L.stack[L.top - 1]; /* get newly created function */ + if (f.nupvalues >= 1) { /* does it have an upvalue? */ + /* get global table from registry */ + let reg = L.l_G.l_registry; + let gt = reg.value.array[lua.LUA_RIDX_GLOBALS]; + /* set global table as 1st upvalue of 'f' (may be LUA_ENV) */ + f.upvals[0].v = gt; // TODO: is gt on the stack ? is that upvalue opened or closed ? + } + } + + return status; +}; + const lua_callk = function(L, nargs, nresults, ctx, k) { assert(k === null || !(L.ci.callstatus & CIST_LUA), "cannot use continuations inside hooks"); assert(nargs + 1 < L.top - L.ci.funcOff, "not enough elements in the stack"); @@ -333,6 +351,7 @@ module.exports.lua_tointeger = lua_tointeger; module.exports.lua_toboolean = lua_toboolean; module.exports.lua_tolstring = lua_tolstring; module.exports.lua_tostring = lua_tostring; +module.exports.lua_load = lua_load; module.exports.lua_callk = lua_callk; module.exports.lua_call = lua_call; module.exports.lua_pop = lua_pop; \ No newline at end of file -- cgit v1.2.3-54-g00ecf