// // "fullyQualifiedName" determines the string returned by Module.FullyQualifiedName. It is typically set to the full path of the // file on disk containing the module. // internal RoResourceModule(RoAssembly assembly, string fullyQualifiedName) : base(fullyQualifiedName) { Debug.Assert(assembly != null); Debug.Assert(fullyQualifiedName != null); _assembly = assembly; }
internal CoreTypes(TypeLoader loader) { int numCoreTypes = (int)CoreType.NumCoreTypes; RoType[] coreTypes = new RoType[numCoreTypes]; Exception[] exceptions = new Exception[numCoreTypes]; RoAssembly coreAssembly = loader.TryGetCoreAssembly(out Exception e); if (coreAssembly == null) { for (int i = 0; i < numCoreTypes; i++) { exceptions[i] = e; } } else { for (int i = 0; i < numCoreTypes; i++) { ((CoreType)i).GetFullName(out byte[] ns, out byte[] name); RoType type = coreAssembly.GetTypeCore(ns, name, ignoreCase: false, out e); coreTypes[i] = type; if (type == null) { exceptions[i] = e; } } } _coreTypes = coreTypes; _exceptions = exceptions; }
public static RoType LoadTypeFromAssemblyQualifiedName(string name, RoAssembly defaultAssembly, bool ignoreCase, bool throwOnError) { if (!name.TypeNameContainsTypeParserMetacharacters()) { // Fast-path: the type contains none of the parser metacharacters nor the escape character. Just treat as plain old type name. name.SplitTypeName(out string ns, out string simpleName); RoType type = defaultAssembly.GetTypeCore(ns, simpleName, ignoreCase: ignoreCase, out Exception e); if (type != null) { return(type); } if (throwOnError) { throw e; } } TypeLoader loader = defaultAssembly.Loader; Func <AssemblyName, Assembly> assemblyResolver = delegate(AssemblyName assemblyName) { return(loader.LoadFromAssemblyName(assemblyName)); }; Func <Assembly, string, bool, Type> typeResolver = delegate(Assembly assembly, string fullName, bool ignoreCase2) { if (assembly == null) { assembly = defaultAssembly; } Debug.Assert(assembly is RoAssembly); RoAssembly roAssembly = (RoAssembly)assembly; fullName = fullName.UnescapeTypeNameIdentifier(); fullName.SplitTypeName(out string ns, out string simpleName); Type type = roAssembly.GetTypeCore(ns, simpleName, ignoreCase: ignoreCase2, out Exception e); if (type != null) { return(type); } if (throwOnError) { throw e; } return(null); }; return((RoType)Type.GetType(name, assemblyResolver: assemblyResolver, typeResolver: typeResolver, throwOnError: throwOnError, ignoreCase: ignoreCase)); }