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); }
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); }
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); }
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); } }
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); }
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)); }