internal override Expression GetBoundValue(ActionBinder binder, Type type, Expression instance) { if (DeclaringType.IsGenericType && DeclaringType.GetGenericTypeDefinition() == typeof(StrongBox <>)) { // work around a CLR bug where we can't access generic fields from dynamic methods. return(Ast.Call( typeof(BinderOps).GetMethod("GetBox").MakeGenericMethod(DeclaringType.GetGenericArguments()), Ast.ConvertHelper(instance, DeclaringType) )); } if (IsPublic && DeclaringType.IsPublic) { return(Ast.ReadField( Ast.Convert(instance, Field.DeclaringType), Field )); } return(Ast.Call( Ast.ConvertHelper(Ast.RuntimeConstant(Field), typeof(FieldInfo)), typeof(FieldInfo).GetMethod("GetValue"), Ast.ConvertHelper(instance, typeof(object)) )); }
public DmdMethodDefMD(DmdEcma335MetadataReader reader, RawMethodRow row, uint rid, string name, DmdType declaringType, DmdType reflectedType) : base(rid, declaringType, reflectedType) { this.reader = reader ?? throw new ArgumentNullException(nameof(reader)); MethodImplementationFlags = (DmdMethodImplAttributes)row.ImplFlags; Attributes = (DmdMethodAttributes)row.Flags; Name = name ?? throw new ArgumentNullException(nameof(name)); methodSignature = reader.ReadMethodSignature(row.Signature, DeclaringType.GetGenericArguments(), GetGenericArguments(), isProperty: false); }
public DmdPropertyDefMD(DmdEcma335MetadataReader reader, uint rid, DmdType declaringType, DmdType reflectedType) : base(rid, declaringType, reflectedType) { this.reader = reader ?? throw new ArgumentNullException(nameof(reader)); var row = reader.TablesStream.ReadPropertyRow(rid); Name = reader.StringsStream.ReadNoNull(row.Name); Attributes = (DmdPropertyAttributes)row.PropFlags; methodSignature = reader.ReadMethodSignature(row.Type, DeclaringType.GetGenericArguments(), null, isProperty: true); }
public DmdFieldDefMD(DmdEcma335MetadataReader reader, uint rid, DmdType declaringType, DmdType reflectedType) : base(rid, declaringType, reflectedType) { this.reader = reader ?? throw new ArgumentNullException(nameof(reader)); var row = reader.TablesStream.ReadFieldRow(rid); Attributes = (DmdFieldAttributes)row.Flags; Name = reader.StringsStream.ReadNoNull(row.Name); FieldType = reader.ReadFieldType(row.Signature, DeclaringType.GetGenericArguments()); }
public DmdEventDefCOMD(DmdComMetadataReader reader, uint rid, DmdType declaringType, DmdType reflectedType) : base(rid, declaringType, reflectedType) { this.reader = reader ?? throw new ArgumentNullException(nameof(reader)); reader.Dispatcher.VerifyAccess(); uint token = 0x14000000 + rid; Name = MDAPI.GetEventName(reader.MetaDataImport, token) ?? string.Empty; Attributes = MDAPI.GetEventAttributes(reader.MetaDataImport, token); var eventTypeToken = MDAPI.GetEventTypeToken(reader.MetaDataImport, token); EventHandlerType = reader.ResolveType((int)eventTypeToken, DeclaringType.GetGenericArguments(), null, DmdResolveOptions.None) ?? reader.Module.AppDomain.System_Void; }
public DmdEventDefMD(DmdEcma335MetadataReader reader, uint rid, DmdType declaringType, DmdType reflectedType) : base(rid, declaringType, reflectedType) { this.reader = reader ?? throw new ArgumentNullException(nameof(reader)); var row = reader.TablesStream.ReadEventRow(rid); Name = reader.StringsStream.ReadNoNull(row.Name); Attributes = (DmdEventAttributes)row.EventFlags; if (!CodedToken.TypeDefOrRef.Decode(row.EventType, out uint token)) { token = uint.MaxValue; } EventHandlerType = reader.ResolveType((int)token, DeclaringType.GetGenericArguments(), null, DmdResolveOptions.None) ?? reader.Module.AppDomain.System_Void; }
public DmdFieldDefMD(DmdEcma335MetadataReader reader, uint rid, DmdType declaringType, DmdType reflectedType) : base(rid, declaringType, reflectedType) { this.reader = reader ?? throw new ArgumentNullException(nameof(reader)); bool b = reader.TablesStream.TryReadFieldRow(rid, out var row); Debug.Assert(b); Attributes = (DmdFieldAttributes)row.Flags; Name = reader.StringsStream.ReadNoNull(row.Name); FieldType = reader.ReadFieldType(row.Signature, DeclaringType.GetGenericArguments()); if (HasFieldRVA) { reader.TablesStream.TryReadFieldRVARow(reader.Metadata.GetFieldRVARid(rid), out var rvaRow); FieldRVA = rvaRow.RVA; } }
internal override DmdMethodBody GetMethodBody(IList <DmdType> genericMethodArguments) => COMThread(() => reader.GetMethodBody_COMThread(this, DeclaringType.GetGenericArguments(), genericMethodArguments));
public override DmdMethodBody GetMethodBody() => COMThread(() => reader.GetMethodBody_COMThread(this, DeclaringType.GetGenericArguments(), GetGenericArguments()));
public DmdMethodDefCOMD(DmdComMetadataReader reader, DmdMethodAttributes attributes, DmdMethodImplAttributes implementationFlags, uint rid, string name, DmdType declaringType, DmdType reflectedType) : base(rid, declaringType, reflectedType) { this.reader = reader ?? throw new ArgumentNullException(nameof(reader)); reader.Dispatcher.VerifyAccess(); MethodImplementationFlags = implementationFlags; Attributes = attributes; Name = name ?? throw new ArgumentNullException(nameof(name)); methodSignature = reader.ReadMethodSignature_COMThread(MDAPI.GetMethodSignatureBlob(reader.MetaDataImport, 0x06000000 + rid), DeclaringType.GetGenericArguments(), GetGenericArguments(), isProperty: false); }
public DmdFieldDefCOMD(DmdComMetadataReader reader, uint rid, DmdType declaringType, DmdType reflectedType) : base(rid, declaringType, reflectedType) { this.reader = reader ?? throw new ArgumentNullException(nameof(reader)); reader.Dispatcher.VerifyAccess(); uint token = 0x04000000 + rid; Attributes = MDAPI.GetFieldAttributes(reader.MetaDataImport, token); Name = MDAPI.GetFieldName(reader.MetaDataImport, token) ?? string.Empty; FieldType = reader.ReadFieldType_COMThread(MDAPI.GetFieldSignatureBlob(reader.MetaDataImport, token), DeclaringType.GetGenericArguments()); }
public DmdPropertyDefCOMD(DmdComMetadataReader reader, uint rid, DmdType declaringType, DmdType reflectedType) : base(rid, declaringType, reflectedType) { this.reader = reader ?? throw new ArgumentNullException(nameof(reader)); reader.Dispatcher.VerifyAccess(); uint token = 0x17000000 + rid; Name = MDAPI.GetPropertyName(reader.MetaDataImport, token) ?? string.Empty; Attributes = MDAPI.GetPropertyAttributes(reader.MetaDataImport, token); methodSignature = reader.ReadMethodSignature_COMThread(MDAPI.GetPropertySignatureBlob(reader.MetaDataImport, token), DeclaringType.GetGenericArguments(), null, isProperty: true); }
private MethodInfo(MethodInfo methodDef, TypeInfo[] typeArguments) : base(methodDef, typeArguments) { ReturnParameter = ((MethodInfo)rootDefinition).ReturnParameter .SubstituteGenericArguments(this, DeclaringType.GetGenericArguments(), GetGenericArguments()); }
public MethodInfo(MethodInfo methodDef, TypeInfo declaringType) : base(methodDef, declaringType) { ReturnParameter = ((MethodInfo)rootDefinition).ReturnParameter .SubstituteGenericArguments(this, DeclaringType.GetGenericArguments(), GetGenericArguments()); }