Skip to content

Commit eb1f505

Browse files
committed
more refactoring
1 parent a7c09b7 commit eb1f505

File tree

1 file changed

+24
-18
lines changed

1 file changed

+24
-18
lines changed

Sources/_StringProcessing/Engine/MEQuantify.swift

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -60,31 +60,36 @@ extension Processor {
6060
trips += 1
6161
}
6262

63-
var savePoint = startQuantifierSavePoint(
64-
isScalarSemantics: payload.isScalarSemantics
65-
)
63+
if maxExtraTrips == 0 {
64+
// We're done
65+
return true
66+
}
67+
68+
guard let next = _doQuantifyMatch(payload) else {
69+
return true
70+
}
71+
maxExtraTrips = maxExtraTrips.map { $0 - 1 }
72+
73+
// Remember the range of valid positions in case we can create a quantified
74+
// save point
75+
let rangeStart = currentPosition
76+
var rangeEnd = currentPosition
77+
currentPosition = next
78+
6679
while true {
6780
if maxExtraTrips == 0 { break }
68-
maxExtraTrips = maxExtraTrips.map({$0 - 1})
69-
if payload.quantKind == .eager {
70-
savePoint.updateRange(newEnd: currentPosition)
71-
}
7281

73-
let next = _doQuantifyMatch(payload)
74-
guard let idx = next else {
75-
if savePoint.isQuantified {
76-
// The last save point has saved the current, non-matching position,
77-
// so it's unneeded.
78-
savePoint.shrinkRange(input)
79-
}
82+
guard let next = _doQuantifyMatch(payload) else {
8083
break
8184
}
82-
currentPosition = idx
83-
trips += 1
85+
maxExtraTrips = maxExtraTrips.map({$0 - 1})
86+
rangeEnd = currentPosition
87+
currentPosition = next
8488
}
8589

86-
if savePoint.isQuantified {
87-
savePoints.append(savePoint)
90+
if payload.quantKind == .eager {
91+
savePoints.append(makeQuantifiedSavePoint(
92+
rangeStart..<rangeEnd, isScalarSemantics: payload.isScalarSemantics))
8893
}
8994
return true
9095
}
@@ -110,6 +115,7 @@ extension Processor {
110115
// to the final position.
111116
let rangeStart = currentPosition
112117
var rangeEnd = currentPosition
118+
currentPosition = next
113119
while true {
114120
guard let next = _doQuantifyMatch(payload) else { break }
115121
rangeEnd = currentPosition

0 commit comments

Comments
 (0)