예제 #1
0
            static MethodOnTypeBuilderInstWrapper()
            {
                string methodFieldName = IsMono ? "base_method" : "m_method";
                string typeFieldName   = IsMono ? "instantiation" : "m_type";
                var    methodField     = methodOnTypeBuilderInstType.GetField(methodFieldName, BindingFlags.Instance | BindingFlags.NonPublic);

                if (methodField == null)
                {
                    throw new InvalidOperationException($"Field '{methodOnTypeBuilderInstType.Name}.{methodFieldName}' is not found");
                }
                m_methodExtractor = FieldsExtractor.GetExtractor <MethodBase, MethodInfo>(methodField);
                var typeField = methodOnTypeBuilderInstType.GetField(typeFieldName, BindingFlags.Instance | BindingFlags.NonPublic);

                if (typeField == null)
                {
                    throw new InvalidOperationException($"Field '{methodOnTypeBuilderInstType.Name}.{typeFieldName}' is not found");
                }
                m_typeExtractor = FieldsExtractor.GetExtractor <MethodBase, Type>(typeField);
                if (IsMono)
                {
                    var genericMethodField = methodOnTypeBuilderInstType.GetField("generic_method_definition", BindingFlags.Instance | BindingFlags.NonPublic);
                    if (genericMethodField == null)
                    {
                        throw new InvalidOperationException($"Field '{methodOnTypeBuilderInstType.Name}.generic_method_definition' is not found");
                    }
                    m_genericMethodExtractor = FieldsExtractor.GetExtractor <MethodBase, MethodInfo>(genericMethodField);
                    var methodArgumentsField = methodOnTypeBuilderInstType.GetField("method_arguments", BindingFlags.Instance | BindingFlags.NonPublic);
                    if (methodArgumentsField == null)
                    {
                        throw new InvalidOperationException($"Field '{methodOnTypeBuilderInstType.Name}.method_arguments' is not found");
                    }
                    m_methodArgumentsExtractor = FieldsExtractor.GetExtractor <MethodBase, Type[]>(methodArgumentsField);
                }
            }
예제 #2
0
            static ConstructorBuilderWrapper()
            {
                var constructorBuilderMethodBuilderField = typeof(ConstructorBuilder).GetField("m_methodBuilder", BindingFlags.Instance | BindingFlags.NonPublic);

                if (constructorBuilderMethodBuilderField == null)
                {
                    throw new InvalidOperationException("Field 'ConstructorBuilder.m_methodBuilder' is not found");
                }
                m_methodBuilderExtractor = FieldsExtractor.GetExtractor <MethodBase, MethodInfo>(constructorBuilderMethodBuilderField);
            }
예제 #3
0
            static MethodBuilderWrapper()
            {
                var methodBuilderParameterTypesField = typeof(MethodBuilder).GetField("m_parameterTypes", BindingFlags.Instance | BindingFlags.NonPublic);

                if (methodBuilderParameterTypesField == null)
                {
                    throw new InvalidOperationException("Field 'MethodBuilder.m_parameterTypes' is not found");
                }
                m_parameterTypesExtractor = FieldsExtractor.GetExtractor <MethodBase, Type[]>(methodBuilderParameterTypesField);
            }
예제 #4
0
            static MethodBuilderWrapper()
            {
                string parameterTypesFieldName = IsMono ? "parameters" : "m_parameterTypes";
                var    parameterTypesField     = typeof(MethodBuilder).GetField(parameterTypesFieldName, BindingFlags.Instance | BindingFlags.NonPublic);

                if (parameterTypesField == null)
                {
                    throw new InvalidOperationException($"Field 'MethodBuilder.{parameterTypesFieldName}' is not found");
                }
                m_parameterTypesExtractor = FieldsExtractor.GetExtractor <MethodBase, Type[]>(parameterTypesField);
            }
