aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBenoit Giannangeli <benoit.giannangeli@boursorama.fr>2017-02-17 14:36:33 +0100
committerBenoit Giannangeli <benoit.giannangeli@boursorama.fr>2017-02-17 14:53:03 +0100
commit5131a5ab1f471655d6398748b1eaa9abd47c14da (patch)
treebf8d1b5102a59898ed520d1afa023301f6483607 /src
parent78b48979b8dbd367043c39fb21007ab4f54cd0a4 (diff)
downloadfengari-5131a5ab1f471655d6398748b1eaa9abd47c14da.tar.gz
fengari-5131a5ab1f471655d6398748b1eaa9abd47c14da.tar.bz2
fengari-5131a5ab1f471655d6398748b1eaa9abd47c14da.zip
lua_pcall
Diffstat (limited to 'src')
-rw-r--r--src/lapi.js8
-rw-r--r--src/ldo.js20
2 files changed, 25 insertions, 3 deletions
diff --git a/src/lapi.js b/src/lapi.js
index 705fec4..1113eec 100644
--- a/src/lapi.js
+++ b/src/lapi.js
@@ -276,7 +276,7 @@ const lua_tonumber = function(L, idx) {
};
const f_call = function(L, ud) {
- ldo.luaD_callnoyield(L, ud.func, ud.nresults);
+ ldo.luaD_callnoyield(L, ud.funcOff, ud.nresults);
};
const lua_type = function(L, idx) {
@@ -387,6 +387,10 @@ const lua_pcallk = function(L, nargs, nresults, errfunc, ctx, k) {
return status;
};
+const lua_pcall = function(L, n, r, f) {
+ return lua_pcallk(L, n, r, f, 0, null);
+}
+
module.exports.lua_pushvalue = lua_pushvalue;
module.exports.lua_pushnil = lua_pushnil;
module.exports.lua_pushnumber = lua_pushnumber;
@@ -411,6 +415,8 @@ 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_pcallk = lua_pcallk;
+module.exports.lua_pcall = lua_pcall;
module.exports.lua_pop = lua_pop;
module.exports.lua_setglobal = lua_setglobal;
module.exports.lua_istable = lua_istable;
diff --git a/src/ldo.js b/src/ldo.js
index 632bc22..458ae46 100644
--- a/src/ldo.js
+++ b/src/ldo.js
@@ -19,6 +19,23 @@ const TMS = ltm.TMS;
const nil = new TValue(CT.LUA_TNIL, null);
+const seterrorobj = function(L, errcode, oldtop) {
+ switch (errcode) {
+ case TS.LUA_ERRMEM: {
+ L.stack[oldtop] = new TValue(CT.LUA_TLNGSTR, "not enough memory");
+ break;
+ }
+ case TS.LUA_ERRERR: {
+ L.stack[oldtop] = new TValue(CT.LUA_TLNGSTR, "error in error handling");
+ }
+ default: {
+ L.stack[oldtop] = L.stack[L.top - 1];
+ }
+ }
+
+ L.top = oldtop + 1;
+};
+
/*
** Prepares a function call: checks the stack, creates a new CallInfo
** entry, fills in the relevant information, calls hook if needed.
@@ -221,7 +238,6 @@ const luaD_rawrunprotected = function(L, f, ud) {
try {
f(L, ud);
} catch (e) {
- console.log(e);
if (lj.status == 0) lj.status = -1;
}
@@ -243,7 +259,7 @@ const luaD_pcall = function(L, func, u, old_top, ef) {
if (status !== TS.LUA_OK) {
lfunc.luaF_close(L, old_top);
- // TODO: seterrorobj(L, status, oldtop);
+ seterrorobj(L, status, old_top);
L.ci = old_ci;
// TODO: L->allowhook = old_allowhooks;
L.nny = old_nny;