Module system
This commit is contained in:
@@ -11,7 +11,7 @@ public class QBEGenerator
|
||||
{
|
||||
private readonly QBEWriter _writer;
|
||||
private readonly IReadOnlyList<DefinitionNode> _definitions;
|
||||
private readonly IReadOnlyDictionary<string, ModuleSignature> _moduleSignatures;
|
||||
private readonly IReadOnlyDictionary<string, Module> _moduleSignatures;
|
||||
|
||||
private readonly List<CStringLiteral> _cStringLiterals = [];
|
||||
private readonly List<StringLiteral> _stringLiterals = [];
|
||||
@@ -23,7 +23,7 @@ public class QBEGenerator
|
||||
private int _stringLiteralIndex;
|
||||
private bool _codeIsReachable = true;
|
||||
|
||||
public QBEGenerator(IReadOnlyList<DefinitionNode> definitions, IReadOnlyDictionary<string, ModuleSignature> moduleSignatures)
|
||||
public QBEGenerator(IReadOnlyList<DefinitionNode> definitions, IReadOnlyDictionary<string, Module> moduleSignatures)
|
||||
{
|
||||
_definitions = definitions;
|
||||
_moduleSignatures = moduleSignatures;
|
||||
@@ -46,7 +46,7 @@ public class QBEGenerator
|
||||
{
|
||||
foreach (var structType in signature.ExportedStructTypes)
|
||||
{
|
||||
EmitStructType(module, structType);
|
||||
EmitStructType(module, structType.StructType);
|
||||
_writer.NewLine();
|
||||
}
|
||||
}
|
||||
@@ -410,8 +410,6 @@ public class QBEGenerator
|
||||
|
||||
private void EmitStructDefinition(StructNode structDef)
|
||||
{
|
||||
var type = TypeResolver.ResolveStructType(structDef.Module, structDef.Name, _moduleSignatures);
|
||||
|
||||
// _writer.WriteLine($"export function {StructCtorName(_module.Name, structDef.Name)}() {{");
|
||||
// _writer.WriteLine("@start");
|
||||
// _writer.Indented($"%struct =l alloc8 {SizeOf(type)}");
|
||||
@@ -660,7 +658,6 @@ public class QBEGenerator
|
||||
|
||||
private string EmitFuncIdentifier(FuncIdentifierNode funcIdent)
|
||||
{
|
||||
// todo(nub31): Support for extern funcs
|
||||
return FuncName(funcIdent.Module, funcIdent.Name);
|
||||
}
|
||||
|
||||
@@ -755,9 +752,7 @@ public class QBEGenerator
|
||||
private string EmitAddressOfStructFieldAccess(StructFieldAccessNode structFieldAccess)
|
||||
{
|
||||
var target = EmitExpression(structFieldAccess.Target);
|
||||
|
||||
var structType = TypeResolver.ResolveStructType(structFieldAccess.StructType.Module, structFieldAccess.StructType.Name, _moduleSignatures);
|
||||
var offset = OffsetOf(structType, structFieldAccess.Field);
|
||||
var offset = OffsetOf(structFieldAccess.StructType, structFieldAccess.Field);
|
||||
|
||||
var address = TmpName();
|
||||
_writer.Indented($"{address} =l add {target}, {offset}");
|
||||
@@ -1398,8 +1393,8 @@ public class QBEGenerator
|
||||
|
||||
private string FuncName(string module, string name)
|
||||
{
|
||||
var type = TypeResolver.ResolveFunctionType(module, name, _moduleSignatures);
|
||||
var symbol = type.ExternSymbol ?? $"{module}.{name}";
|
||||
var function = _moduleSignatures[module].AllFunctions.First(x => x.Name == name);
|
||||
var symbol = function.ExternSymbol ?? $"{module}.{name}";
|
||||
return "$" + symbol;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user