@@ -1242,16 +1242,37 @@ extension RegexTests {
12421242 parseTest ( #"\k'-3'"# , backreference ( . relative( - 3 ) ) , throwsError: . unsupported)
12431243 parseTest ( #"\k'1'"# , backreference ( . absolute( 1 ) ) , throwsError: . invalid)
12441244
1245- parseTest ( #"\k{a0}"# , backreference ( . named( " a0 " ) ) , throwsError: . unsupported)
1246- parseTest ( #"\k<bc>"# , backreference ( . named( " bc " ) ) , throwsError: . unsupported)
1247- parseTest ( #"\g{abc}"# , backreference ( . named( " abc " ) ) , throwsError: . unsupported)
1248- parseTest ( #"(?P=abc)"# , backreference ( . named( " abc " ) ) , throwsError: . unsupported)
1245+ parseTest (
1246+ #"(?<a>)\k<a>"# , concat (
1247+ namedCapture ( " a " , empty ( ) ) , backreference ( . named( " a " ) )
1248+ ) , captures: [ . named( " a " ) ]
1249+ )
1250+ parseTest (
1251+ #"(?<a>)\k{a}"# , concat (
1252+ namedCapture ( " a " , empty ( ) ) , backreference ( . named( " a " ) )
1253+ ) , captures: [ . named( " a " ) ]
1254+ )
1255+ parseTest (
1256+ #"(?<a>)\g{a}"# , concat (
1257+ namedCapture ( " a " , empty ( ) ) , backreference ( . named( " a " ) )
1258+ ) , captures: [ . named( " a " ) ]
1259+ )
1260+ parseTest (
1261+ #"(?<a>)(?P=a)"# , concat (
1262+ namedCapture ( " a " , empty ( ) ) , backreference ( . named( " a " ) )
1263+ ) , captures: [ . named( " a " ) ]
1264+ )
1265+
1266+ parseTest ( #"\k{a0}"# , backreference ( . named( " a0 " ) ) , throwsError: . invalid)
1267+ parseTest ( #"\k<bc>"# , backreference ( . named( " bc " ) ) , throwsError: . invalid)
1268+ parseTest ( #"\g{abc}"# , backreference ( . named( " abc " ) ) , throwsError: . invalid)
1269+ parseTest ( #"(?P=abc)"# , backreference ( . named( " abc " ) ) , throwsError: . invalid)
12491270
12501271 // Oniguruma recursion levels.
12511272 parseTest ( #"\k<bc-0>"# , backreference ( . named( " bc " ) , recursionLevel: 0 ) , throwsError: . unsupported)
12521273 parseTest ( #"\k<a+0>"# , backreference ( . named( " a " ) , recursionLevel: 0 ) , throwsError: . unsupported)
1253- parseTest ( #"\k<1+1>"# , backreference ( . absolute( 1 ) , recursionLevel: 1 ) , throwsError: . invalid )
1254- parseTest ( #"\k<3-8>"# , backreference ( . absolute( 3 ) , recursionLevel: - 8 ) , throwsError: . invalid )
1274+ parseTest ( #"\k<1+1>"# , backreference ( . absolute( 1 ) , recursionLevel: 1 ) , throwsError: . unsupported )
1275+ parseTest ( #"\k<3-8>"# , backreference ( . absolute( 3 ) , recursionLevel: - 8 ) , throwsError: . unsupported )
12551276 parseTest ( #"\k'-3-8'"# , backreference ( . relative( - 3 ) , recursionLevel: - 8 ) , throwsError: . unsupported)
12561277 parseTest ( #"\k'bc-8'"# , backreference ( . named( " bc " ) , recursionLevel: - 8 ) , throwsError: . unsupported)
12571278 parseTest ( #"\k'+3-8'"# , backreference ( . relative( 3 ) , recursionLevel: - 8 ) , throwsError: . unsupported)
@@ -2167,7 +2188,7 @@ extension RegexTests {
21672188 throwsError: . unsupported
21682189 )
21692190 parseWithDelimitersTest (
2170- #"re'a\k'b0A''"# , concat ( " a " , backreference ( . named( " b0A " ) ) ) , throwsError: . unsupported )
2191+ #"re'a\k'b0A''"# , concat ( " a " , backreference ( . named( " b0A " ) ) ) , throwsError: . invalid )
21712192 parseWithDelimitersTest (
21722193 #"re'\k'+2-1''"# , backreference ( . relative( 2 ) , recursionLevel: - 1 ) ,
21732194 throwsError: . unsupported
@@ -2811,6 +2832,12 @@ extension RegexTests {
28112832 diagnosticTest ( #"(?:)()\2"# , . invalidReference( 2 ) )
28122833 diagnosticTest ( #"(?:)(?:)\2"# , . invalidReference( 2 ) )
28132834
2835+ diagnosticTest ( #"\k<a>"# , . invalidNamedReference( " a " ) )
2836+ diagnosticTest ( #"(?:)\k<a>"# , . invalidNamedReference( " a " ) )
2837+ diagnosticTest ( #"()\k<a>"# , . invalidNamedReference( " a " ) )
2838+ diagnosticTest ( #"()\k<a>()"# , . invalidNamedReference( " a " ) )
2839+ diagnosticTest ( #"(?<b>)\k<a>()"# , . invalidNamedReference( " a " ) )
2840+
28142841 // MARK: Conditionals
28152842
28162843 diagnosticTest ( #"(?(1)a|b|c)"# , . tooManyBranchesInConditional( 3 ) )
0 commit comments