Exemplo n.º 1
0
        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))
                       ));
        }
Exemplo n.º 2
0
 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);
 }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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());
        }
Exemplo n.º 5
0
        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;
        }
Exemplo n.º 6
0
        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;
        }
Exemplo n.º 7
0
        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;
            }
        }
Exemplo n.º 8
0
 internal override DmdMethodBody GetMethodBody(IList <DmdType> genericMethodArguments) => COMThread(() => reader.GetMethodBody_COMThread(this, DeclaringType.GetGenericArguments(), genericMethodArguments));
Exemplo n.º 9
0
 public override DmdMethodBody GetMethodBody() => COMThread(() => reader.GetMethodBody_COMThread(this, DeclaringType.GetGenericArguments(), GetGenericArguments()));
Exemplo n.º 10
0
 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);
 }
Exemplo n.º 11
0
        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());
        }
Exemplo n.º 12
0
        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);
        }
Exemplo n.º 13
0
 private MethodInfo(MethodInfo methodDef, TypeInfo[] typeArguments) : base(methodDef, typeArguments)
 {
     ReturnParameter = ((MethodInfo)rootDefinition).ReturnParameter
                       .SubstituteGenericArguments(this, DeclaringType.GetGenericArguments(), GetGenericArguments());
 }
Exemplo n.º 14
0
 public MethodInfo(MethodInfo methodDef, TypeInfo declaringType) : base(methodDef, declaringType)
 {
     ReturnParameter = ((MethodInfo)rootDefinition).ReturnParameter
                       .SubstituteGenericArguments(this, DeclaringType.GetGenericArguments(), GetGenericArguments());
 }