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)); |