lvm.js

changeset 59
3ac959479e85
parent 58
40d0b0429428
child 60
430a0b155703
equal deleted inserted replaced
58:40d0b0429428 59:3ac959479e85
14 var OP_ADD = 12; 14 var OP_ADD = 12;
15 var OP_SUB = 13; 15 var OP_SUB = 13;
16 var OP_JMP = 22; 16 var OP_JMP = 22;
17 var OP_LT = 24; 17 var OP_LT = 24;
18 var OP_TEST = 26; 18 var OP_TEST = 26;
19 var OP_TESTSET = 27;
19 var OP_CALL = 28; 20 var OP_CALL = 28;
20 var OP_RETURN = 30; 21 var OP_RETURN = 30;
21 var OP_FORLOOP = 31; 22 var OP_FORLOOP = 31;
22 var OP_FORPREP = 32; 23 var OP_FORPREP = 32;
23 var OP_CLOSURE = 36; 24 var OP_CLOSURE = 36;
479 var RA = frame.reg[INS_A(instruction)]; 480 var RA = frame.reg[INS_A(instruction)];
480 var RA_bool = RA.type == "nil" || (RA.type == "boolean" && RA.value == false); 481 var RA_bool = RA.type == "nil" || (RA.type == "boolean" && RA.value == false);
481 if(RA_bool == (INS_C(instruction)!=0)) 482 if(RA_bool == (INS_C(instruction)!=0))
482 frame.pc++; 483 frame.pc++;
483 break; 484 break;
485 case OP_TESTSET:
486 var RB = frame.reg[INS_B(instruction)];
487 var RB_bool = RB.type == "nil" || (RB.type == "boolean" && RB.value == false);
488 if(RB_bool == (INS_C(instruction)!=0))
489 frame.pc++;
490 else
491 frame.reg[INS_A(instruction)] = RB;
492 break;
484 case OP_JMP: 493 case OP_JMP:
485 frame.pc+=INS_sBx(instruction); 494 frame.pc+=INS_sBx(instruction);
486 break; 495 break;
487 case OP_ADD: 496 case OP_ADD:
488 var RB = frame.reg[INS_B(instruction)]; 497 var RB = frame.reg[INS_B(instruction)];

mercurial