lvm.js

changeset 63
be8bcd01409b
parent 62
8cb403eeea79
child 64
77552f3c2c39
--- a/lvm.js	Fri Nov 19 03:39:40 2010 +0000
+++ b/lvm.js	Fri Nov 19 03:42:17 2010 +0000
@@ -408,14 +408,22 @@
 				break;
 			case OP_CALL:
 				var f = frame.reg[INS_A(instruction)].precall(); // return JS or LValue
-				var A = INS_A(instruction), B = INS_B(instruction), undefined;
+				var A = INS_A(instruction), B = INS_B(instruction), C = INS_C(instruction);
+				var undefined;
 				var args = frame.reg.slice(A+1, B==0?undefined:(A+B));
 				for(var i=args.length+1;i<f.maxStackSize;i++)
 					args[i] = new LValue("nil", null);
 				if(typeof(f) == "function")
 				{
 					// JS native function
-					var ret = f.apply(this, args.map(function (a) { return a.value; }));
+					var ret = f.apply(this, [args]);
+					for(var i = 0; i < (C-1); i++) //FIXME: Handle C == 0
+					{
+						if(i < ret && i < args.length)
+							frame.reg[A+i] = args[i];
+						else
+							frame.reg[A+i] = new LValue("nil", null);
+					}
 				}
 				else
 				{

mercurial