// see ECMA 335 CLI spec June 2006 section 23.2.12 for this production protected static Type ReadType(ModuleReader module, ByteReader br, IGenericContext context) { CustomModifiers mods; switch (br.ReadByte()) { case ELEMENT_TYPE_CLASS: return ReadTypeDefOrRefEncoded(module, br, context).MarkNotValueType(); case ELEMENT_TYPE_VALUETYPE: return ReadTypeDefOrRefEncoded(module, br, context).MarkValueType(); case ELEMENT_TYPE_BOOLEAN: return module.universe.System_Boolean; case ELEMENT_TYPE_CHAR: return module.universe.System_Char; case ELEMENT_TYPE_I1: return module.universe.System_SByte; case ELEMENT_TYPE_U1: return module.universe.System_Byte; case ELEMENT_TYPE_I2: return module.universe.System_Int16; case ELEMENT_TYPE_U2: return module.universe.System_UInt16; case ELEMENT_TYPE_I4: return module.universe.System_Int32; case ELEMENT_TYPE_U4: return module.universe.System_UInt32; case ELEMENT_TYPE_I8: return module.universe.System_Int64; case ELEMENT_TYPE_U8: return module.universe.System_UInt64; case ELEMENT_TYPE_R4: return module.universe.System_Single; case ELEMENT_TYPE_R8: return module.universe.System_Double; case ELEMENT_TYPE_I: return module.universe.System_IntPtr; case ELEMENT_TYPE_U: return module.universe.System_UIntPtr; case ELEMENT_TYPE_STRING: return module.universe.System_String; case ELEMENT_TYPE_OBJECT: return module.universe.System_Object; case ELEMENT_TYPE_VAR: return context.GetGenericTypeArgument(br.ReadCompressedUInt()); case ELEMENT_TYPE_MVAR: return context.GetGenericMethodArgument(br.ReadCompressedUInt()); case ELEMENT_TYPE_GENERICINST: return ReadGenericInst(module, br, context); case ELEMENT_TYPE_SZARRAY: mods = CustomModifiers.Read(module, br, context); return ReadType(module, br, context).__MakeArrayType(mods); case ELEMENT_TYPE_ARRAY: mods = CustomModifiers.Read(module, br, context); return ReadType(module, br, context).__MakeArrayType(br.ReadCompressedUInt(), ReadArraySizes(br), ReadArrayBounds(br), mods); case ELEMENT_TYPE_PTR: mods = CustomModifiers.Read(module, br, context); return ReadTypeOrVoid(module, br, context).__MakePointerType(mods); case ELEMENT_TYPE_FNPTR: return ReadFunctionPointer(module, br, context); default: throw new BadImageFormatException(); } }
// see ECMA 335 CLI spec June 2006 section 23.2.12 for this production protected static Type ReadType(ModuleReader module, ByteReader br, IGenericContext context) { CustomModifiers mods; switch (br.ReadByte()) { case ELEMENT_TYPE_CLASS: case ELEMENT_TYPE_VALUETYPE: return(ReadTypeDefOrRefEncoded(module, br, context)); case ELEMENT_TYPE_BOOLEAN: return(module.universe.System_Boolean); case ELEMENT_TYPE_CHAR: return(module.universe.System_Char); case ELEMENT_TYPE_I1: return(module.universe.System_SByte); case ELEMENT_TYPE_U1: return(module.universe.System_Byte); case ELEMENT_TYPE_I2: return(module.universe.System_Int16); case ELEMENT_TYPE_U2: return(module.universe.System_UInt16); case ELEMENT_TYPE_I4: return(module.universe.System_Int32); case ELEMENT_TYPE_U4: return(module.universe.System_UInt32); case ELEMENT_TYPE_I8: return(module.universe.System_Int64); case ELEMENT_TYPE_U8: return(module.universe.System_UInt64); case ELEMENT_TYPE_R4: return(module.universe.System_Single); case ELEMENT_TYPE_R8: return(module.universe.System_Double); case ELEMENT_TYPE_I: return(module.universe.System_IntPtr); case ELEMENT_TYPE_U: return(module.universe.System_UIntPtr); case ELEMENT_TYPE_STRING: return(module.universe.System_String); case ELEMENT_TYPE_OBJECT: return(module.universe.System_Object); case ELEMENT_TYPE_VAR: return(context.GetGenericTypeArgument(br.ReadCompressedInt())); case ELEMENT_TYPE_MVAR: return(context.GetGenericMethodArgument(br.ReadCompressedInt())); case ELEMENT_TYPE_GENERICINST: return(ReadGenericInst(module, br, context)); case ELEMENT_TYPE_SZARRAY: mods = ReadCustomModifiers(module, br, context); return(ReadType(module, br, context).__MakeArrayType(mods.required, mods.optional)); case ELEMENT_TYPE_ARRAY: mods = ReadCustomModifiers(module, br, context); return(ReadType(module, br, context).__MakeArrayType(ReadArrayShape(br), mods.required, mods.optional)); case ELEMENT_TYPE_PTR: mods = ReadCustomModifiers(module, br, context); return(ReadTypeOrVoid(module, br, context).__MakePointerType(mods.required, mods.optional)); case ELEMENT_TYPE_FNPTR: return(ReadFunctionPointer(module, br, context)); default: throw new BadImageFormatException(); } }
public Type GetGenericMethodArgument(int index) { used = true; return(context.GetGenericMethodArgument(index)); }