Exemplo n.º 1
0
 /// <summary>
 /// Resolves a member
 /// </summary>
 /// <param name="metadataToken">Token</param>
 /// <param name="options">Resolve options</param>
 /// <returns></returns>
 public DmdMemberInfo ResolveMember(int metadataToken, DmdResolveOptions options) => ResolveMember(metadataToken, (IList <DmdType>)null, null, options);
Exemplo n.º 2
0
 /// <summary>
 /// Resolves a member
 /// </summary>
 /// <param name="metadataToken">Token</param>
 /// <param name="genericTypeArguments">Generic type arguments or null</param>
 /// <param name="genericMethodArguments">Generic method arguments or null</param>
 /// <param name="options">Resolve options</param>
 /// <returns></returns>
 public abstract DmdMemberInfo ResolveMember(int metadataToken, IList <DmdType> genericTypeArguments, IList <DmdType> genericMethodArguments, DmdResolveOptions options);
Exemplo n.º 3
0
 /// <summary>
 /// Resolves a field
 /// </summary>
 /// <param name="metadataToken">Token</param>
 /// <param name="genericTypeArguments">Generic type arguments or null</param>
 /// <param name="genericMethodArguments">Generic method arguments or null</param>
 /// <param name="options">Resolve options</param>
 /// <returns></returns>
 public DmdFieldInfo ResolveField(int metadataToken, IList <Type> genericTypeArguments, IList <Type> genericMethodArguments, DmdResolveOptions options) =>
 ResolveField(metadataToken, genericTypeArguments.ToDmdType(AppDomain), genericMethodArguments.ToDmdType(AppDomain), options);
Exemplo n.º 4
0
 /// <summary>
 /// Resolves a type
 /// </summary>
 /// <param name="metadataToken">Token</param>
 /// <param name="options">Resolve options</param>
 /// <returns></returns>
 public DmdType ResolveType(int metadataToken, DmdResolveOptions options) => ResolveType(metadataToken, (IList <DmdType>)null, null, options);
Exemplo n.º 5
0
 /// <summary>
 /// Resolves a method
 /// </summary>
 /// <param name="metadataToken">Token</param>
 /// <param name="options">Resolve options</param>
 /// <returns></returns>
 public DmdMethodBase ResolveMethod(int metadataToken, DmdResolveOptions options) => ResolveMethod(metadataToken, (IList <DmdType>)null, null, options);
Exemplo n.º 6
0
 /// <summary>
 /// Resolves a field
 /// </summary>
 /// <param name="metadataToken">Token</param>
 /// <param name="options">Resolve options</param>
 /// <returns></returns>
 public DmdFieldInfo ResolveField(int metadataToken, DmdResolveOptions options) => ResolveField(metadataToken, (IList <DmdType>)null, null, options);
        public sealed override DmdMethodBase ResolveMethod(int metadataToken, IList <DmdType> genericTypeArguments, IList <DmdType> genericMethodArguments, DmdResolveOptions options)
        {
            uint rid = (uint)(metadataToken & 0x00FFFFFF);

            switch ((uint)metadataToken >> 24)
            {
            case 0x06:
                var method = ResolveMethodDef(rid);
                if ((object)method != null)
                {
                    return(method);
                }
                break;

            case 0x0A:
                var mr = ResolveMemberRef(rid, genericTypeArguments, genericMethodArguments);
                if ((object)mr != null)
                {
                    if (mr is DmdMethodBase methodRef)
                    {
                        return(TryResolve(methodRef, options));
                    }
                    if ((options & DmdResolveOptions.ThrowOnError) != 0)
                    {
                        throw new ArgumentException();
                    }
                }
                break;

            case 0x2B:
                var methodSpec = ResolveMethodSpec(rid, genericTypeArguments, genericMethodArguments);
                if ((object)methodSpec != null)
                {
                    return(TryResolve(methodSpec, options));
                }
                break;
            }

            if ((options & DmdResolveOptions.ThrowOnError) != 0)
            {
                throw new ArgumentOutOfRangeException(nameof(metadataToken));
            }
            return(null);
        }
