DmdType ReadType(bool canReturnNull) { var name = ReadUTF8String(); if (canReturnNull && name == null) return null; var type = DmdTypeNameParser.Parse(module, name ?? string.Empty, genericTypeArguments); if ((object)type == null) throw new CABlobParserException("Could not parse type"); return type; }
DmdType?ReadType(bool canReturnNull) { var name = ReadUTF8String(); if (canReturnNull && name is null) { return(null); } var type = DmdTypeNameParser.Parse(module, name ?? string.Empty, genericTypeArguments); if (type is null) { throw new CABlobParserException("Could not parse type"); } return(type); }
public override DmdType GetType(string typeName, DmdGetTypeOptions options) { if (typeName == null) { throw new ArgumentNullException(nameof(typeName)); } var resolver = new TypeDefResolver(this, (options & DmdGetTypeOptions.IgnoreCase) != 0); var type = DmdTypeNameParser.Parse(resolver, typeName); if ((object)type != null) { return(appDomain.Intern(type, DmdMakeTypeOptions.NoResolve)); } if ((options & DmdGetTypeOptions.ThrowOnError) != 0) { throw new TypeNotFoundException(typeName); } return(null); }
DmdMarshalType Read() { const int DEFAULT = 0; try { var nativeType = (UnmanagedType)reader.ReadByte(); UnmanagedType nt; int size; switch (nativeType) { case UnmanagedType.ByValTStr: size = CanRead ? (int)reader.ReadCompressedUInt32() : DEFAULT; return(DmdMarshalType.CreateFixedSysString(size)); case UnmanagedType.SafeArray: var vt = CanRead ? (VarEnum)reader.ReadCompressedUInt32() : DEFAULT; var udtName = CanRead ? ReadUTF8String() : null; var udtRef = udtName == null ? null : DmdTypeNameParser.Parse(module, udtName, genericTypeArguments); return(DmdMarshalType.CreateSafeArray(vt, udtRef)); case UnmanagedType.ByValArray: size = CanRead ? (int)reader.ReadCompressedUInt32() : DEFAULT; nt = CanRead ? (UnmanagedType)reader.ReadCompressedUInt32() : DEFAULT; return(DmdMarshalType.CreateFixedArray(size, nt)); case UnmanagedType.LPArray: nt = CanRead ? (UnmanagedType)reader.ReadCompressedUInt32() : DEFAULT; int paramNum = CanRead ? (int)reader.ReadCompressedUInt32() : DEFAULT; size = CanRead ? (int)reader.ReadCompressedUInt32() : DEFAULT; bool hasFlags = CanRead; int flags = hasFlags ? (int)reader.ReadCompressedUInt32() : DEFAULT; const int ntaSizeParamIndexSpecified = 1; if (hasFlags && (flags & ntaSizeParamIndexSpecified) == 0) { paramNum = 0; } return(DmdMarshalType.CreateArray(nt, (short)paramNum, size)); case UnmanagedType.CustomMarshaler: var guid = ReadUTF8String(); var nativeTypeName = ReadUTF8String(); var custMarshalerName = ReadUTF8String(); var cmRef = DmdTypeNameParser.Parse(module, custMarshalerName, genericTypeArguments); var cookie = ReadUTF8String(); return(DmdMarshalType.CreateCustomMarshaler(custMarshalerName, cmRef, cookie)); case UnmanagedType.IUnknown: case UnmanagedType.IDispatch: case UnmanagedType.Interface: int iidParamIndex = CanRead ? (int)reader.ReadCompressedUInt32() : DEFAULT; return(DmdMarshalType.CreateInterface(nativeType, iidParamIndex)); default: return(DmdMarshalType.Create(nativeType)); } } catch (ArgumentException) { } catch (IOException) { } return(null); }