@@ -325,21 +325,23 @@ extension RegexTests {
325
325
parseTest ( #"\070"# , scalar ( " \u{38} " ) )
326
326
parseTest ( #"\07A"# , concat ( scalar ( " \u{7} " ) , " A " ) )
327
327
parseTest ( #"\08"# , concat ( scalar ( " \u{0} " ) , " 8 " ) )
328
- parseTest ( #"\0707"# , concat ( scalar ( " \u{38} " ) , " 7 " ) )
328
+ parseTest ( #"\0707"# , scalar ( " \u{1C7} " ) )
329
329
330
330
parseTest ( #"[\0]"# , charClass ( scalar_m ( " \u{0} " ) ) )
331
331
parseTest ( #"[\01]"# , charClass ( scalar_m ( " \u{1} " ) ) )
332
332
parseTest ( #"[\070]"# , charClass ( scalar_m ( " \u{38} " ) ) )
333
333
334
334
parseTest ( #"[\07A]"# , charClass ( scalar_m ( " \u{7} " ) , " A " ) )
335
335
parseTest ( #"[\08]"# , charClass ( scalar_m ( " \u{0} " ) , " 8 " ) )
336
- parseTest ( #"[\0707]"# , charClass ( scalar_m ( " \u{38 } " ) , " 7 " ) )
336
+ parseTest ( #"[\0707]"# , charClass ( scalar_m ( " \u{1C7 } " ) ) )
337
337
338
- parseTest ( #"[\1]"# , charClass ( scalar_m ( " \u{1} " ) ) )
339
- parseTest ( #"[\123]"# , charClass ( scalar_m ( " \u{53} " ) ) )
340
- parseTest ( #"[\101]"# , charClass ( scalar_m ( " \u{41} " ) ) )
341
- parseTest ( #"[\7777]"# , charClass ( scalar_m ( " \u{1FF} " ) , " 7 " ) )
342
- parseTest ( #"[\181]"# , charClass ( scalar_m ( " \u{1} " ) , " 8 " , " 1 " ) )
338
+ // TODO: These are treated as octal sequences by PCRE, we should warn and
339
+ // suggest user prefix with 0.
340
+ parseTest ( #"[\1]"# , charClass ( " 1 " ) )
341
+ parseTest ( #"[\123]"# , charClass ( " 1 " , " 2 " , " 3 " ) )
342
+ parseTest ( #"[\101]"# , charClass ( " 1 " , " 0 " , " 1 " ) )
343
+ parseTest ( #"[\7777]"# , charClass ( " 7 " , " 7 " , " 7 " , " 7 " ) )
344
+ parseTest ( #"[\181]"# , charClass ( " 1 " , " 8 " , " 1 " ) )
343
345
344
346
// We take *up to* the first two valid digits for \x. No valid digits is 0.
345
347
parseTest ( #"\x"# , scalar ( " \u{0} " ) )
@@ -797,11 +799,9 @@ extension RegexTests {
797
799
)
798
800
}
799
801
800
- // TODO: Some of these behaviors are unintuitive, we should likely warn on
801
- // some of them.
802
- parseTest ( #"\10"# , scalar ( " \u{8} " ) )
803
- parseTest ( #"\18"# , concat ( scalar ( " \u{1} " ) , " 8 " ) )
804
- parseTest ( #"\7777"# , concat ( scalar ( " \u{1FF} " ) , " 7 " ) )
802
+ parseTest ( #"\10"# , backreference ( . absolute( 10 ) ) )
803
+ parseTest ( #"\18"# , backreference ( . absolute( 18 ) ) )
804
+ parseTest ( #"\7777"# , backreference ( . absolute( 7777 ) ) )
805
805
parseTest ( #"\91"# , backreference ( . absolute( 91 ) ) )
806
806
807
807
parseTest (
@@ -813,21 +813,22 @@ extension RegexTests {
813
813
parseTest (
814
814
#"()()()()()()()()()\10()"# ,
815
815
concat ( Array ( repeating: capture ( empty ( ) ) , count: 9 )
816
- + [ scalar ( " \u{8} " ) , capture ( empty ( ) ) ] ) ,
816
+ + [ backreference ( . absolute ( 10 ) ) , capture ( empty ( ) ) ] ) ,
817
817
captures: . tuple( Array ( repeating: . atom( ) , count: 10 ) )
818
818
)
819
- parseTest ( #"()()\10"# ,
820
- concat ( capture ( empty ( ) ) , capture ( empty ( ) ) , scalar ( " \u{8} " ) ) ,
821
- captures: . tuple( . atom( ) , . atom( ) ) )
819
+ parseTest ( #"()()\10"# , concat (
820
+ capture ( empty ( ) ) , capture ( empty ( ) ) , backreference ( . absolute( 10 ) ) ) ,
821
+ captures: . tuple( . atom( ) , . atom( ) )
822
+ )
822
823
823
824
// A capture of three empty captures.
824
825
let fourCaptures = capture (
825
826
concat ( capture ( empty ( ) ) , capture ( empty ( ) ) , capture ( empty ( ) ) )
826
827
)
827
828
parseTest (
828
829
// There are 9 capture groups in total here.
829
- #"((()()())(()()()))\10"# ,
830
- concat ( capture ( concat ( fourCaptures, fourCaptures) ) , scalar ( " \u{8} " ) ) ,
830
+ #"((()()())(()()()))\10"# , concat ( capture ( concat (
831
+ fourCaptures, fourCaptures) ) , backreference ( . absolute ( 10 ) ) ) ,
831
832
captures: . tuple( Array ( repeating: . atom( ) , count: 9 ) )
832
833
)
833
834
parseTest (
@@ -852,7 +853,7 @@ extension RegexTests {
852
853
concat ( Array ( repeating: capture ( empty ( ) ) , count: 40 ) + [ scalar ( " " ) ] ) ,
853
854
captures: . tuple( Array ( repeating: . atom( ) , count: 40 ) )
854
855
)
855
- parseTest ( #"\40"# , scalar ( " " ) )
856
+ parseTest ( #"\40"# , backreference ( . absolute ( 40 ) ) )
856
857
parseTest (
857
858
String ( repeating: " () " , count: 40 ) + #"\40"# ,
858
859
concat ( Array ( repeating: capture ( empty ( ) ) , count: 40 )
@@ -862,7 +863,7 @@ extension RegexTests {
862
863
863
864
parseTest ( #"\7"# , backreference ( . absolute( 7 ) ) )
864
865
865
- parseTest ( #"\11"# , scalar ( " \u{9} " ) )
866
+ parseTest ( #"\11"# , backreference ( . absolute ( 11 ) ) )
866
867
parseTest (
867
868
String ( repeating: " () " , count: 11 ) + #"\11"# ,
868
869
concat ( Array ( repeating: capture ( empty ( ) ) , count: 11 )
@@ -876,12 +877,11 @@ extension RegexTests {
876
877
captures: . tuple( Array ( repeating: . atom( ) , count: 11 ) )
877
878
)
878
879
879
- parseTest ( #"\0113"# , concat ( scalar ( " \u{9} " ) , " 3 " ) )
880
- parseTest ( #"\113"# , scalar ( " \u{4B} " ) )
881
- parseTest ( #"\377"# , scalar ( " \u{FF} " ) )
880
+ parseTest ( #"\0113"# , scalar ( " \u{4B} " ) )
881
+ parseTest ( #"\113"# , backreference ( . absolute ( 113 ) ) )
882
+ parseTest ( #"\377"# , backreference ( . absolute ( 377 ) ) )
882
883
parseTest ( #"\81"# , backreference ( . absolute( 81 ) ) )
883
884
884
-
885
885
parseTest ( #"\g1"# , backreference ( . absolute( 1 ) ) )
886
886
parseTest ( #"\g001"# , backreference ( . absolute( 1 ) ) )
887
887
parseTest ( #"\g52"# , backreference ( . absolute( 52 ) ) )
0 commit comments