...
This commit is contained in:
@@ -5,12 +5,11 @@ using NubLang.Common;
|
||||
using NubLang.Diagnostics;
|
||||
using NubLang.Generation;
|
||||
using NubLang.Generation.QBE;
|
||||
using NubLang.Syntax.Binding;
|
||||
using NubLang.Syntax.Binding.Node;
|
||||
using NubLang.Syntax.Parsing;
|
||||
using NubLang.Syntax.Parsing.Node;
|
||||
using NubLang.Syntax.Tokenization;
|
||||
using Binder = NubLang.Syntax.Binding.Binder;
|
||||
using NubLang.Parsing;
|
||||
using NubLang.Parsing.Syntax;
|
||||
using NubLang.Tokenization;
|
||||
using NubLang.TypeChecking;
|
||||
using NubLang.TypeChecking.Node;
|
||||
|
||||
const string BIN_DIR = "bin";
|
||||
const string INT_DIR = "bin-int";
|
||||
@@ -92,14 +91,14 @@ foreach (var file in options.Files)
|
||||
|
||||
var definitionTable = new DefinitionTable(syntaxTrees);
|
||||
|
||||
var boundSyntaxTrees = new List<BoundSyntaxTree>();
|
||||
var typedSyntaxTrees = new List<TypedSyntaxTree>();
|
||||
|
||||
foreach (var syntaxTree in syntaxTrees)
|
||||
{
|
||||
var binder = new Binder(syntaxTree, definitionTable);
|
||||
var boundSyntaxTree = binder.Bind();
|
||||
diagnostics.AddRange(boundSyntaxTree.Diagnostics);
|
||||
boundSyntaxTrees.Add(boundSyntaxTree);
|
||||
var typeChecker = new TypeChecker(syntaxTree, definitionTable);
|
||||
var typedSyntaxTree = typeChecker.Check();
|
||||
diagnostics.AddRange(typeChecker.GetDiagnostics());
|
||||
typedSyntaxTrees.Add(typedSyntaxTree);
|
||||
}
|
||||
|
||||
foreach (var diagnostic in diagnostics)
|
||||
@@ -112,15 +111,15 @@ if (diagnostics.Any(diagnostic => diagnostic.Severity == DiagnosticSeverity.Erro
|
||||
return 1;
|
||||
}
|
||||
|
||||
var boundDefinitionTable = new BoundDefinitionTable(boundSyntaxTrees);
|
||||
var typedDefinitionTable = new TypedDefinitionTable(typedSyntaxTrees);
|
||||
|
||||
var objectFiles = new List<string>();
|
||||
|
||||
foreach (var syntaxTree in boundSyntaxTrees)
|
||||
foreach (var syntaxTree in typedSyntaxTrees)
|
||||
{
|
||||
var outFileName = HexString.CreateUnique(8);
|
||||
|
||||
var generator = new QBEGenerator(syntaxTree, boundDefinitionTable);
|
||||
var generator = new QBEGenerator(syntaxTree, typedDefinitionTable);
|
||||
var ssa = generator.Emit();
|
||||
File.WriteAllText(Path.Join(INT_DEBUG_DIR, $"{outFileName}.ssa"), ssa);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user