Exemplo n.º 8
0
        public sealed override DmdType?ResolveType(int metadataToken, IList <DmdType>?genericTypeArguments, IList <DmdType>?genericMethodArguments, DmdResolveOptions options)
        {
            uint rid = (uint)(metadataToken & 0x00FFFFFF);

            switch ((uint)metadataToken >> 24)
            {
            case 0x01:
                var typeRef = ResolveTypeRef(rid);
                if (!(typeRef is null))
                {
                    return(TryResolve(typeRef, options));
                }
                break;

            case 0x02:
                var typeDef = ResolveTypeDef(rid);
                if (!(typeDef is null))
                {
                    return(typeDef);
                }
                break;

            case 0x1B:
                var typeSpec = ResolveTypeSpec(rid, genericTypeArguments, genericMethodArguments);
                if (!(typeSpec is null))
                {
                    return(TryResolve(typeSpec, options));
                }
                break;

            case 0x27:
                var exportedType = ResolveExportedType(rid);
                if (!(exportedType is null))
                {
                    return(exportedType);                   // Don't try to resolve it, callers want the actual reference
                }
                break;
            }

            if ((options & DmdResolveOptions.ThrowOnError) != 0)
            {
                throw new ArgumentOutOfRangeException(nameof(metadataToken));
            }
            return(null);
        }
 static DmdFieldInfo TryResolve(DmdFieldInfo member, DmdResolveOptions options) => (options & DmdResolveOptions.NoTryResolveRefs) != 0 ? member : member.ResolveNoThrow() ?? member;
Exemplo n.º 10
0
 static DmdMethodBase TryResolve(DmdMethodBase member, DmdResolveOptions options) => (options & DmdResolveOptions.NoTryResolveRefs) != 0 ? member : member.ResolveMethodBaseNoThrow() ?? member;
Exemplo n.º 11
0
        public sealed override DmdMethodSignature ResolveMethodSignature(int metadataToken, IList <DmdType> genericTypeArguments, IList <DmdType> genericMethodArguments, DmdResolveOptions options)
        {
            uint rid = (uint)(metadataToken & 0x00FFFFFF);

            switch ((uint)metadataToken >> 24)
            {
            case 0x11:
                var methodSig = ResolveMethodSignature(rid, genericTypeArguments, genericMethodArguments);
                if ((object)methodSig != null)
                {
                    return(methodSig);
                }
                break;
            }

            if ((options & DmdResolveOptions.ThrowOnError) != 0)
            {
                throw new ArgumentOutOfRangeException(nameof(metadataToken));
            }
            return(null);
        }
Exemplo n.º 12
0
        public sealed override DmdMemberInfo ResolveMember(int metadataToken, IList <DmdType> genericTypeArguments, IList <DmdType> genericMethodArguments, DmdResolveOptions options)
        {
            uint rid = (uint)(metadataToken & 0x00FFFFFF);

            switch ((uint)metadataToken >> 24)
            {
            case 0x01:
                var typeRef = ResolveTypeRef(rid);
                if ((object)typeRef != null)
                {
                    return(TryResolve(typeRef, options));
                }
                break;

            case 0x02:
                var typeDef = ResolveTypeDef(rid);
                if ((object)typeDef != null)
                {
                    return(typeDef);
                }
                break;

            case 0x04:
                var field = ResolveFieldDef(rid);
                if ((object)field != null)
                {
                    return(field);
                }
                break;

            case 0x06:
                var method = ResolveMethodDef(rid);
                if ((object)method != null)
                {
                    return(method);
                }
                break;

            case 0x0A:
                var memberRef = ResolveMemberRef(rid, genericTypeArguments, genericMethodArguments);
                if ((object)memberRef != null)
                {
                    return(TryResolve(memberRef, options));
                }
                break;

            case 0x1B:
                var typeSpec = ResolveTypeSpec(rid, genericTypeArguments, genericMethodArguments);
                if ((object)typeSpec != null)
                {
                    return(TryResolve(typeSpec, options));
                }
                break;

            case 0x27:
                var exportedType = ResolveExportedType(rid);
                if ((object)exportedType != null)
                {
                    return(exportedType);                   // Don't try to resolve it, callers want the actual reference
                }
                break;

            case 0x2B:
                var methodSpec = ResolveMethodSpec(rid, genericTypeArguments, genericMethodArguments);
                if ((object)methodSpec != null)
                {
                    return(TryResolve(methodSpec, options));
                }
                break;
            }

            if ((options & DmdResolveOptions.ThrowOnError) != 0)
            {
                throw new ArgumentOutOfRangeException(nameof(metadataToken));
            }
            return(null);
        }
