private unsafe Type ConstructType(Func <AssemblyName, Assembly> assemblyResolver, Func <Assembly, string, bool, Type> typeResolver, bool throwOnError, bool ignoreCase, ref StackCrawlMark stackMark) { Assembly assembly = null; string assemblyName = this.GetAssemblyName(); if (assemblyName.Length > 0) { assembly = TypeNameParser.ResolveAssembly(assemblyName, assemblyResolver, throwOnError, ref stackMark); if (assembly == null) { return(null); } } string[] names = this.GetNames(); if (names == null) { if (throwOnError) { throw new TypeLoadException(Environment.GetResourceString("Arg_TypeLoadNullStr")); } return(null); } else { Type type = TypeNameParser.ResolveType(assembly, names, typeResolver, throwOnError, ignoreCase, ref stackMark); if (type == null) { return(null); } SafeTypeNameParserHandle[] typeArguments = this.GetTypeArguments(); Type[] array = null; if (typeArguments != null) { array = new Type[typeArguments.Length]; for (int i = 0; i < typeArguments.Length; i++) { using (TypeNameParser typeNameParser = new TypeNameParser(typeArguments[i])) { array[i] = typeNameParser.ConstructType(assemblyResolver, typeResolver, throwOnError, ignoreCase, ref stackMark); } if (array[i] == null) { return(null); } } } int[] modifiers = this.GetModifiers(); fixed(int *ptr = modifiers) { IntPtr pModifiers = new IntPtr((void *)ptr); return(RuntimeTypeHandle.GetTypeHelper(type, array, pModifiers, (modifiers == null) ? 0 : modifiers.Length)); } } }
private unsafe Type ConstructType(Func <AssemblyName, Assembly> assemblyResolver, Func <Assembly, string, bool, Type> typeResolver, bool throwOnError, bool ignoreCase, ref StackCrawlMark stackMark) { Assembly assembly = (Assembly)null; string assemblyName = this.GetAssemblyName(); if (assemblyName.Length > 0) { assembly = TypeNameParser.ResolveAssembly(assemblyName, assemblyResolver, throwOnError, ref stackMark); if (assembly == (Assembly)null) { return((Type)null); } } string[] names = this.GetNames(); if (names == null) { if (throwOnError) { throw new TypeLoadException(Environment.GetResourceString("Arg_TypeLoadNullStr")); } return((Type)null); } Type typeStart = TypeNameParser.ResolveType(assembly, names, typeResolver, throwOnError, ignoreCase, ref stackMark); if (typeStart == (Type)null) { return((Type)null); } SafeTypeNameParserHandle[] typeArguments = this.GetTypeArguments(); Type[] genericArgs = (Type[])null; if (typeArguments != null) { genericArgs = new Type[typeArguments.Length]; for (int index = 0; index < typeArguments.Length; ++index) { using (TypeNameParser typeNameParser = new TypeNameParser(typeArguments[index])) genericArgs[index] = typeNameParser.ConstructType(assemblyResolver, typeResolver, throwOnError, ignoreCase, ref stackMark); if (genericArgs[index] == (Type)null) { return((Type)null); } } } int[] modifiers = this.GetModifiers(); fixed(int *numPtr = modifiers) { IntPtr pModifiers = new IntPtr((void *)numPtr); return(RuntimeTypeHandle.GetTypeHelper(typeStart, genericArgs, pModifiers, modifiers == null ? 0 : modifiers.Length)); } }