This commit is contained in:
nub31
2026-02-09 20:49:09 +01:00
parent 96670b1201
commit ab9bd6fd05
9 changed files with 300 additions and 176 deletions

View File

@@ -1,6 +1,9 @@
using System.Diagnostics;
using Compiler;
var moduleGraphBuilder = ModuleGraph.Create();
var asts = new List<Ast>();
foreach (var fileName in args)
{
var file = File.ReadAllText(fileName);
@@ -21,19 +24,25 @@ foreach (var fileName in args)
if (parserDiagnostics.Any(x => x.Severity == DiagnosticSeverity.Error))
return 1;
var typeResolver = TypeResolver.Create(fileName, ast, out var typeResolverDiagnostics);
moduleGraphBuilder.AddAst(ast);
asts.Add(ast);
}
foreach (var diagnostic in typeResolverDiagnostics)
DiagnosticFormatter.Print(diagnostic, Console.Error);
var moduleGraph = moduleGraphBuilder.Build(out var moduleGraphDiagnostics);
if (typeResolverDiagnostics.Any(x => x.Severity == DiagnosticSeverity.Error))
return 1;
foreach (var diagnostic in moduleGraphDiagnostics)
DiagnosticFormatter.Print(diagnostic, Console.Error);
var functions = new List<TypedNodeDefinitionFunc>();
if (moduleGraphDiagnostics.Any(x => x.Severity == DiagnosticSeverity.Error))
return 1;
foreach (var function in ast.Definitions.OfType<NodeDefinitionFunc>())
var functions = new List<TypedNodeDefinitionFunc>();
foreach (var ast in asts)
{
foreach (var func in ast.Definitions.OfType<NodeDefinitionFunc>())
{
var typedFunction = TypeChecker.CheckFunction(fileName, function, typeResolver, out var typeCheckerDiagnostics);
var typedFunction = TypeChecker.CheckFunction(ast.FileName, func, moduleGraph, out var typeCheckerDiagnostics);
foreach (var diagnostic in typeCheckerDiagnostics)
DiagnosticFormatter.Print(diagnostic, Console.Error);
@@ -43,16 +52,15 @@ foreach (var fileName in args)
functions.Add(typedFunction);
}
var output = Generator.Emit(functions);
Directory.Delete(".build", recursive: true);
Directory.CreateDirectory(".build");
var outFilePath = Path.Combine(".build", Path.ChangeExtension(fileName, "c"));
File.WriteAllText(outFilePath, output);
Process.Start("gcc", ["-Og", "-g", "-c", "-o", Path.ChangeExtension(outFilePath, "o"), outFilePath]);
}
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"]);
return 0;