diff --git a/Src/CSharpier.Core/DocPrinter/PropagateBreaks.cs b/Src/CSharpier.Core/DocPrinter/PropagateBreaks.cs index e036ed204..24d2a0189 100644 --- a/Src/CSharpier.Core/DocPrinter/PropagateBreaks.cs +++ b/Src/CSharpier.Core/DocPrinter/PropagateBreaks.cs @@ -1,3 +1,4 @@ +using System.Runtime.CompilerServices; using CSharpier.Core.DocTypes; namespace CSharpier.Core.DocPrinter; @@ -27,6 +28,7 @@ void BreakParentGroup() } } + [MethodImpl(MethodImplOptions.AggressiveInlining)] bool OnEnter(Doc doc) { if (doc is ForceFlat) @@ -87,22 +89,23 @@ void OnExit(Doc doc) docsStack.Push(document); while (docsStack.Count > 0) { - var doc = docsStack.Pop(); + var doc = docsStack.Peek(); if (doc == TraverseDocOnExitStackMarker) { + docsStack.Pop(); OnExit(docsStack.Pop()); continue; } - docsStack.Push(doc); - docsStack.Push(TraverseDocOnExitStackMarker); - if (!OnEnter(doc)) { + OnExit(docsStack.Pop()); continue; } + docsStack.Push(TraverseDocOnExitStackMarker); + if (doc is Concat concat) { // push onto stack in reverse order so they are processed in the original order