From 1923ed5a780be76dc5220e06806acff06e64adc2 Mon Sep 17 00:00:00 2001 From: nub31 Date: Wed, 5 Nov 2025 18:56:34 +0100 Subject: [PATCH] ... --- .../NubLang/Generation/LlvmSharpGenerator.cs | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/compiler/NubLang/Generation/LlvmSharpGenerator.cs b/compiler/NubLang/Generation/LlvmSharpGenerator.cs index 19a8bf2..39262ba 100644 --- a/compiler/NubLang/Generation/LlvmSharpGenerator.cs +++ b/compiler/NubLang/Generation/LlvmSharpGenerator.cs @@ -168,7 +168,7 @@ public class LlvmSharpGenerator EmitContinue(); break; case DeferNode deferNode: - CurrentScope.Defer(() => EmitStatement(deferNode.Statement)); + CurrentScope.DeferredActions.Push(() => EmitStatement(deferNode.Statement)); break; case ForConstArrayNode forConstArrayNode: throw new NotImplementedException(); @@ -201,12 +201,14 @@ public class LlvmSharpGenerator _builder.BuildStore(value, targetPtr); } + // todo(nub31): Needs to call EmitScopeExit. However, the jump might span multiple scopes, so we must handle that private void EmitBreak() { var (breakBlock, _) = _loopStack.Peek(); _builder.BuildBr(breakBlock); } + // todo(nub31): Needs to call EmitScopeExit. However, the jump might span multiple scopes, so we must handle that private void EmitContinue() { var (_, continueBlock) = _loopStack.Peek(); @@ -766,8 +768,7 @@ public class LlvmSharpGenerator private void EmitScopeExit() { - var deferredActions = CurrentScope.GetDeferredActions(); - while (deferredActions.TryPop(out var action)) + while (CurrentScope.DeferredActions.TryPop(out var action)) { action.Invoke(); } @@ -775,16 +776,6 @@ public class LlvmSharpGenerator private class Scope { - private readonly Stack _deferredActions = []; - - public Stack GetDeferredActions() - { - return _deferredActions; - } - - public void Defer(Action action) - { - _deferredActions.Push(action); - } + public readonly Stack DeferredActions = []; } } \ No newline at end of file