clojure.lang.CljCompiler.Ast.InvokeExpr.EmitArgsAndCall C# (CSharp) Метод

EmitArgsAndCall() приватный Метод

private EmitArgsAndCall ( int firstArgToEmit, RHC rhc, ObjExpr objx, CljILGen ilg ) : void
firstArgToEmit int
rhc RHC
objx ObjExpr
ilg CljILGen
Результат void
        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);
        }