diff --git a/src/core/org/luaj/vm2/LuaClosure.java b/src/core/org/luaj/vm2/LuaClosure.java index e49f60ca..76534c15 100644 --- a/src/core/org/luaj/vm2/LuaClosure.java +++ b/src/core/org/luaj/vm2/LuaClosure.java @@ -127,18 +127,20 @@ public class LuaClosure extends LuaFunction { return "function: " + p.toString(); } + private LuaValue[] getNewStack() { + int max = p.maxstacksize; + LuaValue[] stack = new LuaValue[max]; + System.arraycopy(NILS, 0, stack, 0, max); + return stack; + } + public final LuaValue call() { - LuaValue[] stack = new LuaValue[p.maxstacksize]; - for (int i = 0; i < p.numparams; ++i ) - stack[i] = NIL; + LuaValue[] stack = getNewStack(); return execute(stack,NONE).arg1(); } public final LuaValue call(LuaValue arg) { - LuaValue[] stack = new LuaValue[p.maxstacksize]; - System.arraycopy(NILS, 0, stack, 0, p.maxstacksize); - for (int i = 1; i < p.numparams; ++i ) - stack[i] = NIL; + LuaValue[] stack = getNewStack(); switch ( p.numparams ) { default: stack[0]=arg; return execute(stack,NONE).arg1(); case 0: return execute(stack,arg).arg1(); @@ -146,9 +148,7 @@ public class LuaClosure extends LuaFunction { } public final LuaValue call(LuaValue arg1, LuaValue arg2) { - LuaValue[] stack = new LuaValue[p.maxstacksize]; - for (int i = 2; i < p.numparams; ++i ) - stack[i] = NIL; + LuaValue[] stack = getNewStack(); switch ( p.numparams ) { default: stack[0]=arg1; stack[1]=arg2; return execute(stack,NONE).arg1(); case 1: stack[0]=arg1; return execute(stack,arg2).arg1(); @@ -157,9 +157,7 @@ public class LuaClosure extends LuaFunction { } public final LuaValue call(LuaValue arg1, LuaValue arg2, LuaValue arg3) { - LuaValue[] stack = new LuaValue[p.maxstacksize]; - for (int i = 3; i < p.numparams; ++i ) - stack[i] = NIL; + LuaValue[] stack = getNewStack(); switch ( p.numparams ) { default: stack[0]=arg1; stack[1]=arg2; stack[2]=arg3; return execute(stack,NONE).arg1(); case 2: stack[0]=arg1; stack[1]=arg2; return execute(stack,arg3).arg1(); @@ -173,9 +171,9 @@ public class LuaClosure extends LuaFunction { } public final Varargs onInvoke(Varargs varargs) { - LuaValue[] stack = new LuaValue[p.maxstacksize]; + LuaValue[] stack = getNewStack(); for ( int i=0; i