diff -r 3de1d63ffdf7 -r 9e7b57b0b78f lvm.js --- a/lvm.js Sun May 23 13:48:29 2010 +0100 +++ b/lvm.js Sun May 23 13:48:39 2010 +0100 @@ -9,6 +9,7 @@ var OP_SETUPVAL = 8; var OP_SETTABLE = 9; var OP_NEWTABLE = 10; +var OP_SELF = 11; var OP_CALL = 28; var OP_RETURN = 30; var OP_FORLOOP = 31; @@ -393,6 +394,14 @@ this.frame.reg.splice(0,oldFrame.retAt+i); } break; + case OP_SELF: + var table = this.frame.reg[INS_B(instruction)]; + this.frame.reg[INS_A(instruction)+1] = table; + var C = INS_C(instruction); + var keysource = (C&256)?this.frame.f.constants:this.frame.reg; + var key = keysource[C&0xff]; + this.frame.reg[INS_A(instruction)] = table.index(key); + break; case OP_FORPREP: this.frame.pc+=(INS_sBx(instruction)); var A = INS_A(instruction);