defers
This commit is contained in:
@@ -498,6 +498,9 @@ public class QBEGenerator
|
||||
EmitScopeCleanup();
|
||||
_writer.Indented($"jmp {_continueLabels.Peek()}");
|
||||
break;
|
||||
case DeferNode defer:
|
||||
Scope.Defers.Push(defer);
|
||||
break;
|
||||
case IfNode ifStatement:
|
||||
EmitIf(ifStatement);
|
||||
break;
|
||||
@@ -523,6 +526,11 @@ public class QBEGenerator
|
||||
|
||||
private void EmitScopeCleanup()
|
||||
{
|
||||
while (Scope.Defers.TryPop(out var defer))
|
||||
{
|
||||
EmitStatement(defer.Statement);
|
||||
}
|
||||
|
||||
while (Scope.Variables.TryPop(out var variable))
|
||||
{
|
||||
if (variable.Type is NubStructType structType)
|
||||
@@ -1283,6 +1291,7 @@ public class QBEGenerator
|
||||
public class Scope
|
||||
{
|
||||
public readonly Stack<Variable> Variables = [];
|
||||
public readonly Stack<DeferNode> Defers = [];
|
||||
}
|
||||
|
||||
public record Variable(string Name, NubType Type);
|
||||
|
||||
Reference in New Issue
Block a user