public MethodSpecificationMethod(GenericContext gc, MethodSpecificationHandle handle) : base(gc) { this.handle = handle; ms = Cx.MdReader.GetMethodSpecification(handle); typeParams = ms.DecodeSignature(Cx.TypeSignatureDecoder, gc); unboundMethod = (Method)Cx.CreateGeneric(gc, ms.Method); }
/// <summary> /// Emit a method specification. /// </summary> /// <param name="methodSpecHandle">Method specification handle</param> private string EmitMethodSpecificationName(MethodSpecificationHandle methodSpecHandle) { MethodSpecification methodSpec = _metadataReader.GetMethodSpecification(methodSpecHandle); DisassemblingGenericContext genericContext = new DisassemblingGenericContext(Array.Empty <string>(), Array.Empty <string>()); return(EmitHandleName(methodSpec.Method, namespaceQualified: true) + methodSpec.DecodeSignature <string, DisassemblingGenericContext>(this, genericContext)); }
public MethodSpecificationMethod(GenericContext gc, MethodSpecificationHandle handle) : base(gc) { ms = cx.mdReader.GetMethodSpecification(handle); typeParams = ms.DecodeSignature(cx.TypeSignatureDecoder, gc); unboundMethod = (Method)cx.CreateGeneric(gc, ms.Method); declaringType = unboundMethod.DeclaringType; ShortId = unboundMethod.ShortId + openAngle + CIL.Id.CommaSeparatedList(typeParams.Select(p => p.ShortId)) + closeAngle; }
public void AddModuleTokenForMethod(MethodDesc method, ModuleToken token) { if (token.TokenType == CorTokenType.mdtMethodSpec) { MethodSpecification methodSpec = token.MetadataReader.GetMethodSpecification((MethodSpecificationHandle)token.Handle); methodSpec.DecodeSignature <DummyTypeInfo, ModuleTokenResolver>(new TokenResolverProvider(this, token.Module), this); token = new ModuleToken(token.Module, methodSpec.Method); } if (token.TokenType == CorTokenType.mdtMemberRef) { MemberReference memberRef = token.MetadataReader.GetMemberReference((MemberReferenceHandle)token.Handle); EntityHandle owningTypeHandle = memberRef.Parent; AddModuleTokenForType(method.OwningType, new ModuleToken(token.Module, owningTypeHandle)); memberRef.DecodeMethodSignature <DummyTypeInfo, ModuleTokenResolver>(new TokenResolverProvider(this, token.Module), this); } }