File tree 2 files changed +32
-2
lines changed
Sources/_StringProcessing 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 @@ -1237,6 +1237,29 @@ class RegexDSLTests: XCTestCase {
1237
1237
}
1238
1238
}
1239
1239
}
1240
+
1241
+ // rdar://96280236
1242
+ func testCharacterClassAnyCrash( ) {
1243
+ let regex = Regex {
1244
+ " { "
1245
+ Capture {
1246
+ OneOrMore {
1247
+ CharacterClass . any. subtracting ( . anyOf( " } " ) )
1248
+ }
1249
+ }
1250
+ " } "
1251
+ }
1252
+
1253
+ func replace( _ template: String ) throws -> String {
1254
+ var b = template
1255
+ while let result = try regex. firstMatch ( in: b) {
1256
+ b. replaceSubrange ( result. range, with: " foo " )
1257
+ }
1258
+ return b
1259
+ }
1260
+
1261
+ XCTAssertEqual ( try replace ( " {bar} " ) , " foo " )
1262
+ }
1240
1263
}
1241
1264
1242
1265
extension Unicode . Scalar {
You can’t perform that action at this time.
0 commit comments