lvm.js

changeset 71
768d8fb574bb
parent 68
5b815d3591e2
child 72
dc73a60b3c06
equal deleted inserted replaced
70:29f412ed4bca 71:768d8fb574bb
389 case OP_NEWTABLE: 389 case OP_NEWTABLE:
390 frame.reg[INS_A(instruction)] = new LValue("table", {}); 390 frame.reg[INS_A(instruction)] = new LValue("table", {});
391 break; 391 break;
392 case OP_GETTABLE: 392 case OP_GETTABLE:
393 var C = INS_C(instruction); 393 var C = INS_C(instruction);
394 var keysource = (C&256)?frame.f.constants:frame.reg; 394 var keysource = (C&0x100)?frame.f.constants:frame.reg;
395 var key = keysource[C&0xff]; 395 var key = keysource[C&0xff];
396 var value = frame.reg[INS_B(instruction)].index(key).value; 396 var value = frame.reg[INS_B(instruction)].index(key).value;
397 frame.reg[INS_A(instruction)] = new LValueFromValue(value); 397 frame.reg[INS_A(instruction)] = new LValueFromValue(value);
398 break; 398 break;
399 case OP_SETTABLE: 399 case OP_SETTABLE:
400 var C = INS_C(instruction); 400 var C = INS_C(instruction);
401 var valuesource = (C&256)?frame.f.constants:frame.reg; 401 var valuesource = (C&0x100)?frame.f.constants:frame.reg;
402 var value = valuesource[C&0xff]; 402 var value = valuesource[C&0xff];
403 403
404 var B = INS_B(instruction); 404 var B = INS_B(instruction);
405 var keysource = (B&256)?frame.f.constants:frame.reg; 405 var keysource = (B&0x100)?frame.f.constants:frame.reg;
406 var key = keysource[B&0xff]; 406 var key = keysource[B&0xff];
407 frame.reg[INS_A(instruction)].setIndex(key, value); 407 frame.reg[INS_A(instruction)].setIndex(key, value);
408 break; 408 break;
409 case OP_CALL: 409 case OP_CALL:
410 var f = frame.reg[INS_A(instruction)].precall(); // return JS or LValue 410 var f = frame.reg[INS_A(instruction)].precall(); // return JS or LValue
476 break; 476 break;
477 case OP_SELF: 477 case OP_SELF:
478 var table = frame.reg[INS_B(instruction)]; 478 var table = frame.reg[INS_B(instruction)];
479 frame.reg[INS_A(instruction)+1] = table; 479 frame.reg[INS_A(instruction)+1] = table;
480 var C = INS_C(instruction); 480 var C = INS_C(instruction);
481 var keysource = (C&256)?frame.f.constants:frame.reg; 481 var keysource = (C&0x100)?frame.f.constants:frame.reg;
482 var key = keysource[C&0xff]; // FIXME: Should this be made an LValue? 482 var key = keysource[C&0xff]; // FIXME: Should this be made an LValue?
483 frame.reg[INS_A(instruction)] = table.index(key); 483 frame.reg[INS_A(instruction)] = table.index(key);
484 break; 484 break;
485 case OP_FORPREP: 485 case OP_FORPREP:
486 frame.pc+=(INS_sBx(instruction)); 486 frame.pc+=(INS_sBx(instruction));

mercurial