Beispiel #1
0
        private void LoadType(TypeName type)
        {
            if (!type.HasNamespace)
            {
                throw new Exception("Should not load anything but namespaced types.");
            }

            if (store.HasDefinition(type) || store.HasTemplateDefinition(type))
            {
                return;
            }

            if (finisedResolving)
            {
                throw new InvalidOperationException("internal compiler error: Cannot load additional type: " + type.Data + " when the resolve phase has been completed.");
            }

            string       filename = type.PrimaryName.Data.Replace('.', Path.DirectorySeparatorChar) + ".pluk";
            Set <string> files    = new Set <string>();

            foreach (string path in paths)
            {
                string fullFileName = path + filename;
                if (parsedFiles.Contains(fullFileName))
                {
                    continue;
                }
                prefetcher.Enqueue(fullFileName);
                files.Add(fullFileName);
            }
            while (files.Count > 0)
            {
                string fullFileName = prefetcher.FirstFromSet(files);
                files.Remove(fullFileName);
                using (StreamReader sr = prefetcher.Request(fullFileName))
                {
                    parsedFiles.Add(fullFileName);
                    if (sr != null)
                    {
                        if (Program.WriteFileNameOnRead)
                        {
                            Console.WriteLine("parsing: " + fullFileName);
                        }
                        Syntax syntax = new Syntax(store, fullFileName, sr);
                        syntax.Parse();
                    }
                }
            }
        }