diff options
author | daurnimator <quae@daurnimator.com> | 2017-06-18 23:51:56 +1000 |
---|---|---|
committer | daurnimator <quae@daurnimator.com> | 2017-06-19 00:09:46 +1000 |
commit | eb7c47e537361ed8119b478afea49dedd6887983 (patch) | |
tree | c4ad6f083078c4e126ab96d5bba133d98416e502 /tests | |
parent | 4f0c9181f38355cb74393f6f6cbba56b8bd52e18 (diff) | |
download | fengari-eb7c47e537361ed8119b478afea49dedd6887983.tar.gz fengari-eb7c47e537361ed8119b478afea49dedd6887983.tar.bz2 fengari-eb7c47e537361ed8119b478afea49dedd6887983.zip |
tests/tests.js: don't shell out to luac for compiling
Diffstat (limited to 'tests')
-rw-r--r-- | tests/tests.js | 32 |
1 files changed, 13 insertions, 19 deletions
diff --git a/tests/tests.js b/tests/tests.js index 75e5e19..6c799e5 100644 --- a/tests/tests.js +++ b/tests/tests.js @@ -2,24 +2,18 @@ global.WEB = false; -const fs = require('fs'); -const child_process = require('child_process'); -const tmp = require('tmp'); - -const lua = require("../src/lua.js"); -const lauxlib = require("../src/lauxlib.js"); - -const toByteCode = function (luaCode) { - var luaFile = tmp.fileSync(); - - fs.writeSync(luaFile.fd, luaCode); - - child_process.execSync(`luac -o ${luaFile.name}.bc ${luaFile.name}`); - - let b = fs.readFileSync(`${luaFile.name}.bc`); - let dv = new DataView(b.buffer.slice(b.byteOffset, b.byteOffset + b.byteLength)); - - return dv; +const lua = require("../src/lua.js"); +const lauxlib = require("../src/lauxlib.js"); + +const toByteCode = function(luaCode) { + let L = getState(luaCode); + let b = []; + if (lua.lua_dump(L, function(L, b, size, B) { + B.push(...b.slice(0, size)); + return 0; + }, b, false) !== 0) + throw Error("unable to dump given function"); + return new DataView(Uint8Array.from(b).buffer); }; const getState = function(luaCode) { @@ -28,7 +22,7 @@ const getState = function(luaCode) { throw Error("unable to create lua_State"); if (lauxlib.luaL_loadstring(L, lua.to_luastring(luaCode)) !== lua.LUA_OK) - return Error(lua.lua_tojsstring(L, -1)); + throw Error(lua.lua_tojsstring(L, -1)); return L; }; |