Improved debug info emit

This commit is contained in:
nub31
2025-10-17 23:22:04 +02:00
parent e703a2ca25
commit 1fdeb60eb5
5 changed files with 20 additions and 27 deletions

View File

@@ -166,7 +166,7 @@ public class Generator
foreach (var funcNode in _definitions.OfType<FuncNode>())
{
EmitLine(funcNode.Tokens);
EmitLine(funcNode.Tokens.FirstOrDefault());
appendNewLine = true;
var parameters = funcNode.Signature.Parameters.Count != 0
? string.Join(", ", funcNode.Signature.Parameters.Select(x => MapNameWithType(x.Type, x.Name)))
@@ -185,7 +185,7 @@ public class Generator
{
foreach (var structFuncNode in structNode.Functions)
{
EmitLine(structFuncNode.Tokens);
EmitLine(structFuncNode.Tokens.FirstOrDefault());
var parameters = structFuncNode.Signature.Parameters.Count != 0
? string.Join(", ", structFuncNode.Signature.Parameters.Select(x => MapNameWithType(x.Type, x.Name)))
: "void";
@@ -201,7 +201,7 @@ public class Generator
{
if (funcNode.Body == null) continue;
EmitLine(funcNode.Tokens);
EmitLine(funcNode.Tokens.FirstOrDefault());
var parameters = funcNode.Signature.Parameters.Count != 0
? string.Join(", ", funcNode.Signature.Parameters.Select(x => MapNameWithType(x.Type, x.Name)))
: "void";
@@ -236,7 +236,7 @@ public class Generator
private void EmitStatement(StatementNode statementNode)
{
EmitLine(statementNode.Tokens);
EmitLine(statementNode.Tokens.FirstOrDefault());
switch (statementNode)
{
case AssignmentNode assignmentNode:
@@ -277,14 +277,12 @@ public class Generator
}
}
private void EmitLine(List<Token> tokens)
private void EmitLine(Token? token)
{
if (tokens.Count >= 1)
{
var file = tokens[0].Span.FilePath;
var line = tokens[0].Span.Start.Line;
_writer.WriteLine($"#line {line} \"{file}\"");
}
if (token == null) return;
var file = token.Span.FilePath;
var line = token.Span.Start.Line;
_writer.WriteLine($"#line {line} \"{file}\"");
}
private void EmitAssignment(AssignmentNode assignmentNode)
@@ -352,10 +350,12 @@ public class Generator
EmitStatement(blockDefers[i].Statement);
}
EmitLine(returnNode.Tokens.FirstOrDefault());
_writer.WriteLine($"return {tmp};");
}
else
{
EmitLine(returnNode.Tokens.FirstOrDefault());
_writer.WriteLine($"return {returnValue};");
}
}
@@ -670,6 +670,7 @@ public class Generator
private void EmitBlock(BlockNode blockNode)
{
EmitLine(blockNode.Tokens.FirstOrDefault());
_writer.WriteLine("{");
using (_writer.Indent())
{
@@ -687,6 +688,7 @@ public class Generator
}
}
EmitLine(blockNode.Tokens.LastOrDefault());
_writer.WriteLine("}");
}
}