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 {
117117
118118 case . any:
119119 // 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+ }
122129
123130 case . assertion:
124131 // 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 {
12371237 }
12381238 }
12391239 }
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+ }
12401263}
12411264
12421265extension Unicode . Scalar {
You can’t perform that action at this time.
0 commit comments