Fri, 19 Nov 2010 03:42:17 +0000
New interface for native Javascript functions called from Lua
lvm.js | file | annotate | diff | comparison | revisions |
--- 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 {