コード例 #1
0
        // TODO: DO we still want nullable here?
        public UncheckedAssembly Compile(Declaration.File file)
        {
            var asm = codegen.Generate(file);

            // Erase the temporaries and things that have user-types in them
            asm.Procedures = asm.Procedures
                             .Except(tempEval)
                             .Where(proc => !proc.HasUserValues()).ToList();
            return(asm);
        }
コード例 #2
0
        public Declaration.File Elim(Declaration.File file)
        {
            var collector = new CollectDependencies(System);

            collector.Collect(file);
            dependencyMap = collector.DependencyMap;
            var result = (Declaration.File)Transform(file);

            System.ResetSymbolTable();
            // TODO: note below
            // NOTE: Do we need to care about compile status here?
            SymbolResolution.Resolve(System.SymbolTable, result);
            //Console.WriteLine(result.Dump());
            return(result);
        }
コード例 #3
0
ファイル: Codegen.cs プロジェクト: LPeter1997/YoakkeLang
        // Public interface ////////////////////////////////////////////////////

        public UncheckedAssembly Generate(Declaration.File file)
        {
            // Rename the assembly
            var parseTreeNode = (Syntax.ParseTree.Declaration.File?)file.ParseTreeNode;
            var fileName      = parseTreeNode?.Name ?? "unnamed";

            Builder.Assembly.Name = fileName;
            file = new ElimDependencies(System).Elim(file);
            nameContext.NameAll(file);
            // Eliminate dependent procedures
            // For something to be compiled, it has to be type-checked
            TypeCheck(file);
            // If the type-checking succeeded, we can compile
            Visit(file);
            return(Builder.Assembly);
        }
コード例 #4
0
ファイル: NameContext.cs プロジェクト: LPeter1997/YoakkeLang
 public void NameAll(Declaration.File file) => Visit(file);
コード例 #5
0
ファイル: Desugaring.cs プロジェクト: LPeter1997/YoakkeLang
 /// <summary>
 /// Desugars a <see cref="Declaration.File"/>.
 /// </summary>
 /// <param name="file">The <see cref="Declaration.File"/> to desugar.</param>
 /// <returns>The desugared <see cref="Declaration.File"/>.</returns>
 public Declaration.File Desugar(Declaration.File file) =>
 (Declaration.File)Desugar((Declaration)file);
コード例 #6
0
 public void Collect(Declaration.File file) => Visit(file);