예제 #5
0
            static MethodBuilderInstWrapper()
            {
                var methodField = methodBuilderInstType.GetField("m_method", BindingFlags.Instance | BindingFlags.NonPublic);

                if (methodField == null)
                {
                    throw new InvalidOperationException($"Field '{methodBuilderInstType.Name}.m_method' is not found");
                }
                m_methodExtractor = FieldsExtractor.GetExtractor <MethodBase, MethodInfo>(methodField);
                var instField = methodBuilderInstType.GetField("m_inst", BindingFlags.Instance | BindingFlags.NonPublic);

                if (instField == null)
                {
                    throw new InvalidOperationException($"Field '{methodBuilderInstType.Name}.m_inst' is not found");
                }
                m_instExtractor = FieldsExtractor.GetExtractor <MethodBase, Type[]>(instField);
            }
예제 #6
0
            static ConstructorOnTypeBuilderInstantiationWrapper()
            {
                var constructorOnTypeBuilderInstantiationCtorField = constructorOnTypeBuilderInstantiationType.GetField("m_ctor", BindingFlags.Instance | BindingFlags.NonPublic);

                if (constructorOnTypeBuilderInstantiationCtorField == null)
                {
                    throw new InvalidOperationException("Field 'ConstructorOnTypeBuilderInstantiation.m_ctor' is not found");
                }
                m_ctorExtractor = FieldsExtractor.GetExtractor <MethodBase, MethodBase>(constructorOnTypeBuilderInstantiationCtorField);
                var constructorOnTypeBuilderInstantiationTypeField = constructorOnTypeBuilderInstantiationType.GetField("m_type", BindingFlags.Instance | BindingFlags.NonPublic);

                if (constructorOnTypeBuilderInstantiationTypeField == null)
                {
                    throw new InvalidOperationException("Field 'ConstructorOnTypeBuilderInstantiation.m_type' is not found");
                }
                m_typeExtractor = FieldsExtractor.GetExtractor <MethodBase, Type>(constructorOnTypeBuilderInstantiationTypeField);
            }
예제 #7
0
            static MethodOnTypeBuilderInstantiationWrapper()
            {
                var methodOnTypeBuilderInstantiationMethodField = methodOnTypeBuilderInstantiationType.GetField("m_method", BindingFlags.Instance | BindingFlags.NonPublic);

                if (methodOnTypeBuilderInstantiationMethodField == null)
                {
                    throw new InvalidOperationException("Field 'MethodOnTypeBuilderInstantiation.m_method' is not found");
                }
                m_methodExtractor = FieldsExtractor.GetExtractor <MethodBase, MethodInfo>(methodOnTypeBuilderInstantiationMethodField);
                var methodOnTypeBuilderInstantiationTypeField = methodOnTypeBuilderInstantiationType.GetField("m_type", BindingFlags.Instance | BindingFlags.NonPublic);

                if (methodOnTypeBuilderInstantiationTypeField == null)
                {
                    throw new InvalidOperationException("Field 'MethodOnTypeBuilderInstantiation.m_type' is not found");
                }
                m_typeExtractor = FieldsExtractor.GetExtractor <MethodBase, Type>(methodOnTypeBuilderInstantiationTypeField);
            }
예제 #8
0
            static TypeBuilderInstantiationWrapper()
            {
                var typeBuilderInstantiationTypeField = typeBuilderInstantiationType.GetField("m_type", BindingFlags.Instance | BindingFlags.NonPublic);

                if (typeBuilderInstantiationTypeField == null)
                {
                    throw new InvalidOperationException("Field 'TypeBuilderInstantiation.m_type' is not found");
                }
                m_typeExtractor = FieldsExtractor.GetExtractor <Type, Type>(typeBuilderInstantiationTypeField);
                var typeBuilderInstantiationInstField = typeBuilderInstantiationType.GetField("m_inst", BindingFlags.Instance | BindingFlags.NonPublic);

                if (typeBuilderInstantiationInstField == null)
                {
                    throw new InvalidOperationException("Field 'TypeBuilderInstantiation.m_inst' is not found");
                }
                m_instExtractor = FieldsExtractor.GetExtractor <Type, Type[]>(typeBuilderInstantiationInstField);
            }
