diff options
author | daurnimator <quae@daurnimator.com> | 2017-05-03 19:18:47 +1000 |
---|---|---|
committer | daurnimator <quae@daurnimator.com> | 2017-05-03 19:43:06 +1000 |
commit | b575979804c25aec993e7699b2ec00265d5b70ff (patch) | |
tree | 31a9f077be70e1c3b366516a896feaf8f4b2e8c2 | |
parent | 735bc392056f7c55c981b68feb941bf1cc5a8ff3 (diff) | |
download | fengari-b575979804c25aec993e7699b2ec00265d5b70ff.tar.gz fengari-b575979804c25aec993e7699b2ec00265d5b70ff.tar.bz2 fengari-b575979804c25aec993e7699b2ec00265d5b70ff.zip |
src/lauxlib: Rewrite luaL_execresult
-rw-r--r-- | src/lauxlib.js | 32 | ||||
-rw-r--r-- | src/loslib.js | 4 |
2 files changed, 21 insertions, 15 deletions
diff --git a/src/lauxlib.js b/src/lauxlib.js index b020d04..c5e0d59 100644 --- a/src/lauxlib.js +++ b/src/lauxlib.js @@ -211,21 +211,27 @@ const luaL_fileresult = function(L, stat, fname, e) { }; /* Unlike normal lua, we pass in an error object */ -const luaL_execresult = function(L, stat, e) { - let what = lua.to_luastring("exit"); /* type of termination */ - if (e && e.status === -1) /* error? */ - return luaL_fileresult(L, 0, null, e); - else { - if (e && e.signal) { - lua.lua_pushnil(L); - lua.lua_pushliteral(L, "signal"); - } else { - lua.lua_pushboolean(L, 1); - lua.lua_pushliteral(L, "exit"); - } - lua.lua_pushinteger(L, e ? e.status : 0); +const luaL_execresult = function(L, e) { + let what, stat; + if (e === null) { + lua.lua_pushboolean(L, 1); + lua.lua_pushliteral(L, "exit"); + lua.lua_pushinteger(L, 0); return 3; + } else if (e.status) { + what = "exit"; + stat = e.status; + } else if (e.signal) { + what = "signal"; + stat = e.signal; + } else { + /* XXX: node seems to have e.errno as a string instead of a number */ + return luaL_fileresult(L, 0, null, e); } + lua.lua_pushnil(L); + lua.lua_pushliteral(L, what); + lua.lua_pushinteger(L, stat); + return 3; }; const luaL_getmetatable = function(L, n) { diff --git a/src/loslib.js b/src/loslib.js index 6fd5247..b93071b 100644 --- a/src/loslib.js +++ b/src/loslib.js @@ -247,10 +247,10 @@ if (typeof require === "function") { } ); } catch (e) { - return lauxlib.luaL_execresult(L, false, e); + return lauxlib.luaL_execresult(L, e); } - return lauxlib.luaL_execresult(L, true); + return lauxlib.luaL_execresult(L, null); } else { try { child_process.execSync( |