...
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user