This commit is contained in:
nub31
2025-09-11 21:50:49 +02:00
parent fd27d2709d
commit 3712a159e2
11 changed files with 80 additions and 178 deletions

View File

@@ -10,7 +10,7 @@ namespace NubLang.Generation.QBE;
public class QBEGenerator
{
private readonly QBEWriter _writer;
private readonly TypedModule _module;
private readonly IReadOnlyList<DefinitionNode> _definitions;
private readonly IReadOnlyDictionary<string, ModuleSignature> _moduleSignatures;
private readonly List<CStringLiteral> _cStringLiterals = [];
@@ -23,9 +23,9 @@ public class QBEGenerator
private int _stringLiteralIndex;
private bool _codeIsReachable = true;
public QBEGenerator(TypedModule module, IReadOnlyDictionary<string, ModuleSignature> moduleSignatures)
public QBEGenerator(IReadOnlyList<DefinitionNode> definitions, IReadOnlyDictionary<string, ModuleSignature> moduleSignatures)
{
_module = module;
_definitions = definitions;
_moduleSignatures = moduleSignatures;
_writer = new QBEWriter();
}
@@ -51,19 +51,19 @@ public class QBEGenerator
}
}
foreach (var structDef in _module.Definitions.OfType<StructNode>())
foreach (var structDef in _definitions.OfType<StructNode>())
{
EmitStructDefinition(structDef);
_writer.NewLine();
}
foreach (var funcDef in _module.Definitions.OfType<FuncNode>())
foreach (var funcDef in _definitions.OfType<FuncNode>())
{
EmitFuncDefinition(funcDef);
_writer.NewLine();
}
// foreach (var structDef in _module.Definitions.OfType<StructNode>().Where(x => x.InterfaceImplementations.Count > 0))
// foreach (var structDef in _definitions.OfType<StructNode>().Where(x => x.InterfaceImplementations.Count > 0))
// {
// _writer.Write($"data {StructVtableName(_module.Name, structDef.Name)} = {{ ");
//
@@ -386,7 +386,7 @@ public class QBEGenerator
_writer.Write(FuncQBETypeName(funcDef.Signature.ReturnType) + ' ');
}
_writer.Write(FuncName(_module.Name, funcDef.Name));
_writer.Write(FuncName(funcDef.Module, funcDef.Name));
_writer.Write("(");
foreach (var parameter in funcDef.Signature.Parameters)
@@ -410,7 +410,7 @@ public class QBEGenerator
private void EmitStructDefinition(StructNode structDef)
{
var type = TypeResolver.ResolveStructType(_module.Name, structDef.Name, _moduleSignatures);
var type = TypeResolver.ResolveStructType(structDef.Module, structDef.Name, _moduleSignatures);
// _writer.WriteLine($"export function {StructCtorName(_module.Name, structDef.Name)}() {{");
// _writer.WriteLine("@start");
@@ -432,7 +432,7 @@ public class QBEGenerator
_writer.Write(FuncQBETypeName(function.Signature.ReturnType) + ' ');
}
_writer.Write(StructFuncName(_module.Name, structDef.Name, function.Name));
_writer.Write(StructFuncName(structDef.Module, structDef.Name, function.Name));
_writer.Write("(l %this, ");
foreach (var parameter in function.Signature.Parameters)