2 Commits

Author SHA1 Message Date
Koushik Dutta
42364df8be Fix bug with JavaMember Varargs invocation. Coerce the element type, not Array. 2021-11-12 01:49:20 -05:00
yut23
8a05f69f50 Fix JavaMember varargs argument construction 2021-11-12 01:48:07 -05:00

View File

@@ -51,7 +51,7 @@ class JavaMember extends VarArgFunction {
fixedargs = new CoerceLuaToJava.Coercion[isvarargs? params.length-1: params.length];
for ( int i=0; i<fixedargs.length; i++ )
fixedargs[i] = CoerceLuaToJava.getCoercion( params[i] );
varargs = isvarargs? CoerceLuaToJava.getCoercion( params[params.length-1] ): null;
varargs = isvarargs? CoerceLuaToJava.getCoercion( params[params.length-1].getComponentType() ): null;
}
int score(Varargs args) {
@@ -72,12 +72,15 @@ class JavaMember extends VarArgFunction {
for ( int i=0; i<a.length; i++ )
a[i] = fixedargs[i].coerce( args.arg(i+1) );
} else {
int n = Math.max(fixedargs.length,args.narg());
a = new Object[n];
// should be the fixed arguments, followed by an array with the varargs
a = new Object[fixedargs.length+1];
int nvar = Math.max(0, args.narg()-fixedargs.length);
Object[] vararray = new Object[nvar];
for ( int i=0; i<fixedargs.length; i++ )
a[i] = fixedargs[i].coerce( args.arg(i+1) );
for ( int i=fixedargs.length; i<n; i++ )
a[i] = varargs.coerce( args.arg(i+1) );
a[a.length-1] = vararray;
for ( int i=0; i<nvar; i++ )
vararray[i] = varargs.coerce( args.arg(fixedargs.length+i+1) );
}
return a;
}