aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenoit Giannangeli <giann008@gmail.com>2017-02-07 21:55:34 +0100
committerBenoit Giannangeli <giann008@gmail.com>2017-02-07 21:55:34 +0100
commit364326b97450564d41d37cdc7b2c4fbb8049c62f (patch)
treedd22cf1a0ae16632842ac5057e272e59e711426a
parentc7b6e2364b3ff9bed781215f57a6398979b287d4 (diff)
downloadfengari-364326b97450564d41d37cdc7b2c4fbb8049c62f.tar.gz
fengari-364326b97450564d41d37cdc7b2c4fbb8049c62f.tar.bz2
fengari-364326b97450564d41d37cdc7b2c4fbb8049c62f.zip
First CallInfo expects LUA_MULTRET results
-rw-r--r--src/lstate.js2
-rw-r--r--src/lvm.js2
-rw-r--r--tests/lvm.js2
3 files changed, 3 insertions, 3 deletions
diff --git a/src/lstate.js b/src/lstate.js
index ef84e07..b919f0e 100644
--- a/src/lstate.js
+++ b/src/lstate.js
@@ -1,6 +1,7 @@
/*jshint esversion: 6 */
"use strict";
+const LUA_MULTRET = require('./lua.js').LUA_MULTRET;
class CallInfo {
@@ -28,6 +29,7 @@ class lua_State {
this.top = 1;
this.ci = new CallInfo(0, cl, 1, 1, null, null);
this.ci.u.l.savedpc = cl.p.code;
+ this.ci.nresults = LUA_MULTRET;
this.ciOff = 0;
this.stack = [
cl
diff --git a/src/lvm.js b/src/lvm.js
index cb2a795..d548e77 100644
--- a/src/lvm.js
+++ b/src/lvm.js
@@ -70,8 +70,6 @@ class LuaVM {
let i = ci.u.l.savedpc[ci.pcOff++];
let ra = this.RA(base, i);
- console.log(`Before ${OC.OpCodes[i.opcode]} L.top is ${L.top}`);
-
switch (OC.OpCodes[i.opcode]) {
case "OP_MOVE": {
L.stack[ra] = L.stack[this.RB(base, i)];
diff --git a/tests/lvm.js b/tests/lvm.js
index 084a9ad..c93b1ed 100644
--- a/tests/lvm.js
+++ b/tests/lvm.js
@@ -108,7 +108,7 @@ test('Binary op', function (t) {
}, "Program executed without errors");
t.deepEqual(
- vm.L.stack.slice(vm.L.stack.length - 12).map(function (e) { return e.value; }),
+ vm.L.stack.slice(vm.L.top - 12, vm.L.top).map(function (e) { return e.value; }),
[15, -5, 50, 0.5, 5, 9765625.0, 0, 0, 15, 15, 5120, 0],
"Program output is correct"
);