# HG changeset patch # User Matthew Wild # Date 1290137898 0 # Node ID 3ac959479e85dc4896983e7667b46c990c975671 # Parent 40d0b0429428797e9161f93b70b565c7c5e547be Implement OP_TESTSET diff -r 40d0b0429428 -r 3ac959479e85 lvm.js --- 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;