예제 #1
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);
            }
예제 #2
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);
            }
예제 #3
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);
        }
예제 #4
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);
     }
 }
예제 #5
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);
        }
예제 #6
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 GetSetter(FieldInfo field, Expression obj, Expression newValue)
        {
            var setter = FieldsExtractor.GetSetter(field);

            return(Expression.Invoke(Expression.Constant(setter), obj ?? Expression.Constant(null), Expression.Convert(newValue, typeof(object))));
        }
        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));
        }