// 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); }
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); }
// 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); }
public void NameAll(Declaration.File file) => Visit(file);
/// <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);
public void Collect(Declaration.File file) => Visit(file);