void EmitArgsAndCall(int firstArgToEmit, RHC rhc, ObjExpr objx, CljILGen ilg)
{
for ( int i=firstArgToEmit; i< Math.Min(Compiler.MaxPositionalArity,_args.count()); i++ )
{
Expr e = (Expr) _args.nth(i);
e.Emit(RHC.Expression,objx,ilg);
}
if ( _args.count() > Compiler.MaxPositionalArity )
{
IPersistentVector restArgs = PersistentVector.EMPTY;
for (int i=Compiler.MaxPositionalArity; i<_args.count(); i++ )
restArgs = restArgs.cons(_args.nth(i));
MethodExpr.EmitArgsAsArray(restArgs,objx,ilg);
}
// In JVM. No necessary here.
//if (_tailPosition)
//{
// ObjMethod method = (ObjMethod)Compiler.MethodVar.deref();
// method.EmitClearThis(ilg);
//}
MethodInfo mi = Compiler.Methods_IFn_invoke[Math.Min(Compiler.MaxPositionalArity+1,_args.count())];
ilg.Emit(OpCodes.Callvirt,mi);
}