# HG changeset patch # User Matthew Wild # Date 1290185852 0 # Node ID 94c0441b7321e6a1a2331e1761e857ee6596992c # Parent a856f1c3364f3f243c536c6143d3eec8f977ea88 Fix native function return values for the new calling interface diff -r a856f1c3364f -r 94c0441b7321 lvm.js --- 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