From 9159cf1389d5d71b17dd9bf64f93b0fa7183527d Mon Sep 17 00:00:00 2001 From: Mitchell Plamann Date: Sat, 28 Mar 2015 19:14:10 -0400 Subject: [PATCH] Added more tests, function calls work Fixed a bunch of bugs in other opcodes, too --- src/c0vm.js | 74 ++++++++++++++++++++++++++++++------- src/opcodes.js | 12 +++--- test/dsquared.c0 | 23 ++++++++++++ test/dsquared.c0.bc0 | 78 +++++++++++++++++++++++++++++++++++++++ test/dsquared.c0.bc0out | 1 + test/dsquared.c0.c0out | 1 + test/dsquared.c0.ex | Bin 0 -> 13920 bytes test/isqrt.c0 | 10 +++++ test/isqrt.c0.bc0 | 51 +++++++++++++++++++++++++ test/isqrt.c0.bc0out | 0 test/isqrt.c0.c0out | 1 + test/isqrt.c0.ex | Bin 0 -> 13360 bytes test/mid.c0 | 10 +++++ test/mid.c0.bc0 | 35 ++++++++++++++++++ test/mid.c0.bc0out | 1 + test/mid.c0.c0out | 1 + test/mid.c0.ex | Bin 0 -> 13350 bytes test/sample2.5.c0 | 7 ++++ test/sample2.5.c0.bc0 | 55 +++++++++++++++++++++++++++ test/sample2.5.c0.bc0out | 0 test/sample2.5.c0.c0out | 0 test/sample2.5.c0.ex | Bin 0 -> 13606 bytes test/testif.c0 | 8 ++++ test/testif.c0.bc0 | 36 ++++++++++++++++++ test/testif.c0.bc0out | 1 + test/testif.c0.c0out | 1 + test/testif.c0.ex | Bin 0 -> 13313 bytes test/tests.js | 34 ++++++++++++----- 28 files changed, 412 insertions(+), 28 deletions(-) create mode 100644 test/dsquared.c0 create mode 100644 test/dsquared.c0.bc0 create mode 100644 test/dsquared.c0.bc0out create mode 100644 test/dsquared.c0.c0out create mode 100755 test/dsquared.c0.ex create mode 100644 test/isqrt.c0 create mode 100644 test/isqrt.c0.bc0 create mode 100644 test/isqrt.c0.bc0out create mode 100644 test/isqrt.c0.c0out create mode 100755 test/isqrt.c0.ex create mode 100644 test/mid.c0 create mode 100644 test/mid.c0.bc0 create mode 100644 test/mid.c0.bc0out create mode 100644 test/mid.c0.c0out create mode 100755 test/mid.c0.ex create mode 100644 test/sample2.5.c0 create mode 100644 test/sample2.5.c0.bc0 create mode 100644 test/sample2.5.c0.bc0out create mode 100644 test/sample2.5.c0.c0out create mode 100755 test/sample2.5.c0.ex create mode 100644 test/testif.c0 create mode 100644 test/testif.c0.bc0 create mode 100644 test/testif.c0.bc0out create mode 100644 test/testif.c0.c0out create mode 100755 test/testif.c0.ex diff --git a/src/c0vm.js b/src/c0vm.js index 02d8535..13338a9 100755 --- a/src/c0vm.js +++ b/src/c0vm.js @@ -1,10 +1,17 @@ op = require("./opcodes"); +var INT_MIN = 0x80000000; +var INT_MAX = 0x7FFFFFFF; + var verbose = false; function log(message) { if (verbose) console.log(message); } +function c0_assertion_failure(val) { + throw "c0 assertion failure: " + val; +} + var StackFrame = function(file, f) { log("Creating stack frame"); this.stack = []; @@ -12,7 +19,7 @@ var StackFrame = function(file, f) { this.program = f.code; this.variables = []; for (var i = 0; i < f.num_vars; i++) - variables.push(0); + this.variables.push(0); this.file = file; } @@ -21,7 +28,7 @@ var ProgramState = function(parsed_file) { var main_function = parsed_file.function_pool[0]; this.frame = new StackFrame(parsed_file, parsed_file.function_pool[0]); - this.call_stack = [this.frame]; + this.call_stack = []; this.file = parsed_file; } @@ -33,13 +40,23 @@ ProgramState.prototype.pop = function() { return this.frame.stack.pop(); } +ProgramState.prototype.goto_offset = function() { + var c1 = this.frame.program[this.frame.pc+1]; + var c2 = this.frame.program[this.frame.pc+2] + + var address_offset = (c1 << 8) + c2; + // Handle negative values + if ((address_offset & 0x8000) != 0) + address_offset = -0x8000 + (address_offset & 0x7FFF); + + this.frame.pc += address_offset; +} + ProgramState.prototype.doIf = function(f) { var y = this.pop(); var x = this.pop(); if (f(x,y)) { - var address_offset = (this.frame.program[this.frame.pc+1] * 0x1000) + - this.frame.program[this.frame.pc+2]; - this.frame.pc += address_offset; + this.goto_offset(); } else { this.frame.pc += 3; } @@ -47,7 +64,7 @@ ProgramState.prototype.doIf = function(f) { ProgramState.prototype.step = function() { var opcode = this.frame.program[this.frame.pc] - log("Running opcode " + + log("0x" + this.frame.pc.toString(16) + " Running opcode " + op.lookup_table[opcode]); switch (opcode) { // Stack manipulation @@ -81,8 +98,13 @@ ProgramState.prototype.step = function() { // Returning from a function case op.RETURN: var retVal = this.pop(); - throw retVal; + if (this.call_stack.length == 0) + throw retVal; + this.frame = this.call_stack.pop(); + this.push(retVal); + + break; // Arithmetic case op.IADD: this.frame.pc++; @@ -200,20 +222,20 @@ ProgramState.prototype.step = function() { case op.IF_CMPNE: this.doIf(function (x,y) {return y != x;}); break; - case op.IF_CMPLT: + case op.IF_ICMPLT: this.doIf(function (x,y) {return y > x;}); break; - case op.IF_CMPGE: + case op.IF_ICMPGE: this.doIf(function (x,y) {return y <= x;}); break; - case op.IF_CMPGT: + case op.IF_ICMPGT: this.doIf(function (x,y) {return y < x;}); break; - case op.IF_CMPLE: + case op.IF_ICMPLE: this.doIf(function (x,y) {return y >= x;}); break; case op.GOTO: - this.doIf(function (x,y) {return true;}); + this.goto_offset(); break; case op.ATHROW: this.frame.pc++; @@ -226,8 +248,34 @@ ProgramState.prototype.step = function() { c0_assertion_failure(a); break; + // Function call operations + + case op.INVOKESTATIC: + var c1 = this.frame.program[this.frame.pc+1]; + var c2 = this.frame.program[this.frame.pc+2]; + this.frame.pc += 3; + + var index = (c1 << 8) + c2; + + var f = this.file.function_pool[index]; + var newFrame = new StackFrame(this.file, f); + for (var i = f.num_args - 1; i >= 0; i--) { + newFrame.variables[i] = this.pop(); + } + + this.call_stack.push(this.frame); + this.frame = newFrame; + break; + default: - console.log("Error: Unknown opcode: 0x" + opcode.toString(16) + "\n"); + var opcode_name; + try { + opcode_name = op.lookup_table[opcode]; + } catch (ignored) { + opcode_name = "UNKNOWN"; + } + console.log("Error: Unknown opcode: 0x" + opcode.toString(16) + + " (" + opcode_name + ")\n"); throw "Error - unknown opcode"; } return false; diff --git a/src/opcodes.js b/src/opcodes.js index b0ed6eb..98ec086 100644 --- a/src/opcodes.js +++ b/src/opcodes.js @@ -90,12 +90,12 @@ exports.lookup_table = { 0x13: "ILDC", 0x14: "ALDC", 0x00: "NOP", - 0x9F: "IF", - 0xA0: "IF", - 0xA1: "IF", - 0xA2: "IF", - 0xA3: "IF", - 0xA4: "IF", + 0x9F: "IF_CMPEQ", + 0xA0: "IF_CMPNE", + 0xA1: "IF_ICMPLT", + 0xA2: "IF_ICMPGE", + 0xA3: "IF_ICMPGT", + 0xA4: "IF_ICMPLE", 0xA7: "GOTO", 0xBF: "ATHROW", 0xCF: "ASSERT", diff --git a/test/dsquared.c0 b/test/dsquared.c0 new file mode 100644 index 0000000..860baae --- /dev/null +++ b/test/dsquared.c0 @@ -0,0 +1,23 @@ +int dsquared(int x, int y) +{ + return x*x + y*y; +} + +int main () +{ + int a1 = 15; + int b1 = 122; + int a2 = 42; + int b2 = 0; + int a3 = -7; + int b3 = -11; + int a4 = -4; + int b4 = 3; + int sum = 0; + sum = sum + dsquared(a1,b1); + sum = sum + dsquared(a2,b2); + sum = sum + dsquared(a3,b3); + sum = sum + dsquared(a4,b4); + return sum; +} + diff --git a/test/dsquared.c0.bc0 b/test/dsquared.c0.bc0 new file mode 100644 index 0000000..d95b37a --- /dev/null +++ b/test/dsquared.c0.bc0 @@ -0,0 +1,78 @@ +C0 C0 FF EE # magic number +00 09 # version 4, arch = 1 (64 bits) + +00 00 # int pool count +# int pool + +00 00 # string pool total size +# string pool + +00 02 # function count +# function_pool + +#
+00 00 # number of arguments = 0 +00 09 # number of local variables = 9 +00 57 # code length = 87 bytes +10 0F # bipush 15 # 15 +36 00 # vstore 0 # a1 = 15; +10 7A # bipush 122 # 122 +36 01 # vstore 1 # b1 = 122; +10 2A # bipush 42 # 42 +36 02 # vstore 2 # a2 = 42; +10 00 # bipush 0 # 0 +36 03 # vstore 3 # b2 = 0; +10 F9 # bipush -7 # -7 +36 04 # vstore 4 # a3 = -(7); +10 F5 # bipush -11 # -11 +36 05 # vstore 5 # b3 = -(11); +10 FC # bipush -4 # -4 +36 06 # vstore 6 # a4 = -(4); +10 03 # bipush 3 # 3 +36 07 # vstore 7 # b4 = 3; +10 00 # bipush 0 # 0 +36 08 # vstore 8 # sum = 0; +15 08 # vload 8 # sum +15 00 # vload 0 # a1 +15 01 # vload 1 # b1 +B8 00 01 # invokestatic 1 # dsquared(a1, b1) +60 # iadd # (sum + dsquared(a1, b1)) +36 08 # vstore 8 # sum = (sum + dsquared(a1, b1)); +15 08 # vload 8 # sum +15 02 # vload 2 # a2 +15 03 # vload 3 # b2 +B8 00 01 # invokestatic 1 # dsquared(a2, b2) +60 # iadd # (sum + dsquared(a2, b2)) +36 08 # vstore 8 # sum = (sum + dsquared(a2, b2)); +15 08 # vload 8 # sum +15 04 # vload 4 # a3 +15 05 # vload 5 # b3 +B8 00 01 # invokestatic 1 # dsquared(a3, b3) +60 # iadd # (sum + dsquared(a3, b3)) +36 08 # vstore 8 # sum = (sum + dsquared(a3, b3)); +15 08 # vload 8 # sum +15 06 # vload 6 # a4 +15 07 # vload 7 # b4 +B8 00 01 # invokestatic 1 # dsquared(a4, b4) +60 # iadd # (sum + dsquared(a4, b4)) +36 08 # vstore 8 # sum = (sum + dsquared(a4, b4)); +15 08 # vload 8 # sum +B0 # return # + + +# +00 02 # number of arguments = 2 +00 02 # number of local variables = 2 +00 0C # code length = 12 bytes +15 00 # vload 0 # x +15 00 # vload 0 # x +68 # imul # (x * x) +15 01 # vload 1 # y +15 01 # vload 1 # y +68 # imul # (y * y) +60 # iadd # ((x * x) + (y * y)) +B0 # return # + +00 00 # native count +# native pool + diff --git a/test/dsquared.c0.bc0out b/test/dsquared.c0.bc0out new file mode 100644 index 0000000..52d2ba8 --- /dev/null +++ b/test/dsquared.c0.bc0out @@ -0,0 +1 @@ +17068 diff --git a/test/dsquared.c0.c0out b/test/dsquared.c0.c0out new file mode 100644 index 0000000..52d2ba8 --- /dev/null +++ b/test/dsquared.c0.c0out @@ -0,0 +1 @@ +17068 diff --git a/test/dsquared.c0.ex b/test/dsquared.c0.ex new file mode 100755 index 0000000000000000000000000000000000000000..60c7863dc4dafdb244fff984fe7a827024fa1122 GIT binary patch literal 13920 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 literal 0 HcmV?d00001 diff --git a/test/isqrt.c0 b/test/isqrt.c0 new file mode 100644 index 0000000..b628688 --- /dev/null +++ b/test/isqrt.c0 @@ -0,0 +1,10 @@ +int main () { + int n = 15122; + int i = 0; int k = 0; + while (k <= n) { + k += 2*i + 1; + i++; + } + return i-1; +} + diff --git a/test/isqrt.c0.bc0 b/test/isqrt.c0.bc0 new file mode 100644 index 0000000..2a42549 --- /dev/null +++ b/test/isqrt.c0.bc0 @@ -0,0 +1,51 @@ +C0 C0 FF EE # magic number +00 09 # version 4, arch = 1 (64 bits) + +00 01 # int pool count +# int pool +00 00 3B 12 + +00 00 # string pool total size +# string pool + +00 01 # function count +# function_pool + +#
+00 00 # number of arguments = 0 +00 03 # number of local variables = 3 +00 34 # code length = 52 bytes +13 00 00 # ildc 0 # c[0] = 15122 +36 00 # vstore 0 # n = 15122; +10 00 # bipush 0 # 0 +36 01 # vstore 1 # i = 0; +10 00 # bipush 0 # 0 +36 02 # vstore 2 # k = 0; +# <00:loop> +15 02 # vload 2 # k +15 00 # vload 0 # n +A4 00 06 # if_icmple +6 # if (k <= n) goto <01:body> +A7 00 1A # goto +26 # goto <02:exit> +# <01:body> +15 02 # vload 2 # k +10 02 # bipush 2 # 2 +15 01 # vload 1 # i +68 # imul # (2 * i) +10 01 # bipush 1 # 1 +60 # iadd # ((2 * i) + 1) +60 # iadd # +36 02 # vstore 2 # k += ((2 * i) + 1); +15 01 # vload 1 # i +10 01 # bipush 1 # 1 +60 # iadd # +36 01 # vstore 1 # i += 1; +A7 FF E2 # goto -30 # goto <00:loop> +# <02:exit> +15 01 # vload 1 # i +10 01 # bipush 1 # 1 +64 # isub # (i - 1) +B0 # return # + +00 00 # native count +# native pool + diff --git a/test/isqrt.c0.bc0out b/test/isqrt.c0.bc0out new file mode 100644 index 0000000..e69de29 diff --git a/test/isqrt.c0.c0out b/test/isqrt.c0.c0out new file mode 100644 index 0000000..9f54fe3 --- /dev/null +++ b/test/isqrt.c0.c0out @@ -0,0 +1 @@ +122 diff --git a/test/isqrt.c0.ex b/test/isqrt.c0.ex new file mode 100755 index 0000000000000000000000000000000000000000..40a9a81e7072f1cf7d2ac705c92dff552f4b7e41 GIT binary patch literal 13360 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 MsGa8`rO)I3AA@s%vH$=8 literal 0 HcmV?d00001 diff --git a/test/mid.c0 b/test/mid.c0 new file mode 100644 index 0000000..c3efe9a --- /dev/null +++ b/test/mid.c0 @@ -0,0 +1,10 @@ +int main() +{ + int low = 0x15; + int high = 0x122; + int mid; + + mid = low + (high - low)/2; + return mid; +} + diff --git a/test/mid.c0.bc0 b/test/mid.c0.bc0 new file mode 100644 index 0000000..0d2323d --- /dev/null +++ b/test/mid.c0.bc0 @@ -0,0 +1,35 @@ +C0 C0 FF EE # magic number +00 09 # version 4, arch = 1 (64 bits) + +00 01 # int pool count +# int pool +00 00 01 22 + +00 00 # string pool total size +# string pool + +00 01 # function count +# function_pool + +#
+00 00 # number of arguments = 0 +00 03 # number of local variables = 3 +00 19 # code length = 25 bytes +10 15 # bipush 21 # 21 +36 00 # vstore 0 # low = 21; +13 00 00 # ildc 0 # c[0] = 290 +36 01 # vstore 1 # high = 290; +15 00 # vload 0 # low +15 01 # vload 1 # high +15 00 # vload 0 # low +64 # isub # (high - low) +10 02 # bipush 2 # 2 +6C # idiv # ((high - low) / 2) +60 # iadd # (low + ((high - low) / 2)) +36 02 # vstore 2 # mid = (low + ((high - low) / 2)); +15 02 # vload 2 # mid +B0 # return # + +00 00 # native count +# native pool + diff --git a/test/mid.c0.bc0out b/test/mid.c0.bc0out new file mode 100644 index 0000000..bb79365 --- /dev/null +++ b/test/mid.c0.bc0out @@ -0,0 +1 @@ +155 diff --git a/test/mid.c0.c0out b/test/mid.c0.c0out new file mode 100644 index 0000000..bb79365 --- /dev/null +++ b/test/mid.c0.c0out @@ -0,0 +1 @@ +155 diff --git a/test/mid.c0.ex b/test/mid.c0.ex new file mode 100755 index 0000000000000000000000000000000000000000..07c414a312fe282b10a1c461f0421045426ca6b8 GIT binary patch literal 13350 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 +00 00 # number of arguments = 0 +00 02 # number of local variables = 2 +00 3B # code length = 59 bytes +10 00 # bipush 0 # 0 +36 01 # vstore 1 # sum = 0; +10 0F # bipush 15 # 15 +36 00 # vstore 0 # i = 15; +# <00:loop> +15 00 # vload 0 # i +10 7A # bipush 122 # 122 +A4 00 06 # if_icmple +6 # if (i <= 122) goto <01:body> +A7 00 14 # goto +20 # goto <02:exit> +# <01:body> +15 01 # vload 1 # sum +15 00 # vload 0 # i +60 # iadd # +36 01 # vstore 1 # sum += i; +15 00 # vload 0 # i +10 01 # bipush 1 # 1 +60 # iadd # +36 00 # vstore 0 # i += 1; +A7 FF E8 # goto -24 # goto <00:loop> +# <02:exit> +15 01 # vload 1 # sum +10 00 # bipush 0 # 0 +9F 00 06 # if_cmpeq +6 # if (sum == 0) goto <03:cond_true> +A7 00 08 # goto +8 # goto <04:cond_false> +# <03:cond_true> +10 01 # bipush 1 # true +A7 00 05 # goto +5 # goto <05:cond_end> +# <04:cond_false> +10 00 # bipush 0 # false +# <05:cond_end> +14 00 00 # aldc 0 # s[0] = "sample2.5.c0:5.2-5.19: assert failed" +CF # assert # assert(sum == 0) [failure message on stack] +15 01 # vload 1 # sum +B0 # return # + +00 00 # native count +# native pool + diff --git a/test/sample2.5.c0.bc0out b/test/sample2.5.c0.bc0out new file mode 100644 index 0000000..e69de29 diff --git a/test/sample2.5.c0.c0out b/test/sample2.5.c0.c0out new file mode 100644 index 0000000..e69de29 diff --git a/test/sample2.5.c0.ex b/test/sample2.5.c0.ex new file mode 100755 index 0000000000000000000000000000000000000000..f3055ed7519dae3173d756f26fde35ef3eb3090e GIT binary patch literal 13606 zcmcgydvILUc|UhoD_vQ(p0<%6;00u3(`fa;7Bb*?{aCXC8H6pjqQ$vh?Or`#wX4~^ zYs&-&7lF%;Vq!r``NIQBr)_9TG73pr#}F*XfDIuXlTa`zX*>*0R}fkU7)HaR>hC*` z-Md%22{WDPnZ5Tr-|u|icfRwu=idF!xi`?c&82BfB^UcLBhFv$=a9HFHsIx~#M+t8 z{Ok(0f|UaC;PUelq9Uj0lr*iVF6G>yC6sqbz~vViNtX+bDXKgqO7-QEUuFe8S}j;b z8S`?0^vKrfA_i<(w} zi)=5(rP_e(A5Gcefh5fX@=djc+CLu`rE)>|eF5&3xE9(lXZ8>PFT9+o-IG`JDmc|v zdjZu`2&X>q+6864p$L8gcp*FOMercU7qI$DKXSSBJhFxCd{hL#1-KWNGu;Wm>jc5y zkE^;s|NI7cp?Vi+B>($ay>1UAa%qXgn;rN$h!nE(Ti`XAIm(V2>-USuzgz?_E#l93 z5&6F@f^X*dJl3Q8k+UT{N8#p#g(ruFn~hL!JYg}z=pTy5jHDGxScbujoAw$z%>Kco zWhS;nL&>C>B-unNW(^LR#$ap^Dt#c#=;+>VM9hQ~?%uv78jqRXq28z|$_kelk&qP< z)sf+(l^Bfm8&*7woV})S)C|Q^!;E~UN4<@iBdEJCK5WL=u$f526Koi|Rv+sNN8?G8 z^_!L%+sl#`oJz31eThK}o)~06Hg7027-NP>9-yE%nUsDQW-P**LVd}mP%M%#_cev% zsYKFjYFXFR(%MSP&vnI1W!JD9J3BUSFjL@^tY&poXn_Vq~3J6db(^Ybw&PwSq2O`5RbYW;%0!?Qf_RSmFRbgS=6>Ow=7aX0b45lyabL~EL z4E1rPk9MD+qS^CRD-IHNj5sBKa>fn$VEU)QlkaW}YG;G5&ZMAxoCJdp{KEQZcQE~; z(0^O%AKXw5cUa2U1^>#y3yy9GmZC!IvTTzU?m96= z^`$S&p4~nDC(x`~!KSYSMaPg^@TB^5V1`<8I`A2NJ-jz>Eby5Ym>I==^uT9#f9>Mv zff;7io@mBvF%$fs+1X(FbY}AN+1atc%uAwIu50RD9n z|31Wn>A*~oY^4^X7nftKi3gLz-+n zN}AUPGRdsfZ)UA7Mee0js-0PjQnM4Km@A}*T25!~$m+fQnbJFkuDW+OH$k0xP-J(a z+uG9yUV(p8V}V!Fp7muIow2}FFzs1|Ebsr!v(P=pAL}6Ft=HPs5)R_fqabY@NnbxZZGRRymBoO;F->})o`&heNO`>#T^ZJ`hVBn zx#q&A^yeMvkAo*acXy=U$ej8FE!-z&)|EB zcY|YhG+-%-HdJ?xMH=cmk@I$rSq-Z@$L?upCJ&W=;<2WGIr4e_CzqENmRW0|e2(AK zu?~&l`JS0g{a!w-Vy(*jhI))v?c6&z85$anns^WU!p+yM^R+gv^R=wM&PyLN3Cr6T z8jP9|>W2V*L|o^M#Vv2hYwe3)mGp+=q&j5AEbmY#JTMqD=dmr##*VN~97%^9|Bjg}q%Ct_PyeOLaZRAP!=M>Z znuu)}@<~vd&u2lWKre#+473`v?{&~-P(LO~4`>(YFwIIN_3qT}-odnyYHiv4GW`h3 z=>IHTt5HXQ1UFSyA98J3Q0nqSLX_PAxC`au6J&y7)wN?2a7~n@HBz9ecf}Y)Ts22mVLwZko$0ntEUp(kWE;2cv66qS2(#s$w}#(j}pB# zC|xE6<_k9a9Z&xeDXITeC4yysm!Ie8gMw1f@mFPpXf+QeVv<`cR>yzOCBJ{G3;~E_u~w&Ac@C|5w$IsTrrDOsStspdUG} z`sOrS;wa9l4$1#lk4pLvlK!)#FG~8lq`#H)V@XTP{oLeYNmohQCaJT& z8@Ft^&bt~>jy2x3zO}w+zG`x2~)0Tjb9 zF;7&^A8=<);D!9d$O-w3l)p{Q0*B5+;KhX0wX2ZVBDmd$t58KQy^Q_mg{@Cm9%^tNZEIgJ?E*?e9+OaCfRDO7X?iJFJcyH-=MsH zBQc9PQ>~wXtmhKW)a$QPNj+!0IxSqDC7fBU_mkLC&NS;SRI-dS?fTDQ)3cm2e*J9{ zyNokI{aeJW;7pf(fyBI=>CwMT2CmThAh1XOD-vtaq96nMMPgQQuZQ*T6LU3ZEd5O~ z@Fi^+WJG_23^Z%oz#P+=M6LSmqZA!mD^>k?u0(%}W zS1fm)AI>`ou-%>3&8Ft62C!yh$M`CAqSwWEaAbaMeR=^F2; zIS#7T3a+c>E#m5E%DBdZwS7!mL@KWF0n|$`)w)MW;L^4VKN!aN`x#U_dN;%t4kHMo zUHTnvd7$PYE=oP;8sAfM7u9;H;CgDl&N*RQ)_R$&mDTO0!c`B-I`})D*YQL0o@=g> zUI~9!3C%rh(X~{iuNTr&Qo90qO4`vyGgR10g+H59Sbc_M+NhBJ&r;&=eo*b`gIEe` zE+MD5fP4JeduysVOC|2{$$J;`KD|l!(R0brd_P%Wm-9PgyCGIP!n7{3?;7uB^^Zu2 zBT|C8dZ%bqkR*2r$*nXC$m)^=>MQv+O`xRHxR&N}LvfK;wR29LrjxLTcS(p5`rjUt5_Pu6E@RxMhoi?$P6 zXV=Vj2I(z?o=tF(k2!noZ>ZN6=l9wr73j9wGBQvvvKY^t$i^i%Kxe5P;C)T69v53l zy{>&)xd3;*iACeg?Eg`GVTd4=yVNUg@%?*KP5sPOq6P1wdud;(e)$F$!iCyOsJqxJ z5T9eTc#IMeOxBc2CYqx0a41Rv&8GfvI7_jiVzjMoOvUbs#rMVJE=zwb)wI@!Plu+# zSU8%Bn8Jc&ntBJVWFCU&E!<2IRx}4bA`BZb`+NiR(P8Z$Hj~KW=?6R*M;6l@UZ^a! zU9ENQI!)i8_otqjxVcsTuKv<96D=Qp_{>D}&9~F#WCb!DBtXySHP89E2i=zcH1(KiOqq+-dz{un-$2r^z|88Z`uVX&b@cwmFrZt^zvdmG{XhVc6J-bO^1L&JzQ+x}^y*~aF0JSq$) zQ$zNMvM)T8@|lqo4Z`{+{KpIpg<`QL1hDspEDAJJoOxj1`o;l7pyMg4$ug7ZU-)Q< zpmoQsMsKQ*2da&DG-Aa2`jRFZ0X!MnYx08R00R2FZOOsAO~YbDsPB2SKheKeQaB1V z{-@NS1>fk4hWb&NtfM!CU^=Qz++`*NnlM8VUPB-LI>$moCIb?U?l)xQ9h(B?P*O$S zRT+=e8<=r-p#D?Ar& zredk28ENIh+)Zkb=!mQ}KH4#Jgf=^dLy;CiphMg>f~*x}9fL4x9kCDI-0gs-+*HqX zC2b-YG%#&z(f2$@6m7w-0}VyC*W}g&^>-+IS85o9x||OK+!~7GVI#Y|L85H0MH?$> z*v0k-iSWUf>NGfU(E!@#Kq+-Td|&)T73ycc zflzXQ`6BycP!ts1>cf)Y+lxst7?0&K2Fem^g4`KKA#8?*2E(W@4l}s*S7gzaEZ*Rift2pc?n<`JcPyg4nj22~FSn))1`6U%(xggm)$=cJE zVCX-y(qHcKgF`Gr0$$GLZdgO}QVTf#M@pi8m!IeSQh$FKZJ6-zKVmi zOMR~#aFU^ZcJ?2|4M{}0n~nSQNI_K(M0isDpm>_WcKu-)XBd|HXO*C&O21n22ORqT zaz8KemkWV&N8t)OX~yBV*Ukol6lCG(YUgS^pC#wCnd&`MG#cmC)Ksg|_6Z{~u9CBJ>PUQs;IiWCyE$ z7NxoISNtS0c758hqBQvh_5TI3c758hqBJG-o&GxcXCX^-Px-InUT38Kq-?)@oU`*+ z7PA+iYp-AJSC7=90LfXO;uU=vGIo6xcRVQdN4S;TP3bB6ONahU?H(>XBlVS^%7W5U zJjE&qQ|+g1OG-Mv`zfs!Bzt%2{|8FQ|K_ZO$SC~{4qSF8*P){S#HBF1Xh7D##|{>d z{kQ-|Dt|Ba|5Obefk@7}TmYOH$$cspo}V}h9W1LZqJL~DS;2mQL&3rFm^)$4{%eyj z&I&a!+*;08Wv2$XLxf9iS|Jp!Qi2YB$?~?VwMSt@GjiaM$pOC{*g9Nl{MEWl%VeSY zC+NkDbjVTYa7PFgxx2|bmw!&F8>^-IPOulc;fdenw?jPd#;SXk$`!F9ba83yVZoDDY`zv35e)imFK0f!n8I`;7)=}?~e0ePD za(&OotC?E&^YNPOdY+HhVtw9Yhj`x2>agw>!WZJ4W+8l0_I!`sm>Z`L)jF7u&pii7 zQ@uwV_5QiUryMwa&yhTv=SMD=Mv>Lf&(-q% zpq}H0C0;LawLVM$Cp*IqJH^`j6t`2uo^;HUA9K8#Jyz{UE|*Rts}-1UzXVS8o?qb4 z2_rX+t584B6v4%NVeUMv=MAr6M;(5yDT3bsT*I!bbN&Z_7dqG41zf(m^Zbu+9P5B= zms+!}BJu~6ykmUtm$)-d{V;HEUX6nJRuPd z+^p(y+MytvNjnOk;CL;g17P;_U1^_=vr(e|5tM#H@_0^Fh+Vbo1uidS?Dsc;7dj7o zLE2Xl%3Gw;2NIu<&o!+tls=VqoacwJI2W8J3xO9pKfJn#{0&9$F5rdy|Fa_UbV9Mv zy!|T2=g-+kImqz>?`y=AqqbwjES#{CRthJM5NR~FblMjzU<^h^h-+mc z(iBMz4eeL{1a8^N-PyKd)AoR&IC4kjbG7i86tBe*?zII0Z|uBv^QKPY)@|E%2D**z zO`AId)LIIFAs&?o?H7?-JHSs|Gh^%Rw`|(pv4z==MT=w2e!u-hu{_5dPNu}^YXpYn z`E6lG1zp8a=r3@nn@&^bR{@g+j(PI~*ZG2T&Q#|YD_2C6lgCqeIPwo27e^oy8v`+e zg1LxXLR1ZX{<(6;>G2Q+wN=E{Fd&;7zhvB?U^<;f7qd={EcPA326ZG4Pf|xF`or?{ zcz#RlXT(*jL{vK)m#3hwh=S*ju)E)ydnP! D5zM_e literal 0 HcmV?d00001 diff --git a/test/testif.c0 b/test/testif.c0 new file mode 100644 index 0000000..173b796 --- /dev/null +++ b/test/testif.c0 @@ -0,0 +1,8 @@ +int main() { + int x = 4; + if (x < 3) + x = 23; + else + x = 32; + return x; +} diff --git a/test/testif.c0.bc0 b/test/testif.c0.bc0 new file mode 100644 index 0000000..578e4be --- /dev/null +++ b/test/testif.c0.bc0 @@ -0,0 +1,36 @@ +C0 C0 FF EE # magic number +00 09 # version 4, arch = 1 (64 bits) + +00 00 # int pool count +# int pool + +00 00 # string pool total size +# string pool + +00 01 # function count +# function_pool + +#
+00 00 # number of arguments = 0 +00 01 # number of local variables = 1 +00 1C # code length = 28 bytes +10 04 # bipush 4 # 4 +36 00 # vstore 0 # x = 4; +15 00 # vload 0 # x +10 03 # bipush 3 # 3 +A1 00 06 # if_icmplt +6 # if (x < 3) goto <00:then> +A7 00 0A # goto +10 # goto <01:else> +# <00:then> +10 17 # bipush 23 # 23 +36 00 # vstore 0 # x = 23; +A7 00 07 # goto +7 # goto <02:endif> +# <01:else> +10 20 # bipush 32 # 32 +36 00 # vstore 0 # x = 32; +# <02:endif> +15 00 # vload 0 # x +B0 # return # + +00 00 # native count +# native pool + diff --git a/test/testif.c0.bc0out b/test/testif.c0.bc0out new file mode 100644 index 0000000..f5c8955 --- /dev/null +++ b/test/testif.c0.bc0out @@ -0,0 +1 @@ +32 diff --git a/test/testif.c0.c0out b/test/testif.c0.c0out new file mode 100644 index 0000000..f5c8955 --- /dev/null +++ b/test/testif.c0.c0out @@ -0,0 +1 @@ +32 diff --git a/test/testif.c0.ex b/test/testif.c0.ex new file mode 100755 index 0000000000000000000000000000000000000000..10fa75d0b68a6009e2565ab8d95390b381ee8320 GIT binary patch literal 13313 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 G`@aB&1!If= literal 0 HcmV?d00001 diff --git a/test/tests.js b/test/tests.js index 334bf81..6229ddb 100644 --- a/test/tests.js +++ b/test/tests.js @@ -3,12 +3,17 @@ c0vm = require("../src/c0vm.js") var callbacks = {} -// Tests that IADD, BIPUSH, and RETURN (from main) work -exports.testIADD = function(test) { - var result = c0vm.execute(parser.parse("iadd.c0.bc0"), callbacks, false); - test.ok(result == -2, "iadd.c0.bc0 - Error in IADD, BIPUSH, or RETURN"); - test.done(); -}; +function doTest(filename, expected_result) { + return function(test) { + var result = c0vm.execute(parser.parse(filename), callbacks, false); + test.ok(result == expected_result, + filename + " - did not get expected result " + expected_result + + ", instead got " + result); + test.done(); + } +} + +exports.testIADD = doTest("iadd.c0.bc0", -2); exports.testPrint = function(test) { var result = c0vm.execute(parser.parse("test.bc0"), callbacks, false); @@ -16,8 +21,19 @@ exports.testPrint = function(test) { test.done(); } -exports.testISHR = function(test) { - var result = c0vm.execute(parser.parse("ishr.c0.bc0"), callbacks, false); - test.ok(result == -1, "ishr.c0.bc0 - -1 >> 1 gave " + result + ", not -1"); +exports.testISHR = doTest("ishr.c0.bc0", -1); + +exports.testISQRT = doTest("isqrt.c0.bc0", 122); + +exports.testMID = doTest("mid.c0.bc0", 155); + +// This one should throw an exception because an assertion fails +exports.testSample25 = function(test) { + test.throws(c0vm.execute(parser.parse("sample2.5.c0.bc0"), callbacks, false)); test.done(); } + +exports.testIF = doTest("testif.c0.bc0", 32); + +exports.testDSQUARED = doTest("dsquared.c0.bc0", 17068); +