예제 #1
0
        public override void Emit(IMemberEmitter member, ILGenerator gen)
        {
            ArgumentsUtil.EmitLoadOwnerAndReference(owner, gen);

            foreach (var exp in args)
            {
                exp.Emit(member, gen);
            }

            if (VirtualCall)
            {
                gen.Emit(OpCodes.Callvirt, method.AsMethodInfo());
            }
            else
            {
                gen.Emit(OpCodes.Call, method.AsMethodInfo());
            }
        }
예제 #2
0
        public override void Emit(IMemberEmitter member, ILGenerator gen)
        {
            // @mbrit - 2012-06-04 - can't do anything other than pass proper MethodInfo
            // instances down a this is all MSIL knows how to deal with...
            gen.Emit(OpCodes.Ldtoken, method.AsMethodInfo());
#if !MONO
            if (declaringType == null)
            {
                throw new GeneratorException("declaringType can't be null for this situation");
            }
            gen.Emit(OpCodes.Ldtoken, declaringType);
#endif

            var minfo = MethodBaseMethods.GetMethodFromHandle1;

#if !MONO
            minfo = MethodBaseMethods.GetMethodFromHandle2;
#endif

            gen.Emit(OpCodes.Call, minfo);
            gen.Emit(OpCodes.Castclass, typeof(MethodInfo));
        }
예제 #3
0
 internal void DefineMethodOverride(IMethodInfo method, IMethodInfo toOverride)
 {
     this.Invoke("DefineMethodOverride", method.AsMethodInfo(), toOverride.AsMethodInfo());
 }
예제 #4
0
 internal static void DefineMethodOverride(this TypeBuilder builder, MethodBuilder methodInfoBody,
     IMethodInfo methodInfoDeclaration)
 {
     builder.DefineMethodOverride(methodInfoBody, methodInfoDeclaration.AsMethodInfo());
 }
예제 #5
0
 internal static void DefineMethodOverride(this TypeBuilder builder, MethodBuilder methodInfoBody,
                                           IMethodInfo methodInfoDeclaration)
 {
     builder.DefineMethodOverride(methodInfoBody, methodInfoDeclaration.AsMethodInfo());
 }