using System.Diagnostics; using Compiler; var moduleGraphBuilder = ModuleGraph.Create(); var asts = new List(); foreach (var fileName in args) { var file = File.ReadAllText(fileName); var tokens = Tokenizer.Tokenize(fileName, file, out var tokenizerDiagnostics); foreach (var diagnostic in tokenizerDiagnostics) DiagnosticFormatter.Print(diagnostic, Console.Error); if (tokens == null) return 1; var ast = Parser.Parse(fileName, tokens, out var parserDiagnostics); foreach (var diagnostic in parserDiagnostics) DiagnosticFormatter.Print(diagnostic, Console.Error); if (ast == null) return 1; moduleGraphBuilder.AddAst(ast); asts.Add(ast); } var moduleGraph = moduleGraphBuilder.Build(out var moduleGraphDiagnostics); foreach (var diagnostic in moduleGraphDiagnostics) DiagnosticFormatter.Print(diagnostic, Console.Error); if (moduleGraph == null) return 1; var functions = new List(); foreach (var ast in asts) { foreach (var func in ast.Definitions.OfType()) { var typedFunction = TypeChecker.CheckFunction(ast.FileName, ast.ModuleName.Ident, func, moduleGraph, out var typeCheckerDiagnostics); foreach (var diagnostic in typeCheckerDiagnostics) DiagnosticFormatter.Print(diagnostic, Console.Error); if (typedFunction == null) return 1; functions.Add(typedFunction); } } var output = Generator.Emit(functions, moduleGraph); Directory.Delete(".build", recursive: true); Directory.CreateDirectory(".build"); File.WriteAllText(".build/out.c", output); Process.Start("gcc", ["-Og", "-g", "-o", ".build/out", ".build/out.c", "-fvisibility=hidden","-fno-builtin"]); return 0;