示例#1
0
 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);
 }
示例#2
0
        /// <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));
        }
示例#3
0
        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;
        }
示例#4
0
 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);
     }
 }