示例#1
0
        // 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();
            }
        }
示例#2
0
 public Type GetGenericTypeArgument(int index)
 {
     return(original.GetGenericTypeArgument(index));
 }
		// 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();
			}
		}
示例#4
0
 public Type GetGenericTypeArgument(int index)
 {
     used = true;
     return(context.GetGenericTypeArgument(index));
 }