Exemplo n.º 1
0
        public VTable GetVTable(ITypeDefOrRef type)
        {
            if (type == null)
            {
                return(null);
            }
            if (type is TypeDef)
            {
                return(GetOrConstruct((TypeDef)type));
            }
            else if (type is TypeRef)
            {
                return(GetOrConstruct(((TypeRef)type).ResolveThrow()));
            }
            else if (type is TypeSpec)
            {
                TypeSig sig = ((TypeSpec)type).TypeSig;
                if (sig is TypeDefOrRefSig)
                {
                    TypeDef typeDef = ((TypeDefOrRefSig)sig).TypeDefOrRef.ResolveTypeDefThrow();
                    return(GetOrConstruct(typeDef));
                }
                else if (sig is GenericInstSig)
                {
                    var     genInst  = (GenericInstSig)sig;
                    TypeDef openType = genInst.GenericType.TypeDefOrRef.ResolveTypeDefThrow();
                    VTable  vTable   = GetOrConstruct(openType);

                    return(ResolveGenericArgument(openType, genInst, vTable));
                }
                else
                {
                    throw new NotSupportedException("Unexpected type: " + type.ToString());
                }
            }
            else
            {
                throw new UnreachableException();
            }
        }
Exemplo n.º 2
0
 public override string ToString()
 {
     return(typeRef.ToString());
 }
Exemplo n.º 3
0
        public VTable GetVTable(ITypeDefOrRef type)
        {
            if (type == null)
                return null;
            if (type is TypeDef)
                return GetOrConstruct((TypeDef)type);
            else if (type is TypeRef)
                return GetOrConstruct(((TypeRef)type).ResolveThrow());
            else if (type is TypeSpec) {
                TypeSig sig = ((TypeSpec)type).TypeSig;
                if (sig is TypeDefOrRefSig) {
                    TypeDef typeDef = ((TypeDefOrRefSig)sig).TypeDefOrRef.ResolveTypeDefThrow();
                    return GetOrConstruct(typeDef);
                }
                else if (sig is GenericInstSig) {
                    var genInst = (GenericInstSig)sig;
                    TypeDef openType = genInst.GenericType.TypeDefOrRef.ResolveTypeDefThrow();
                    VTable vTable = GetOrConstruct(openType);

                    return ResolveGenericArgument(openType, genInst, vTable);
                }
                else
                    throw new NotSupportedException("Unexpected type: " + type.ToString());
            }
            else
                throw new UnreachableException();
        }
Exemplo n.º 4
0
 public override string ToString() => typeRef.ToString();