/// <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);
/// <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);
/// <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);
/// <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);
/// <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);
/// <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); }
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;
static DmdMethodBase TryResolve(DmdMethodBase member, DmdResolveOptions options) => (options & DmdResolveOptions.NoTryResolveRefs) != 0 ? member : member.ResolveMethodBaseNoThrow() ?? member;
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); }
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); }
public abstract DmdType?ResolveType(int metadataToken, IList <DmdType>?genericTypeArguments, IList <DmdType>?genericMethodArguments, DmdResolveOptions options);
/// <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);
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); }
/// <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);
/// <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);