This commit is contained in:
nub31
2025-07-03 22:57:30 +02:00
parent b1ec04f499
commit 9a21ec5d8d
3 changed files with 9 additions and 3 deletions

View File

@@ -7,9 +7,8 @@ public static class QBE
public static async Task<string?> Invoke(string ssa)
{
using var process = new Process();
process.StartInfo = new ProcessStartInfo
process.StartInfo = new ProcessStartInfo("qbe")
{
FileName = "qbe",
UseShellExecute = false,
RedirectStandardInput = true,
RedirectStandardOutput = true,

View File

@@ -200,16 +200,19 @@ public static class QBEGenerator
{
case BoundArrayInitializerNode arrayInitializer:
{
_writer.WriteDebugLocation(arrayInitializer);
EmitStore(source.Type, EmitUnwrap(EmitArrayInitializer(arrayInitializer)), destinationPointer);
return true;
}
case BoundStructInitializerNode structInitializer:
{
_writer.WriteDebugLocation(structInitializer);
EmitStructInitializer(structInitializer, destinationPointer);
return true;
}
case BoundLiteralNode { Kind: LiteralKind.String } literal:
{
_writer.WriteDebugLocation(literal);
EmitStore(source.Type, EmitUnwrap(EmitLiteral(literal)), destinationPointer);
return true;
}
@@ -521,6 +524,7 @@ public static class QBEGenerator
builder.Append($"({string.Join(", ", parameterStrings)})");
_writer.StartFunction(builder.ToString());
_writer.WriteDebugLocation(debugNode);
var parameterVars = parameters.Select(parameter => new Variable(parameter.Name, new Val("%" + parameter.Name, parameter.Type, ValKind.Direct))).ToList();
@@ -566,6 +570,8 @@ public static class QBEGenerator
private static void EmitStatement(BoundStatementNode statement)
{
_writer.WriteDebugLocation(statement);
switch (statement)
{
case BoundAssignmentNode assignment:
@@ -714,6 +720,7 @@ public static class QBEGenerator
private static Val EmitExpression(BoundExpressionNode expression)
{
_writer.WriteDebugLocation(expression);
return expression switch
{
BoundAddressOfNode addressOf => EmitAddressOf(addressOf),

View File

@@ -40,7 +40,7 @@ internal class QBEWriter
}
}
private void WriteDebugLocation(BoundNode node)
public void WriteDebugLocation(BoundNode node)
{
var firstToken = node.Tokens.FirstOrDefault();
if (firstToken != null)