# HG changeset patch # User Matthew Wild # Date 1290401589 0 # Node ID f8518f015ec323bec87a5d05c1d7450bac456bc1 # Parent b6956a682885cb12888d7f5e0506916baed5bff0 Implement OP_VARARG diff -r b6956a682885 -r f8518f015ec3 lvm.js --- a/lvm.js Mon Nov 22 04:52:55 2010 +0000 +++ b/lvm.js Mon Nov 22 04:53:09 2010 +0000 @@ -36,7 +36,7 @@ var OP_SETLIST = 34; var OP_CLOSE = 35; var OP_CLOSURE = 36; -//var OP_VARARG = 37; +var OP_VARARG = 37; var debugMode = false; @@ -482,6 +482,22 @@ var B = INS_B(instruction); frame.reg[INS_A(instruction)].setIndex(RK(frame, B), RK(frame, C)); break; + case OP_VARARG: + var A = INS_A(instruction); + var prevframe = this.callstack[this.callstack.length-2]; + var base = frame.retAt+frame.f.numParameters; + var available = prevframe.reg.length - base; + var wanted = INS_B(instruction)-1; + if(wanted < 0) + wanted = available; + for(var i = 0; i