Exemplo n.º 13
0
 public abstract DmdType?ResolveType(int metadataToken, IList <DmdType>?genericTypeArguments, IList <DmdType>?genericMethodArguments, DmdResolveOptions options);
Exemplo n.º 14
0
 /// <summary>
 /// Resolves a method signature
 /// </summary>
 /// <param name="metadataToken">StandaloneSig token from a method body</param>
 /// <param name="genericTypeArguments">Generic type arguments or null</param>
 /// <param name="genericMethodArguments">Generic method arguments or null</param>
 /// <param name="options">Resolve options</param>
 /// <returns></returns>
 public abstract DmdMethodSignature ResolveMethodSignature(int metadataToken, IList <DmdType> genericTypeArguments, IList <DmdType> genericMethodArguments, DmdResolveOptions options);
Exemplo n.º 15
0
        public sealed override DmdFieldInfo ResolveField(int metadataToken, IList <DmdType> genericTypeArguments, IList <DmdType> genericMethodArguments, DmdResolveOptions options)
        {
            uint rid = (uint)(metadataToken & 0x00FFFFFF);

            switch ((uint)metadataToken >> 24)
            {
            case 0x04:
                var field = ResolveFieldDef(rid);
                if ((object)field != null)
                {
                    return(field);
                }
                break;

            case 0x0A:
                var memberRef = ResolveMemberRef(rid, genericTypeArguments, genericMethodArguments);
                if ((object)memberRef != null)
                {
                    if (memberRef is DmdFieldInfo fieldRef)
                    {
                        return(TryResolve(fieldRef, options));
                    }
                    if ((options & DmdResolveOptions.ThrowOnError) != 0)
                    {
                        throw new ArgumentException();
                    }
                }
                break;
            }

            if ((options & DmdResolveOptions.ThrowOnError) != 0)
            {
                throw new ArgumentOutOfRangeException(nameof(metadataToken));
            }
            return(null);
        }
Exemplo n.º 16
0
 /// <summary>
 /// Resolves a method signature
 /// </summary>
 /// <param name="metadataToken">StandaloneSig token from a method body</param>
 /// <param name="genericTypeArguments">Generic type arguments or null</param>
 /// <param name="genericMethodArguments">Generic method arguments or null</param>
 /// <param name="options">Resolve options</param>
 /// <returns></returns>
 public DmdMethodSignature ResolveMethodSignature(int metadataToken, IList <Type> genericTypeArguments, IList <Type> genericMethodArguments, DmdResolveOptions options) =>
 ResolveMethodSignature(metadataToken, genericTypeArguments.ToDmdType(AppDomain), genericMethodArguments.ToDmdType(AppDomain), options);
Exemplo n.º 17
0
 /// <summary>
 /// Resolves a member
 /// </summary>
 /// <param name="metadataToken">Token</param>
 /// <param name="genericTypeArguments">Generic type arguments or null</param>
 /// <param name="genericMethodArguments">Generic method arguments or null</param>
 /// <param name="options">Resolve options</param>
 /// <returns></returns>
 public DmdMemberInfo?ResolveMember(int metadataToken, IList <Type>?genericTypeArguments, IList <Type>?genericMethodArguments, DmdResolveOptions options) =>
 ResolveMember(metadataToken, genericTypeArguments.ToDmdType(AppDomain), genericMethodArguments.ToDmdType(AppDomain), options);