1515@available ( SwiftStdlib 5 . 7 , * )
1616public struct CharacterClass {
1717 internal var ccc : DSLTree . CustomCharacterClass
18+ /// The builtin character class, if this CharacterClass is representable by one
19+ internal var builtin : DSLTree . Atom . CharacterClass ?
1820
1921 init ( _ ccc: DSLTree . CustomCharacterClass ) {
2022 self . ccc = ccc
23+ self . builtin = nil
2124 }
2225
23- init ( unconverted atom: DSLTree . _AST . Atom ) {
24- self . ccc = . init( members: [ . atom( . unconverted( atom) ) ] )
26+ init ( builtin: DSLTree . Atom . CharacterClass ) {
27+ self . ccc = . init( members: [ . atom( . characterClass( builtin) ) ] )
28+ self . builtin = builtin
2529 }
2630}
2731
2832@available ( SwiftStdlib 5 . 7 , * )
2933extension CharacterClass : RegexComponent {
3034 public var regex : Regex < Substring > {
31- _RegexFactory ( ) . customCharacterClass ( ccc)
35+ if let cc = builtin {
36+ return _RegexFactory ( ) . characterClass ( cc)
37+ } else {
38+ return _RegexFactory ( ) . customCharacterClass ( ccc)
39+ }
3240 }
3341}
3442
3543@available ( SwiftStdlib 5 . 7 , * )
3644extension CharacterClass {
3745 public var inverted : CharacterClass {
38- CharacterClass ( ccc. inverted)
46+ if let inv = builtin? . inverted {
47+ return CharacterClass ( builtin: inv)
48+ } else {
49+ return CharacterClass ( ccc. inverted)
50+ }
3951 }
4052}
4153
@@ -50,15 +62,15 @@ extension RegexComponent where Self == CharacterClass {
5062 }
5163
5264 public static var anyGraphemeCluster : CharacterClass {
53- . init( unconverted : . _anyGrapheme )
65+ . init( builtin : . anyGrapheme )
5466 }
5567
5668 public static var whitespace : CharacterClass {
57- . init( unconverted : . _whitespace )
69+ . init( builtin : . whitespace )
5870 }
5971
6072 public static var digit : CharacterClass {
61- . init( unconverted : . _digit )
73+ . init( builtin : . digit )
6274 }
6375
6476 public static var hexDigit : CharacterClass {
@@ -70,19 +82,19 @@ extension RegexComponent where Self == CharacterClass {
7082 }
7183
7284 public static var horizontalWhitespace : CharacterClass {
73- . init( unconverted : . _horizontalWhitespace )
85+ . init( builtin : . horizontalWhitespace )
7486 }
7587
7688 public static var newlineSequence : CharacterClass {
77- . init( unconverted : . _newlineSequence )
89+ . init( builtin : . newlineSequence )
7890 }
7991
8092 public static var verticalWhitespace : CharacterClass {
81- . init( unconverted : . _verticalWhitespace )
93+ . init( builtin : . verticalWhitespace )
8294 }
8395
8496 public static var word : CharacterClass {
85- . init( unconverted : . _word )
97+ . init( builtin : . word )
8698 }
8799}
88100
0 commit comments