203 {
204 CustomModifiers mods;
205 switch (br.ReadByte())
206 {
207 case ELEMENT_TYPE_CLASS:
208 return ReadTypeDefOrRefEncoded(module, br, context).MarkNotValueType();
209 case ELEMENT_TYPE_VALUETYPE:
210 return ReadTypeDefOrRefEncoded(module, br, context).MarkValueType();
211 case ELEMENT_TYPE_BOOLEAN:
212 return module.Universe.System_Boolean;
213 case ELEMENT_TYPE_CHAR:
214 return module.Universe.System_Char;
215 case ELEMENT_TYPE_I1:
216 return module.Universe.System_SByte;
217 case ELEMENT_TYPE_U1:
218 return module.Universe.System_Byte;
219 case ELEMENT_TYPE_I2:
220 return module.Universe.System_Int16;
221 case ELEMENT_TYPE_U2:
222 return module.Universe.System_UInt16;
223 case ELEMENT_TYPE_I4:
224 return module.Universe.System_Int32;
225 case ELEMENT_TYPE_U4:
226 return module.Universe.System_UInt32;
227 case ELEMENT_TYPE_I8:
228 return module.Universe.System_Int64;
229 case ELEMENT_TYPE_U8:
230 return module.Universe.System_UInt64;
231 case ELEMENT_TYPE_R4:
232 return module.Universe.System_Single;
233 case ELEMENT_TYPE_R8:
234 return module.Universe.System_Double;
235 case ELEMENT_TYPE_I:
236 return module.Universe.System_IntPtr;
237 case ELEMENT_TYPE_U:
238 return module.Universe.System_UIntPtr;
239 case ELEMENT_TYPE_STRING:
240 return module.Universe.System_String;
241 case ELEMENT_TYPE_OBJECT:
242 return module.Universe.System_Object;
243 case ELEMENT_TYPE_VAR:
244 return context.GetGenericTypeArgument(br.ReadCompressedUInt());
245 case ELEMENT_TYPE_MVAR:
246 return context.GetGenericMethodArgument(br.ReadCompressedUInt());
247 case ELEMENT_TYPE_GENERICINST:
248 return ReadGenericInst(module, br, context);
249 case ELEMENT_TYPE_SZARRAY:
250 mods = CustomModifiers.Read(module, br, context);
251 return ReadType(module, br, context).__MakeArrayType(mods);
252 case ELEMENT_TYPE_ARRAY:
253 mods = CustomModifiers.Read(module, br, context);
254 return ReadType(module, br, context).__MakeArrayType(br.ReadCompressedUInt(), ReadArraySizes(br), ReadArrayBounds(br), mods);
255 case ELEMENT_TYPE_PTR:
256 mods = CustomModifiers.Read(module, br, context);
257 return ReadTypeOrVoid(module, br, context).__MakePointerType(mods);
258 case ELEMENT_TYPE_FNPTR:
259 return ReadFunctionPointer(module, br, context);
260 default:
261 throw new BadImageFormatException();
262 }
263 }
static Type ReadType(ModuleReader module, ByteReader br, IGenericContext context)