예제 #9
0
        static DynamicILInfoWrapper()
        {
            var m_methodSignatureField = typeof(DynamicILInfo).GetField("m_methodSignature", BindingFlags.Instance | BindingFlags.NonPublic);

            if (m_methodSignatureField == null)
            {
                throw new InvalidOperationException("Field 'DynamicILInfo.m_methodSignature' is not found");
            }
            m_methodSignatureExtractor = FieldsExtractor.GetExtractor <DynamicILInfo, int>(m_methodSignatureField);

            var m_scopeField = typeof(DynamicILInfo).GetField("m_scope", BindingFlags.Instance | BindingFlags.NonPublic);

            if (m_scopeField == null)
            {
                throw new InvalidOperationException("Field 'DynamicILInfo.m_scope' is not found");
            }
            m_scopeExtractor = FieldsExtractor.GetExtractor <DynamicILInfo, object>(m_scopeField);
        }
예제 #10
0
            static ConstructorOnTypeBuilderInstWrapper()
            {
                string ctorFieldName = IsMono ? "cb" : "m_ctor";
                string typeFieldName = IsMono ? "instantiation" : "m_type";
                var    ctorField     = constructorOnTypeBuilderInstType.GetField(ctorFieldName, BindingFlags.Instance | BindingFlags.NonPublic);

                if (ctorField == null)
                {
                    throw new InvalidOperationException($"Field '{constructorOnTypeBuilderInstType.Name}.{ctorFieldName}' is not found");
                }
                m_ctorExtractor = FieldsExtractor.GetExtractor <MethodBase, MethodBase>(ctorField);
                var typeField = constructorOnTypeBuilderInstType.GetField(typeFieldName, BindingFlags.Instance | BindingFlags.NonPublic);

                if (typeField == null)
                {
                    throw new InvalidOperationException($"Field '{constructorOnTypeBuilderInstType.Name}.{typeFieldName}' is not found");
                }
                m_typeExtractor = FieldsExtractor.GetExtractor <MethodBase, Type>(typeField);
            }
예제 #11
0
            static TypeBuilderInstWrapper()
            {
                string typeFieldName = IsMono ? "generic_type" : "m_type";
                string instFieldName = IsMono ? "type_arguments" : "m_inst";
                var    typeField     = typeBuilderInstType.GetField(typeFieldName, BindingFlags.Instance | BindingFlags.NonPublic);

                if (typeField == null)
                {
                    throw new InvalidOperationException($"Field '{typeBuilderInstType.Name}.{typeFieldName}' is not found");
                }
                m_typeExtractor = FieldsExtractor.GetExtractor <Type, Type>(typeField);
                var instField = typeBuilderInstType.GetField(instFieldName, BindingFlags.Instance | BindingFlags.NonPublic);

                if (instField == null)
                {
                    throw new InvalidOperationException($"Field '{typeBuilderInstType.Name}.{instFieldName}' is not found");
                }
                m_instExtractor = FieldsExtractor.GetExtractor <Type, Type[]>(instField);
            }
예제 #12
0
        static DynamicILGenerator()
        {
            var assembly = typeof(DynamicMethod).Assembly;
            var dynamicILGeneratorType = assembly.GetType("System.Reflection.Emit.DynamicILGenerator");

            var m_methodSigTokenField = dynamicILGeneratorType.GetField("m_methodSigToken", BindingFlags.Instance | BindingFlags.NonPublic);

            if (m_methodSigTokenField == null)
            {
                throw new InvalidOperationException("Field 'DynamicILGenerator.m_methodSigToken' is not found");
            }
            m_methodSigTokenExtractor = FieldsExtractor.GetExtractor <ILGenerator, int>(m_methodSigTokenField);

            var m_scopeField = dynamicILGeneratorType.GetField("m_scope", BindingFlags.Instance | BindingFlags.NonPublic);

            if (m_scopeField == null)
            {
                throw new InvalidOperationException("Field 'DynamicILGenerator.m_scope' is not found");
            }
            m_scopeExtractor = FieldsExtractor.GetExtractor <ILGenerator, object>(m_scopeField);
        }
