diff options
-rw-r--r-- | src/lapi.js | 4 | ||||
-rw-r--r-- | tests/lapi.js | 20 |
2 files changed, 22 insertions, 2 deletions
diff --git a/src/lapi.js b/src/lapi.js index 1be0837..be80672 100644 --- a/src/lapi.js +++ b/src/lapi.js @@ -912,9 +912,9 @@ const lua_arith = function(L, op) { */ const lua_load = function(L, reader, data, chunkname, mode) { - assert(defs.is_luastring(chunkname), "lua_load expect an array of byte as chunkname"); - assert(mode ? defs.is_luastring(mode) : true, "lua_load expect an array of byte as mode"); if (!chunkname) chunkname = [defs.char["?"]]; + else assert(defs.is_luastring(chunkname), "lua_load expect an array of byte as chunkname"); + assert(mode ? defs.is_luastring(mode) : true, "lua_load expect an array of byte as mode"); let z = new lzio.ZIO(L, reader, data); let status = ldo.luaD_protectedparser(L, z, chunkname, mode); if (status === TS.LUA_OK) { /* no errors? */ diff --git a/tests/lapi.js b/tests/lapi.js index 1dbdd5c..b764064 100644 --- a/tests/lapi.js +++ b/tests/lapi.js @@ -361,6 +361,26 @@ test('lua_pop', function (t) { }); +test('lua_load with no chunkname', function (t) { + let L; + + t.plan(2); + + t.doesNotThrow(function () { + L = lauxlib.luaL_newstate(); + + lua.lua_load(L, function(L, s) { let r = s.code; s.code = null; return r; }, {code: lua.to_luastring("return 'hello'")}, null, null); + + lua.lua_call(L, 0, 1); + }, "JS Lua program ran without error"); + + t.strictEqual( + lua.lua_tojsstring(L, -1), + "hello", + "Correct element(s) on the stack" + ); +}); + test('lua_load and lua_call it', function (t) { let luaCode = ` local a = "JS > Lua > JS \o/" |