Mon, 22 Nov 2010 04:52:29 +0000
OP_CALL: Don't push varargs into called function's stack
lvm.js | file | annotate | diff | comparison | revisions |
--- a/lvm.js Mon Nov 22 04:13:28 2010 +0000 +++ b/lvm.js Mon Nov 22 04:52:29 2010 +0000 @@ -491,8 +491,8 @@ args = frame.reg.slice(A+1, B==0?undefined:(A+B)); else args = []; - for(var i=args.length;i<f.maxStackSize;i++) - args[i] = new LValue(this, "nil", null); + if(B != 0) + frame.reg.length = A+B; if(typeof(f) == "function") { // JS native function @@ -519,6 +519,10 @@ } else { + if(args.length > f.numParameters) + args.length = f.numParameters; + for(var i=args.length;i<f.maxStackSize;i++) + args[i] = new LValue(this, "nil", null); // Lua function frame = {f:f,pc:0,reg:args, retAt:INS_A(instruction),retCount:INS_C(instruction),