From eb7c47e537361ed8119b478afea49dedd6887983 Mon Sep 17 00:00:00 2001 From: daurnimator Date: Sun, 18 Jun 2017 23:51:56 +1000 Subject: tests/tests.js: don't shell out to luac for compiling --- tests/tests.js | 32 +++++++++++++------------------- 1 file changed, 13 insertions(+), 19 deletions(-) (limited to 'tests/tests.js') 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; }; -- cgit v1.2.3-54-g00ecf