File tree Expand file tree Collapse file tree 2 files changed +32
-2
lines changed
Sources/_StringProcessing Expand file tree Collapse file tree 2 files changed +32
-2
lines changed Original file line number Diff line number Diff line change @@ -117,8 +117,15 @@ extension DSLTree.Atom {
117
117
118
118
case . any:
119
119
// FIXME: Should this be a total ordering?
120
- fatalError (
121
- " unreachable: emitAny() should be called isntead " )
120
+ if opts. semanticLevel == . graphemeCluster {
121
+ return { input, bounds in
122
+ input. index ( after: bounds. lowerBound)
123
+ }
124
+ } else {
125
+ return consumeScalar { _ in
126
+ true
127
+ }
128
+ }
122
129
123
130
case . assertion:
124
131
// TODO: We could handle, should this be total?
Original file line number Diff line number Diff line change @@ -1216,6 +1216,29 @@ class RegexDSLTests: XCTestCase {
1216
1216
}
1217
1217
}
1218
1218
}
1219
+
1220
+ // rdar://96280236
1221
+ func testCharacterClassAnyCrash( ) {
1222
+ let regex = Regex {
1223
+ " { "
1224
+ Capture {
1225
+ OneOrMore {
1226
+ CharacterClass . any. subtracting ( . anyOf( " } " ) )
1227
+ }
1228
+ }
1229
+ " } "
1230
+ }
1231
+
1232
+ func replace( _ template: String ) throws -> String {
1233
+ var b = template
1234
+ while let result = try regex. firstMatch ( in: b) {
1235
+ b. replaceSubrange ( result. range, with: " foo " )
1236
+ }
1237
+ return b
1238
+ }
1239
+
1240
+ XCTAssertEqual ( try replace ( " {bar} " ) , " foo " )
1241
+ }
1219
1242
}
1220
1243
1221
1244
extension Unicode . Scalar {
You can’t perform that action at this time.
0 commit comments