Fix native function return values for the new calling interface

Fri, 19 Nov 2010 16:57:32 +0000

author
Matthew Wild <mwild1@gmail.com>
date
Fri, 19 Nov 2010 16:57:32 +0000
changeset 79
94c0441b7321
parent 78
a856f1c3364f
child 80
beb0bb936aca

Fix native function return values for the new calling interface

lvm.js file | annotate | diff | comparison | revisions
--- a/lvm.js	Fri Nov 19 16:08:51 2010 +0000
+++ b/lvm.js	Fri Nov 19 16:57:32 2010 +0000
@@ -434,12 +434,24 @@
 				{
 					// JS native function
 					var ret = this.call(f, args);
-					for(var i = 0; i < (C-1); i++) //FIXME: Handle C == 0
+					// Insert ret to reg starting at R(A), with C-1 limit
+					var nresults = ret.length;
+					var nexpected;
+					if(C == 0)
 					{
-						if(i < ret && i < args.length)
-							frame.reg[A+i] = args[i];
+						nexpected = nresults;
+						frame.reg = frame.reg.slice(0, A+nexpected);
+					}
+					else
+						nexpected = C-1;
+					for(var i = 0;;i++)
+					{
+						if(i < nresults)
+							frame.reg[A+i] = ret[i];
+						else if(i < nexpected)
+							frame.reg[A+i] = new LValue(this, "nil", null);
 						else
-							frame.reg[A+i] = new LValue(this, "nil", null);
+							break;
 					}
 				}
 				else

mercurial