Fri, 19 Nov 2010 03:38:18 +0000
Implement OP_TESTSET
lvm.js | file | annotate | diff | comparison | revisions |
--- a/lvm.js Fri Nov 19 03:37:51 2010 +0000 +++ b/lvm.js Fri Nov 19 03:38:18 2010 +0000 @@ -16,6 +16,7 @@ var OP_JMP = 22; var OP_LT = 24; var OP_TEST = 26; +var OP_TESTSET = 27; var OP_CALL = 28; var OP_RETURN = 30; var OP_FORLOOP = 31; @@ -481,6 +482,14 @@ if(RA_bool == (INS_C(instruction)!=0)) frame.pc++; break; + case OP_TESTSET: + var RB = frame.reg[INS_B(instruction)]; + var RB_bool = RB.type == "nil" || (RB.type == "boolean" && RB.value == false); + if(RB_bool == (INS_C(instruction)!=0)) + frame.pc++; + else + frame.reg[INS_A(instruction)] = RB; + break; case OP_JMP: frame.pc+=INS_sBx(instruction); break;