예제 #13
0
 static ConstructorBuilderWrapper()
 {
     if (!IsMono)
     {
         var methodBuilderField = typeof(ConstructorBuilder).GetField("m_methodBuilder", BindingFlags.Instance | BindingFlags.NonPublic);
         if (methodBuilderField == null)
         {
             throw new InvalidOperationException("Field 'ConstructorBuilder.m_methodBuilder' is not found");
         }
         m_methodBuilderExtractor = FieldsExtractor.GetExtractor <MethodBase, MethodInfo>(methodBuilderField);
     }
     else
     {
         string parameterTypesFieldName = "parameters";
         var    parameterTypesField     = typeof(ConstructorBuilder).GetField(parameterTypesFieldName, BindingFlags.Instance | BindingFlags.NonPublic);
         if (parameterTypesField == null)
         {
             throw new InvalidOperationException($"Field 'ConstructorBuilder.{parameterTypesFieldName}' is not found");
         }
         m_parameterTypesExtractor = FieldsExtractor.GetExtractor <MethodBase, Type[]>(parameterTypesField);
     }
 }
예제 #14
0
        static DynamicResolver()
        {
            var assembly = typeof(DynamicMethod).Assembly;

            dynamicResolverType    = assembly.GetType("System.Reflection.Emit.DynamicResolver");
            dynamicILInfoType      = assembly.GetType("System.Reflection.Emit.DynamicILInfo");
            dynamicILGeneratorType = assembly.GetType("System.Reflection.Emit.DynamicILGenerator");
            BuildFactoryByDynamicILInfo();
            BuildFactoryByDynamicILGenerator();
            BuildGetCodeInfoDelegate();
            BuildGetRawEHInfoDelegate();
            BuildGetEHInfoDelegate();

            var m_methodField = dynamicResolverType.GetField("m_method", BindingFlags.Instance | BindingFlags.NonPublic);

            if (m_methodField == null)
            {
                throw new InvalidOperationException("Field 'DynamicResolver.m_methodField' is not found");
            }
            m_methodSetter = FieldsExtractor.GetSetter(m_methodField);

            var m_resolverField = typeof(DynamicMethod).GetField("m_resolver", BindingFlags.Instance | BindingFlags.NonPublic);

            if (m_resolverField == null)
            {
                throw new InvalidOperationException("Field 'DynamicResolver.m_resolver' is not found");
            }
            m_resolverSetter = FieldsExtractor.GetSetter <DynamicMethod, object>(m_resolverField);

            var m_localSignatureField = dynamicResolverType.GetField("m_localSignature", BindingFlags.Instance | BindingFlags.NonPublic);

            if (m_localSignatureField == null)
            {
                throw new InvalidOperationException("Field 'DynamicResolver.m_localSignature' is not found");
            }
            m_localSignatureExtractor = FieldsExtractor.GetExtractor <object, byte[]>(m_localSignatureField);
        }
예제 #15
0
        static DynamicMethodWrapper()
        {
            var assembly = typeof(DynamicMethod).Assembly;

            dynamicScopeType = assembly.GetType("System.Reflection.Emit.DynamicScope");

            var m_DynamicILInfoField = typeof(DynamicMethod).GetField("m_DynamicILInfo", BindingFlags.Instance | BindingFlags.NonPublic);

            if (m_DynamicILInfoField == null)
            {
                throw new InvalidOperationException("Field 'DynamicMethod.m_DynamicILInfo' is not found");
            }
            m_DynamicILInfoExtractor = FieldsExtractor.GetExtractor <DynamicMethod, GrEmit.Utils.DynamicILInfo>(m_DynamicILInfoField);

            var m_ilGeneratorField = typeof(DynamicMethod).GetField("m_ilGenerator", BindingFlags.Instance | BindingFlags.NonPublic);

            if (m_ilGeneratorField == null)
            {
                throw new InvalidOperationException("Field 'DynamicMethod.m_ilGenerator' is not found");
            }
            m_ilGeneratorExtractor = FieldsExtractor.GetExtractor <DynamicMethod, ILGenerator>(m_ilGeneratorField);

            getDynamicIlInfo = BuildGetDynamicILInfo();
        }
        private static Expression GetGetter(FieldInfo field, Expression obj, Type type)
        {
            var extractor = FieldsExtractor.GetExtractor(field);

            return(Expression.Convert(Expression.Invoke(Expression.Constant(extractor), obj ?? Expression.Constant(null)), type));
        }