From 29975e1ce839098e7e55b0cd25d788f0c96555ba Mon Sep 17 00:00:00 2001 From: Benoit Giannangeli Date: Fri, 3 Feb 2017 11:51:39 +0100 Subject: MOVE --- luac.out | Bin 203 -> 221 bytes sandbox/helloworld.lua | 1 - src/lvm.js | 7 ++++--- tests/lvm.js | 24 ++++++++++++++++++++++++ 4 files changed, 28 insertions(+), 4 deletions(-) delete mode 100644 sandbox/helloworld.lua diff --git a/luac.out b/luac.out index 1c971ab..eb528fa 100644 Binary files a/luac.out and b/luac.out differ diff --git a/sandbox/helloworld.lua b/sandbox/helloworld.lua deleted file mode 100644 index 7785fb9..0000000 --- a/sandbox/helloworld.lua +++ /dev/null @@ -1 +0,0 @@ -local a = "hello world" diff --git a/src/lvm.js b/src/lvm.js index 7a65d74..964abe7 100644 --- a/src/lvm.js +++ b/src/lvm.js @@ -42,11 +42,10 @@ class LuaVM { let i = ci.savedpc[ci.pcOff++]; let ra = this.RA(base, i.A); - - console.log(OC.OpCodes[i.opcode]); + switch (OC.OpCodes[i.opcode]) { case "OP_MOVE": - L.stack[ra] = RB(base, i.opcode, i.B); + L.stack[ra] = L.stack[this.RB(base, i.opcode, i.B)]; break; case "OP_LOADK": L.stack[ra] = k[i.Bx]; @@ -131,6 +130,8 @@ class LuaVM { } L.ci = ci.previous; + // TODO what to return when end of program ? + console.log(L.stack); if (L.ci === null) return; if (i.B !== 0) L.top = ci.top; diff --git a/tests/lvm.js b/tests/lvm.js index 6ee348d..ffd128d 100644 --- a/tests/lvm.js +++ b/tests/lvm.js @@ -58,6 +58,30 @@ test('LOADK, RETURN', function (t) { vm.execute(); }, "Program executed without errors"); + t.strictEqual( + vm.L.stack[0].value, + "hello world", + "Program output is correct" + ); +}); + + +test('MOV', function (t) { + let luaCode = ` + local a = "hello world" + local b = a + return b + `, vm; + + t.plan(1); + + t.comment("Running following code: \n" + luaCode); + + // t.doesNotThrow(function () { + vm = getVM(luaCode); + vm.execute(); + // }, "Program executed without errors"); + t.strictEqual( vm.L.stack[0].value, "hello world", -- cgit v1.2.3-70-g09d2