Optimize get new stack for calls.
This commit is contained in:
@@ -127,18 +127,20 @@ public class LuaClosure extends LuaFunction {
|
|||||||
return "function: " + p.toString();
|
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() {
|
public final LuaValue call() {
|
||||||
LuaValue[] stack = new LuaValue[p.maxstacksize];
|
LuaValue[] stack = getNewStack();
|
||||||
for (int i = 0; i < p.numparams; ++i )
|
|
||||||
stack[i] = NIL;
|
|
||||||
return execute(stack,NONE).arg1();
|
return execute(stack,NONE).arg1();
|
||||||
}
|
}
|
||||||
|
|
||||||
public final LuaValue call(LuaValue arg) {
|
public final LuaValue call(LuaValue arg) {
|
||||||
LuaValue[] stack = new LuaValue[p.maxstacksize];
|
LuaValue[] stack = getNewStack();
|
||||||
System.arraycopy(NILS, 0, stack, 0, p.maxstacksize);
|
|
||||||
for (int i = 1; i < p.numparams; ++i )
|
|
||||||
stack[i] = NIL;
|
|
||||||
switch ( p.numparams ) {
|
switch ( p.numparams ) {
|
||||||
default: stack[0]=arg; return execute(stack,NONE).arg1();
|
default: stack[0]=arg; return execute(stack,NONE).arg1();
|
||||||
case 0: return execute(stack,arg).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) {
|
public final LuaValue call(LuaValue arg1, LuaValue arg2) {
|
||||||
LuaValue[] stack = new LuaValue[p.maxstacksize];
|
LuaValue[] stack = getNewStack();
|
||||||
for (int i = 2; i < p.numparams; ++i )
|
|
||||||
stack[i] = NIL;
|
|
||||||
switch ( p.numparams ) {
|
switch ( p.numparams ) {
|
||||||
default: stack[0]=arg1; stack[1]=arg2; return execute(stack,NONE).arg1();
|
default: stack[0]=arg1; stack[1]=arg2; return execute(stack,NONE).arg1();
|
||||||
case 1: stack[0]=arg1; return execute(stack,arg2).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) {
|
public final LuaValue call(LuaValue arg1, LuaValue arg2, LuaValue arg3) {
|
||||||
LuaValue[] stack = new LuaValue[p.maxstacksize];
|
LuaValue[] stack = getNewStack();
|
||||||
for (int i = 3; i < p.numparams; ++i )
|
|
||||||
stack[i] = NIL;
|
|
||||||
switch ( p.numparams ) {
|
switch ( p.numparams ) {
|
||||||
default: stack[0]=arg1; stack[1]=arg2; stack[2]=arg3; return execute(stack,NONE).arg1();
|
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();
|
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) {
|
public final Varargs onInvoke(Varargs varargs) {
|
||||||
LuaValue[] stack = new LuaValue[p.maxstacksize];
|
LuaValue[] stack = getNewStack();
|
||||||
for ( int i=0; i<p.numparams; i++ )
|
for ( int i=0; i<p.numparams; i++ )
|
||||||
stack[i] = varargs.arg(i+1);
|
stack[i] = varargs.arg(i+1);
|
||||||
return execute(stack,p.is_vararg!=0? varargs.subargs(p.numparams+1): NONE);
|
return execute(stack,p.is_vararg!=0? varargs.subargs(p.numparams+1): NONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user