OP_CALL: Don't push varargs into called function's stack

Mon, 22 Nov 2010 04:52:29 +0000

author
Matthew Wild <mwild1@gmail.com>
date
Mon, 22 Nov 2010 04:52:29 +0000
changeset 121
fe51bed4a718
parent 120
e058c18b9f85
child 122
b6956a682885

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

mercurial