lvm.js

changeset 36
9e7b57b0b78f
parent 35
3de1d63ffdf7
child 37
62c1d9bf3000
equal deleted inserted replaced
35:3de1d63ffdf7 36:9e7b57b0b78f
7 var OP_GETTABLE = 6; 7 var OP_GETTABLE = 6;
8 var OP_SETGLOBAL = 7; 8 var OP_SETGLOBAL = 7;
9 var OP_SETUPVAL = 8; 9 var OP_SETUPVAL = 8;
10 var OP_SETTABLE = 9; 10 var OP_SETTABLE = 9;
11 var OP_NEWTABLE = 10; 11 var OP_NEWTABLE = 10;
12 var OP_SELF = 11;
12 var OP_CALL = 28; 13 var OP_CALL = 28;
13 var OP_RETURN = 30; 14 var OP_RETURN = 30;
14 var OP_FORLOOP = 31; 15 var OP_FORLOOP = 31;
15 var OP_FORPREP = 32; 16 var OP_FORPREP = 32;
16 var OP_CLOSURE = 36; 17 var OP_CLOSURE = 36;
391 this.frame.reg[oldFrame.retAt+i] = rets[i]; 392 this.frame.reg[oldFrame.retAt+i] = rets[i];
392 if(oldFrame.retAt+i<this.frame.reg.length) 393 if(oldFrame.retAt+i<this.frame.reg.length)
393 this.frame.reg.splice(0,oldFrame.retAt+i); 394 this.frame.reg.splice(0,oldFrame.retAt+i);
394 } 395 }
395 break; 396 break;
397 case OP_SELF:
398 var table = this.frame.reg[INS_B(instruction)];
399 this.frame.reg[INS_A(instruction)+1] = table;
400 var C = INS_C(instruction);
401 var keysource = (C&256)?this.frame.f.constants:this.frame.reg;
402 var key = keysource[C&0xff];
403 this.frame.reg[INS_A(instruction)] = table.index(key);
404 break;
396 case OP_FORPREP: 405 case OP_FORPREP:
397 this.frame.pc+=(INS_sBx(instruction)); 406 this.frame.pc+=(INS_sBx(instruction));
398 var A = INS_A(instruction); 407 var A = INS_A(instruction);
399 this.frame.reg[A].value -= this.frame.reg[A+2].value; 408 this.frame.reg[A].value -= this.frame.reg[A+2].value;
400 this.frame.reg[A+3] = new LValue("number", null); 409 this.frame.reg[A+3] = new LValue("number", null);

mercurial