432 args[i] = new LValue(this, "nil", null); |
432 args[i] = new LValue(this, "nil", null); |
433 if(typeof(f) == "function") |
433 if(typeof(f) == "function") |
434 { |
434 { |
435 // JS native function |
435 // JS native function |
436 var ret = this.call(f, args); |
436 var ret = this.call(f, args); |
437 for(var i = 0; i < (C-1); i++) //FIXME: Handle C == 0 |
437 // Insert ret to reg starting at R(A), with C-1 limit |
|
438 var nresults = ret.length; |
|
439 var nexpected; |
|
440 if(C == 0) |
438 { |
441 { |
439 if(i < ret && i < args.length) |
442 nexpected = nresults; |
440 frame.reg[A+i] = args[i]; |
443 frame.reg = frame.reg.slice(0, A+nexpected); |
|
444 } |
|
445 else |
|
446 nexpected = C-1; |
|
447 for(var i = 0;;i++) |
|
448 { |
|
449 if(i < nresults) |
|
450 frame.reg[A+i] = ret[i]; |
|
451 else if(i < nexpected) |
|
452 frame.reg[A+i] = new LValue(this, "nil", null); |
441 else |
453 else |
442 frame.reg[A+i] = new LValue(this, "nil", null); |
454 break; |
443 } |
455 } |
444 } |
456 } |
445 else |
457 else |
446 { |
458 { |
447 // Lua function |
459 // Lua function |