lvm.js

changeset 36
9e7b57b0b78f
parent 35
3de1d63ffdf7
child 37
62c1d9bf3000
--- 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);

mercurial