@@ -325,21 +325,23 @@ extension RegexTests {
325325 parseTest(#"\070"#, scalar("\u{38}"))
326326 parseTest(#"\07A"#, concat(scalar("\u{7}"), "A"))
327327 parseTest(#"\08"#, concat(scalar("\u{0}"), "8"))
328- parseTest(#"\0707"#, concat( scalar("\u{38}"), "7 "))
328+ parseTest(#"\0707"#, scalar("\u{1C7} "))
329329
330330 parseTest(#"[\0]"#, charClass(scalar_m("\u{0}")))
331331 parseTest(#"[\01]"#, charClass(scalar_m("\u{1}")))
332332 parseTest(#"[\070]"#, charClass(scalar_m("\u{38}")))
333333
334334 parseTest(#"[\07A]"#, charClass(scalar_m("\u{7}"), "A"))
335335 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 }")))
337337
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"))
343345
344346 // We take *up to* the first two valid digits for \x. No valid digits is 0.
345347 parseTest(#"\x"#, scalar("\u{0}"))
@@ -797,11 +799,9 @@ extension RegexTests {
797799 )
798800 }
799801
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)))
805805 parseTest(#"\91"#, backreference(.absolute(91)))
806806
807807 parseTest(
@@ -813,21 +813,22 @@ extension RegexTests {
813813 parseTest(
814814 #"()()()()()()()()()\10()"#,
815815 concat(Array(repeating: capture(empty()), count: 9)
816- + [scalar("\u{8}" ), capture(empty())]),
816+ + [backreference(.absolute(10) ), capture(empty())]),
817817 captures: .tuple(Array(repeating: .atom(), count: 10))
818818 )
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+ )
822823
823824 // A capture of three empty captures.
824825 let fourCaptures = capture(
825826 concat(capture(empty()), capture(empty()), capture(empty()))
826827 )
827828 parseTest(
828829 // 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) )),
831832 captures: .tuple(Array(repeating: .atom(), count: 9))
832833 )
833834 parseTest(
@@ -852,7 +853,7 @@ extension RegexTests {
852853 concat(Array(repeating: capture(empty()), count: 40) + [scalar(" ")]),
853854 captures: .tuple(Array(repeating: .atom(), count: 40))
854855 )
855- parseTest(#"\40"#, scalar(" " ))
856+ parseTest(#"\40"#, backreference(.absolute(40) ))
856857 parseTest(
857858 String(repeating: "()", count: 40) + #"\40"#,
858859 concat(Array(repeating: capture(empty()), count: 40)
@@ -862,7 +863,7 @@ extension RegexTests {
862863
863864 parseTest(#"\7"#, backreference(.absolute(7)))
864865
865- parseTest(#"\11"#, scalar("\u{9}" ))
866+ parseTest(#"\11"#, backreference(.absolute(11) ))
866867 parseTest(
867868 String(repeating: "()", count: 11) + #"\11"#,
868869 concat(Array(repeating: capture(empty()), count: 11)
@@ -876,12 +877,11 @@ extension RegexTests {
876877 captures: .tuple(Array(repeating: .atom(), count: 11))
877878 )
878879
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) ))
882883 parseTest(#"\81"#, backreference(.absolute(81)))
883884
884-
885885 parseTest(#"\g1"#, backreference(.absolute(1)))
886886 parseTest(#"\g001"#, backreference(.absolute(1)))
887887 parseTest(#"\g52"#, backreference(.absolute(52)))
0 commit comments