IKVM.Internal.DotNetTypeWrapper.ByRefMethodWrapper.PreEmit C# (CSharp) Method

PreEmit() protected method

protected PreEmit ( CodeEmitter ilgen ) : void
ilgen CodeEmitter
return void
            protected override void PreEmit(CodeEmitter ilgen)
            {
                CodeEmitterLocal[] locals = new CodeEmitterLocal[args.Length];
                for (int i = args.Length - 1; i >= 0; i--)
                {
                    Type type = args[i];
                    if (type.IsByRef)
                    {
                        type = ArrayTypeWrapper.MakeArrayType(type.GetElementType(), 1);
                    }
                    locals[i] = ilgen.DeclareLocal(type);
                    ilgen.Emit(OpCodes.Stloc, locals[i]);
                }
                for (int i = 0; i < args.Length; i++)
                {
                    ilgen.Emit(OpCodes.Ldloc, locals[i]);
                    if (args[i].IsByRef)
                    {
                        ilgen.Emit(OpCodes.Ldc_I4_0);
                        ilgen.Emit(OpCodes.Ldelema, args[i].GetElementType());
                    }
                }
                base.PreEmit(ilgen);
            }