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