From ed4ffde64e57c555d3f3fb3aa887eaeab66597de Mon Sep 17 00:00:00 2001 From: Aadhavan Srinivasan Date: Wed, 5 Feb 2025 22:51:55 -0500 Subject: [PATCH] REFACTOR NEEDED: Added another special case; insert instead of appending into currentStates --- regex/matching.go | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/regex/matching.go b/regex/matching.go index d504801..95f7a69 100644 --- a/regex/matching.go +++ b/regex/matching.go @@ -379,17 +379,17 @@ func findAllSubmatchHelper(start *nfaState, str []rune, offset int, numGroups in if currentState.isKleene { // Reverse order of adding things rightState := currentState.splitState copyThread(rightState, currentState) - currentStates = append(currentStates, *currentState.splitState) + currentStates = slices.Insert(currentStates, currentStateIdx+1, *rightState) leftState := currentState.next copyThread(leftState, currentState) - currentStates = append(currentStates, *currentState.next) + currentStates = slices.Insert(currentStates, currentStateIdx+2, *leftState) } else { leftState := currentState.next copyThread(leftState, currentState) - currentStates = append(currentStates, *currentState.next) + currentStates = slices.Insert(currentStates, currentStateIdx+1, *leftState) rightState := currentState.splitState copyThread(rightState, currentState) - currentStates = append(currentStates, *currentState.splitState) + currentStates = slices.Insert(currentStates, currentStateIdx+2, *rightState) } continue } @@ -417,6 +417,8 @@ func findAllSubmatchHelper(start *nfaState, str []rune, offset int, numGroups in currentStates = slices.Insert(currentStates, currentStateIdx+1, allMatches...) } else if currentState.groupEnd { currentStates = append(currentStates, allMatches...) + } else if currentState.assert != noneAssert { + currentStates = append(currentStates, allMatches...) } else { nextStates = append(nextStates, allMatches...) }