From 55db79dace02d22a7e0a6462cbf0b2b52f411639 Mon Sep 17 00:00:00 2001 From: Benoit Giannangeli Date: Mon, 6 Feb 2017 08:55:53 +0100 Subject: postcall and precall In the tests, we just look at the last n elements of the stack to check our results. This is because the executed script itself doesn't expect any result, so we did not put results at L.top. --- src/lfunc.js | 1 - src/lstate.js | 6 ++++-- src/lvm.js | 4 ++-- 3 files changed, 6 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/lfunc.js b/src/lfunc.js index abc87e8..929dae8 100644 --- a/src/lfunc.js +++ b/src/lfunc.js @@ -17,7 +17,6 @@ class Proto { this.linedefined = 0; // debug information this.lastlinedefined = 0; // debug information this.source = null; // used for debug information - this.nresults = 0; // expected number of results from this function } } diff --git a/src/lstate.js b/src/lstate.js index bf49b42..ef84e07 100644 --- a/src/lstate.js +++ b/src/lstate.js @@ -4,8 +4,9 @@ class CallInfo { - constructor(func, top, base, previous, next) { + constructor(funcOff, func, top, base, previous, next) { this.func = func; + this.funcOff = funcOff; this.top = top; this.previous = previous; this.next = next; @@ -16,6 +17,7 @@ class CallInfo { savedpc: [] } }; + this.nresults = 0; } } @@ -24,7 +26,7 @@ class lua_State { constructor(cl) { this.top = 1; - this.ci = new CallInfo(cl, 1, 1, null, null); + this.ci = new CallInfo(0, cl, 1, 1, null, null); this.ci.u.l.savedpc = cl.p.code; this.ciOff = 0; this.stack = [ diff --git a/src/lvm.js b/src/lvm.js index 155e057..95382b3 100644 --- a/src/lvm.js +++ b/src/lvm.js @@ -450,7 +450,7 @@ class LuaVM { if (L.ci.next) { L.ci = L.ci.next; } else { - ci = new CallInfo(); + ci = new CallInfo(off); L.ci.next = ci; ci.previous = L.ci; ci.next = null; @@ -473,7 +473,7 @@ class LuaVM { postcall(ci, firstResult, nres) { let wanted = ci.nresults; - let res = ci.func; + let res = ci.funcOff; this.L.ci = ci.previous; this.L.ciOff--; return this.moveresults(firstResult, res, nres, wanted); -- cgit v1.2.3-54-g00ecf