Exemplo n.º 1
0
 //
 // "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;
 }
Exemplo n.º 2
0
        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;
        }
Exemplo n.º 3
0
        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));
        }