1*22dc650dSSadaf Ebrahimi# These are: 2*22dc650dSSadaf Ebrahimi# 3*22dc650dSSadaf Ebrahimi# (1) Tests of the match-limiting features. The results are different for 4*22dc650dSSadaf Ebrahimi# interpretive or JIT matching, so this test should not be run with JIT. The 5*22dc650dSSadaf Ebrahimi# same tests are run using JIT in test 17. 6*22dc650dSSadaf Ebrahimi 7*22dc650dSSadaf Ebrahimi# (2) Other tests that must not be run with JIT. 8*22dc650dSSadaf Ebrahimi 9*22dc650dSSadaf Ebrahimi# These tests are first so that they don't inherit a large enough heap frame 10*22dc650dSSadaf Ebrahimi# vector from a previous test. 11*22dc650dSSadaf Ebrahimi 12*22dc650dSSadaf Ebrahimi/(*LIMIT_HEAP=21)\[(a)]{60}/expand 13*22dc650dSSadaf Ebrahimi \[a]{60} 14*22dc650dSSadaf EbrahimiFailed: error -63: heap limit exceeded 15*22dc650dSSadaf Ebrahimi 16*22dc650dSSadaf Ebrahimi"(*LIMIT_HEAP=21)()((?))()()()()()()()()()()()()()()()()()()()()()()()(())()()()()()()()()()()()()()()()()()()()()()(())()()()()()()()()()()()()()" 17*22dc650dSSadaf Ebrahimi xx 18*22dc650dSSadaf EbrahimiFailed: error -63: heap limit exceeded 19*22dc650dSSadaf Ebrahimi 20*22dc650dSSadaf Ebrahimi# ----------------------------------------------------------------------- 21*22dc650dSSadaf Ebrahimi 22*22dc650dSSadaf Ebrahimi/(a+)*zz/I 23*22dc650dSSadaf EbrahimiCapture group count = 1 24*22dc650dSSadaf EbrahimiStarting code units: a z 25*22dc650dSSadaf EbrahimiLast code unit = 'z' 26*22dc650dSSadaf EbrahimiSubject length lower bound = 2 27*22dc650dSSadaf Ebrahimi aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazzbbbbbb\=find_limits_noheap 28*22dc650dSSadaf EbrahimiMinimum match limit = 7 29*22dc650dSSadaf EbrahimiMinimum depth limit = 7 30*22dc650dSSadaf Ebrahimi 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazz 31*22dc650dSSadaf Ebrahimi 1: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 32*22dc650dSSadaf Ebrahimi aaaaaaaaaaaaaz\=find_limits_noheap 33*22dc650dSSadaf EbrahimiMinimum match limit = 20481 34*22dc650dSSadaf EbrahimiMinimum depth limit = 30 35*22dc650dSSadaf EbrahimiNo match 36*22dc650dSSadaf Ebrahimi 37*22dc650dSSadaf Ebrahimi!((?:\s|//.*\\n|/[*](?:\\n|.)*?[*]/)*)!I 38*22dc650dSSadaf EbrahimiCapture group count = 1 39*22dc650dSSadaf EbrahimiMay match empty string 40*22dc650dSSadaf EbrahimiSubject length lower bound = 0 41*22dc650dSSadaf Ebrahimi /* this is a C style comment */\=find_limits_noheap 42*22dc650dSSadaf EbrahimiMinimum match limit = 64 43*22dc650dSSadaf EbrahimiMinimum depth limit = 7 44*22dc650dSSadaf Ebrahimi 0: /* this is a C style comment */ 45*22dc650dSSadaf Ebrahimi 1: /* this is a C style comment */ 46*22dc650dSSadaf Ebrahimi 47*22dc650dSSadaf Ebrahimi/^(?>a)++/ 48*22dc650dSSadaf Ebrahimi aa\=find_limits_noheap 49*22dc650dSSadaf EbrahimiMinimum match limit = 5 50*22dc650dSSadaf EbrahimiMinimum depth limit = 3 51*22dc650dSSadaf Ebrahimi 0: aa 52*22dc650dSSadaf Ebrahimi aaaaaaaaa\=find_limits_noheap 53*22dc650dSSadaf EbrahimiMinimum match limit = 12 54*22dc650dSSadaf EbrahimiMinimum depth limit = 3 55*22dc650dSSadaf Ebrahimi 0: aaaaaaaaa 56*22dc650dSSadaf Ebrahimi 57*22dc650dSSadaf Ebrahimi/(a)(?1)++/ 58*22dc650dSSadaf Ebrahimi aa\=find_limits_noheap 59*22dc650dSSadaf EbrahimiMinimum match limit = 7 60*22dc650dSSadaf EbrahimiMinimum depth limit = 5 61*22dc650dSSadaf Ebrahimi 0: aa 62*22dc650dSSadaf Ebrahimi 1: a 63*22dc650dSSadaf Ebrahimi aaaaaaaaa\=find_limits_noheap 64*22dc650dSSadaf EbrahimiMinimum match limit = 21 65*22dc650dSSadaf EbrahimiMinimum depth limit = 5 66*22dc650dSSadaf Ebrahimi 0: aaaaaaaaa 67*22dc650dSSadaf Ebrahimi 1: a 68*22dc650dSSadaf Ebrahimi 69*22dc650dSSadaf Ebrahimi/a(?:.)*?a/ims 70*22dc650dSSadaf Ebrahimi abbbbbbbbbbbbbbbbbbbbba\=find_limits_noheap 71*22dc650dSSadaf EbrahimiMinimum match limit = 24 72*22dc650dSSadaf EbrahimiMinimum depth limit = 3 73*22dc650dSSadaf Ebrahimi 0: abbbbbbbbbbbbbbbbbbbbba 74*22dc650dSSadaf Ebrahimi 75*22dc650dSSadaf Ebrahimi/a(?:.(*THEN))*?a/ims 76*22dc650dSSadaf Ebrahimi abbbbbbbbbbbbbbbbbbbbba\=find_limits_noheap 77*22dc650dSSadaf EbrahimiMinimum match limit = 66 78*22dc650dSSadaf EbrahimiMinimum depth limit = 45 79*22dc650dSSadaf Ebrahimi 0: abbbbbbbbbbbbbbbbbbbbba 80*22dc650dSSadaf Ebrahimi 81*22dc650dSSadaf Ebrahimi/a(?:.(*THEN:ABC))*?a/ims 82*22dc650dSSadaf Ebrahimi abbbbbbbbbbbbbbbbbbbbba\=find_limits_noheap 83*22dc650dSSadaf EbrahimiMinimum match limit = 66 84*22dc650dSSadaf EbrahimiMinimum depth limit = 45 85*22dc650dSSadaf Ebrahimi 0: abbbbbbbbbbbbbbbbbbbbba 86*22dc650dSSadaf Ebrahimi 87*22dc650dSSadaf Ebrahimi/^(?>a+)(?>b+)(?>c+)(?>d+)(?>e+)/ 88*22dc650dSSadaf Ebrahimi aabbccddee\=find_limits_noheap 89*22dc650dSSadaf EbrahimiMinimum match limit = 7 90*22dc650dSSadaf EbrahimiMinimum depth limit = 7 91*22dc650dSSadaf Ebrahimi 0: aabbccddee 92*22dc650dSSadaf Ebrahimi 93*22dc650dSSadaf Ebrahimi/^(?>(a+))(?>(b+))(?>(c+))(?>(d+))(?>(e+))/ 94*22dc650dSSadaf Ebrahimi aabbccddee\=find_limits_noheap 95*22dc650dSSadaf EbrahimiMinimum match limit = 12 96*22dc650dSSadaf EbrahimiMinimum depth limit = 12 97*22dc650dSSadaf Ebrahimi 0: aabbccddee 98*22dc650dSSadaf Ebrahimi 1: aa 99*22dc650dSSadaf Ebrahimi 2: bb 100*22dc650dSSadaf Ebrahimi 3: cc 101*22dc650dSSadaf Ebrahimi 4: dd 102*22dc650dSSadaf Ebrahimi 5: ee 103*22dc650dSSadaf Ebrahimi 104*22dc650dSSadaf Ebrahimi/^(?>(a+))(?>b+)(?>(c+))(?>d+)(?>(e+))/ 105*22dc650dSSadaf Ebrahimi aabbccddee\=find_limits_noheap 106*22dc650dSSadaf EbrahimiMinimum match limit = 10 107*22dc650dSSadaf EbrahimiMinimum depth limit = 10 108*22dc650dSSadaf Ebrahimi 0: aabbccddee 109*22dc650dSSadaf Ebrahimi 1: aa 110*22dc650dSSadaf Ebrahimi 2: cc 111*22dc650dSSadaf Ebrahimi 3: ee 112*22dc650dSSadaf Ebrahimi 113*22dc650dSSadaf Ebrahimi/(*LIMIT_MATCH=12bc)abc/ 114*22dc650dSSadaf EbrahimiFailed: error 160 at offset 17: (*VERB) not recognized or malformed 115*22dc650dSSadaf Ebrahimi 116*22dc650dSSadaf Ebrahimi/(*LIMIT_MATCH=4294967290)abc/ 117*22dc650dSSadaf EbrahimiFailed: error 160 at offset 24: (*VERB) not recognized or malformed 118*22dc650dSSadaf Ebrahimi 119*22dc650dSSadaf Ebrahimi/(*LIMIT_DEPTH=4294967280)abc/I 120*22dc650dSSadaf EbrahimiCapture group count = 0 121*22dc650dSSadaf EbrahimiDepth limit = 4294967280 122*22dc650dSSadaf EbrahimiFirst code unit = 'a' 123*22dc650dSSadaf EbrahimiLast code unit = 'c' 124*22dc650dSSadaf EbrahimiSubject length lower bound = 3 125*22dc650dSSadaf Ebrahimi 126*22dc650dSSadaf Ebrahimi/(a+)*zz/ 127*22dc650dSSadaf Ebrahimi\= Expect no match 128*22dc650dSSadaf Ebrahimi aaaaaaaaaaaaaz 129*22dc650dSSadaf EbrahimiNo match 130*22dc650dSSadaf Ebrahimi\= Expect limit exceeded 131*22dc650dSSadaf Ebrahimi aaaaaaaaaaaaaz\=match_limit=3000 132*22dc650dSSadaf EbrahimiFailed: error -47: match limit exceeded 133*22dc650dSSadaf Ebrahimi 134*22dc650dSSadaf Ebrahimi/(a+)*zz/ 135*22dc650dSSadaf Ebrahimi\= Expect limit exceeded 136*22dc650dSSadaf Ebrahimi aaaaaaaaaaaaaz\=depth_limit=10 137*22dc650dSSadaf EbrahimiFailed: error -53: matching depth limit exceeded 138*22dc650dSSadaf Ebrahimi 139*22dc650dSSadaf Ebrahimi/(*LIMIT_MATCH=3000)(a+)*zz/I 140*22dc650dSSadaf EbrahimiCapture group count = 1 141*22dc650dSSadaf EbrahimiMatch limit = 3000 142*22dc650dSSadaf EbrahimiStarting code units: a z 143*22dc650dSSadaf EbrahimiLast code unit = 'z' 144*22dc650dSSadaf EbrahimiSubject length lower bound = 2 145*22dc650dSSadaf Ebrahimi\= Expect limit exceeded 146*22dc650dSSadaf Ebrahimi aaaaaaaaaaaaaz 147*22dc650dSSadaf EbrahimiFailed: error -47: match limit exceeded 148*22dc650dSSadaf Ebrahimi\= Expect limit exceeded 149*22dc650dSSadaf Ebrahimi aaaaaaaaaaaaaz\=match_limit=60000 150*22dc650dSSadaf EbrahimiFailed: error -47: match limit exceeded 151*22dc650dSSadaf Ebrahimi 152*22dc650dSSadaf Ebrahimi/(*LIMIT_MATCH=60000)(*LIMIT_MATCH=3000)(a+)*zz/I 153*22dc650dSSadaf EbrahimiCapture group count = 1 154*22dc650dSSadaf EbrahimiMatch limit = 3000 155*22dc650dSSadaf EbrahimiStarting code units: a z 156*22dc650dSSadaf EbrahimiLast code unit = 'z' 157*22dc650dSSadaf EbrahimiSubject length lower bound = 2 158*22dc650dSSadaf Ebrahimi\= Expect limit exceeded 159*22dc650dSSadaf Ebrahimi aaaaaaaaaaaaaz 160*22dc650dSSadaf EbrahimiFailed: error -47: match limit exceeded 161*22dc650dSSadaf Ebrahimi 162*22dc650dSSadaf Ebrahimi/(*LIMIT_MATCH=60000)(a+)*zz/I 163*22dc650dSSadaf EbrahimiCapture group count = 1 164*22dc650dSSadaf EbrahimiMatch limit = 60000 165*22dc650dSSadaf EbrahimiStarting code units: a z 166*22dc650dSSadaf EbrahimiLast code unit = 'z' 167*22dc650dSSadaf EbrahimiSubject length lower bound = 2 168*22dc650dSSadaf Ebrahimi\= Expect no match 169*22dc650dSSadaf Ebrahimi aaaaaaaaaaaaaz 170*22dc650dSSadaf EbrahimiNo match 171*22dc650dSSadaf Ebrahimi\= Expect limit exceeded 172*22dc650dSSadaf Ebrahimi aaaaaaaaaaaaaz\=match_limit=3000 173*22dc650dSSadaf EbrahimiFailed: error -47: match limit exceeded 174*22dc650dSSadaf Ebrahimi 175*22dc650dSSadaf Ebrahimi/(*LIMIT_DEPTH=10)(a+)*zz/I 176*22dc650dSSadaf EbrahimiCapture group count = 1 177*22dc650dSSadaf EbrahimiDepth limit = 10 178*22dc650dSSadaf EbrahimiStarting code units: a z 179*22dc650dSSadaf EbrahimiLast code unit = 'z' 180*22dc650dSSadaf EbrahimiSubject length lower bound = 2 181*22dc650dSSadaf Ebrahimi\= Expect limit exceeded 182*22dc650dSSadaf Ebrahimi aaaaaaaaaaaaaz 183*22dc650dSSadaf EbrahimiFailed: error -53: matching depth limit exceeded 184*22dc650dSSadaf Ebrahimi\= Expect limit exceeded 185*22dc650dSSadaf Ebrahimi aaaaaaaaaaaaaz\=depth_limit=1000 186*22dc650dSSadaf EbrahimiFailed: error -53: matching depth limit exceeded 187*22dc650dSSadaf Ebrahimi 188*22dc650dSSadaf Ebrahimi/(*LIMIT_DEPTH=10)(*LIMIT_DEPTH=1000)(a+)*zz/I 189*22dc650dSSadaf EbrahimiCapture group count = 1 190*22dc650dSSadaf EbrahimiDepth limit = 1000 191*22dc650dSSadaf EbrahimiStarting code units: a z 192*22dc650dSSadaf EbrahimiLast code unit = 'z' 193*22dc650dSSadaf EbrahimiSubject length lower bound = 2 194*22dc650dSSadaf Ebrahimi\= Expect no match 195*22dc650dSSadaf Ebrahimi aaaaaaaaaaaaaz 196*22dc650dSSadaf EbrahimiNo match 197*22dc650dSSadaf Ebrahimi 198*22dc650dSSadaf Ebrahimi/(*LIMIT_DEPTH=1000)(a+)*zz/I 199*22dc650dSSadaf EbrahimiCapture group count = 1 200*22dc650dSSadaf EbrahimiDepth limit = 1000 201*22dc650dSSadaf EbrahimiStarting code units: a z 202*22dc650dSSadaf EbrahimiLast code unit = 'z' 203*22dc650dSSadaf EbrahimiSubject length lower bound = 2 204*22dc650dSSadaf Ebrahimi\= Expect no match 205*22dc650dSSadaf Ebrahimi aaaaaaaaaaaaaz 206*22dc650dSSadaf EbrahimiNo match 207*22dc650dSSadaf Ebrahimi\= Expect limit exceeded 208*22dc650dSSadaf Ebrahimi aaaaaaaaaaaaaz\=depth_limit=10 209*22dc650dSSadaf EbrahimiFailed: error -53: matching depth limit exceeded 210*22dc650dSSadaf Ebrahimi 211*22dc650dSSadaf Ebrahimi# These three have infinitely nested recursions. 212*22dc650dSSadaf Ebrahimi 213*22dc650dSSadaf Ebrahimi/((?2))((?1))/ 214*22dc650dSSadaf Ebrahimi abc 215*22dc650dSSadaf EbrahimiFailed: error -52: nested recursion at the same subject position 216*22dc650dSSadaf Ebrahimi 217*22dc650dSSadaf Ebrahimi/((?(R2)a+|(?1)b))()/ 218*22dc650dSSadaf Ebrahimi aaaabcde 219*22dc650dSSadaf EbrahimiFailed: error -52: nested recursion at the same subject position 220*22dc650dSSadaf Ebrahimi 221*22dc650dSSadaf Ebrahimi/(?(R)a*(?1)|((?R))b)/ 222*22dc650dSSadaf Ebrahimi aaaabcde 223*22dc650dSSadaf EbrahimiFailed: error -52: nested recursion at the same subject position 224*22dc650dSSadaf Ebrahimi 225*22dc650dSSadaf Ebrahimi# The allusedtext modifier does not work with JIT, which does not maintain 226*22dc650dSSadaf Ebrahimi# the leftchar/rightchar data. 227*22dc650dSSadaf Ebrahimi 228*22dc650dSSadaf Ebrahimi/abc(?=xyz)/allusedtext 229*22dc650dSSadaf Ebrahimi abcxyzpqr 230*22dc650dSSadaf Ebrahimi 0: abcxyz 231*22dc650dSSadaf Ebrahimi >>> 232*22dc650dSSadaf Ebrahimi abcxyzpqr\=aftertext 233*22dc650dSSadaf Ebrahimi 0: abcxyz 234*22dc650dSSadaf Ebrahimi >>> 235*22dc650dSSadaf Ebrahimi 0+ xyzpqr 236*22dc650dSSadaf Ebrahimi 237*22dc650dSSadaf Ebrahimi/(?<=pqr)abc(?=xyz)/allusedtext 238*22dc650dSSadaf Ebrahimi xyzpqrabcxyzpqr 239*22dc650dSSadaf Ebrahimi 0: pqrabcxyz 240*22dc650dSSadaf Ebrahimi <<< >>> 241*22dc650dSSadaf Ebrahimi xyzpqrabcxyzpqr\=aftertext 242*22dc650dSSadaf Ebrahimi 0: pqrabcxyz 243*22dc650dSSadaf Ebrahimi <<< >>> 244*22dc650dSSadaf Ebrahimi 0+ xyzpqr 245*22dc650dSSadaf Ebrahimi 246*22dc650dSSadaf Ebrahimi/a\b/ 247*22dc650dSSadaf Ebrahimi a.\=allusedtext 248*22dc650dSSadaf Ebrahimi 0: a. 249*22dc650dSSadaf Ebrahimi > 250*22dc650dSSadaf Ebrahimi a\=allusedtext 251*22dc650dSSadaf Ebrahimi 0: a 252*22dc650dSSadaf Ebrahimi 253*22dc650dSSadaf Ebrahimi/abc\Kxyz/ 254*22dc650dSSadaf Ebrahimi abcxyz\=allusedtext 255*22dc650dSSadaf Ebrahimi 0: abcxyz 256*22dc650dSSadaf Ebrahimi <<< 257*22dc650dSSadaf Ebrahimi 258*22dc650dSSadaf Ebrahimi/abc(?=xyz(*ACCEPT))/ 259*22dc650dSSadaf Ebrahimi abcxyz\=allusedtext 260*22dc650dSSadaf Ebrahimi 0: abcxyz 261*22dc650dSSadaf Ebrahimi >>> 262*22dc650dSSadaf Ebrahimi 263*22dc650dSSadaf Ebrahimi/abc(?=abcde)(?=ab)/allusedtext 264*22dc650dSSadaf Ebrahimi abcabcdefg 265*22dc650dSSadaf Ebrahimi 0: abcabcde 266*22dc650dSSadaf Ebrahimi >>>>> 267*22dc650dSSadaf Ebrahimi 268*22dc650dSSadaf Ebrahimi#subject allusedtext 269*22dc650dSSadaf Ebrahimi 270*22dc650dSSadaf Ebrahimi/(?<=abc)123/ 271*22dc650dSSadaf Ebrahimi xyzabc123pqr 272*22dc650dSSadaf Ebrahimi 0: abc123 273*22dc650dSSadaf Ebrahimi <<< 274*22dc650dSSadaf Ebrahimi xyzabc12\=ps 275*22dc650dSSadaf EbrahimiPartial match: abc12 276*22dc650dSSadaf Ebrahimi <<< 277*22dc650dSSadaf Ebrahimi xyzabc12\=ph 278*22dc650dSSadaf EbrahimiPartial match: abc12 279*22dc650dSSadaf Ebrahimi <<< 280*22dc650dSSadaf Ebrahimi 281*22dc650dSSadaf Ebrahimi/\babc\b/ 282*22dc650dSSadaf Ebrahimi +++abc+++ 283*22dc650dSSadaf Ebrahimi 0: +abc+ 284*22dc650dSSadaf Ebrahimi < > 285*22dc650dSSadaf Ebrahimi +++ab\=ps 286*22dc650dSSadaf EbrahimiPartial match: +ab 287*22dc650dSSadaf Ebrahimi < 288*22dc650dSSadaf Ebrahimi +++ab\=ph 289*22dc650dSSadaf EbrahimiPartial match: +ab 290*22dc650dSSadaf Ebrahimi < 291*22dc650dSSadaf Ebrahimi 292*22dc650dSSadaf Ebrahimi/(?<=abc)def/ 293*22dc650dSSadaf Ebrahimi abc\=ph 294*22dc650dSSadaf EbrahimiPartial match: abc 295*22dc650dSSadaf Ebrahimi <<< 296*22dc650dSSadaf Ebrahimi 297*22dc650dSSadaf Ebrahimi/(?<=123)(*MARK:xx)abc/mark 298*22dc650dSSadaf Ebrahimi xxxx123a\=ph 299*22dc650dSSadaf EbrahimiPartial match, mark=xx: 123a 300*22dc650dSSadaf Ebrahimi <<< 301*22dc650dSSadaf Ebrahimi xxxx123a\=ps 302*22dc650dSSadaf EbrahimiPartial match, mark=xx: 123a 303*22dc650dSSadaf Ebrahimi <<< 304*22dc650dSSadaf Ebrahimi 305*22dc650dSSadaf Ebrahimi/(?<=(?<=a)b)c.*/I 306*22dc650dSSadaf EbrahimiCapture group count = 0 307*22dc650dSSadaf EbrahimiMax lookbehind = 1 308*22dc650dSSadaf EbrahimiFirst code unit = 'c' 309*22dc650dSSadaf EbrahimiSubject length lower bound = 1 310*22dc650dSSadaf Ebrahimi abc\=ph 311*22dc650dSSadaf EbrahimiPartial match: abc 312*22dc650dSSadaf Ebrahimi << 313*22dc650dSSadaf Ebrahimi\= Expect no match 314*22dc650dSSadaf Ebrahimi xbc\=ph 315*22dc650dSSadaf EbrahimiNo match 316*22dc650dSSadaf Ebrahimi 317*22dc650dSSadaf Ebrahimi/(?<=ab)c.*/I 318*22dc650dSSadaf EbrahimiCapture group count = 0 319*22dc650dSSadaf EbrahimiMax lookbehind = 2 320*22dc650dSSadaf EbrahimiFirst code unit = 'c' 321*22dc650dSSadaf EbrahimiSubject length lower bound = 1 322*22dc650dSSadaf Ebrahimi abc\=ph 323*22dc650dSSadaf EbrahimiPartial match: abc 324*22dc650dSSadaf Ebrahimi << 325*22dc650dSSadaf Ebrahimi\= Expect no match 326*22dc650dSSadaf Ebrahimi xbc\=ph 327*22dc650dSSadaf EbrahimiNo match 328*22dc650dSSadaf Ebrahimi 329*22dc650dSSadaf Ebrahimi/abc(?<=bc)def/ 330*22dc650dSSadaf Ebrahimi xxxabcd\=ph 331*22dc650dSSadaf EbrahimiPartial match: abcd 332*22dc650dSSadaf Ebrahimi 333*22dc650dSSadaf Ebrahimi/(?<=ab)cdef/ 334*22dc650dSSadaf Ebrahimi xxabcd\=ph 335*22dc650dSSadaf EbrahimiPartial match: abcd 336*22dc650dSSadaf Ebrahimi << 337*22dc650dSSadaf Ebrahimi 338*22dc650dSSadaf Ebrahimi/(?<=(?<=(?<=a)b)c)./I 339*22dc650dSSadaf EbrahimiCapture group count = 0 340*22dc650dSSadaf EbrahimiMax lookbehind = 1 341*22dc650dSSadaf EbrahimiSubject length lower bound = 1 342*22dc650dSSadaf Ebrahimi 123abcXYZ 343*22dc650dSSadaf Ebrahimi 0: abcX 344*22dc650dSSadaf Ebrahimi <<< 345*22dc650dSSadaf Ebrahimi 346*22dc650dSSadaf Ebrahimi/(?<=ab(cd(?<=...)))./I 347*22dc650dSSadaf EbrahimiCapture group count = 1 348*22dc650dSSadaf EbrahimiMax lookbehind = 4 349*22dc650dSSadaf EbrahimiSubject length lower bound = 1 350*22dc650dSSadaf Ebrahimi abcdX 351*22dc650dSSadaf Ebrahimi 0: abcdX 352*22dc650dSSadaf Ebrahimi <<<< 353*22dc650dSSadaf Ebrahimi 1: cd 354*22dc650dSSadaf Ebrahimi 355*22dc650dSSadaf Ebrahimi/(?<=ab((?<=...)cd))./I 356*22dc650dSSadaf EbrahimiCapture group count = 1 357*22dc650dSSadaf EbrahimiMax lookbehind = 4 358*22dc650dSSadaf EbrahimiSubject length lower bound = 1 359*22dc650dSSadaf Ebrahimi ZabcdX 360*22dc650dSSadaf Ebrahimi 0: ZabcdX 361*22dc650dSSadaf Ebrahimi <<<<< 362*22dc650dSSadaf Ebrahimi 1: cd 363*22dc650dSSadaf Ebrahimi 364*22dc650dSSadaf Ebrahimi/(?<=((?<=(?<=ab).))(?1)(?1))./I 365*22dc650dSSadaf EbrahimiCapture group count = 1 366*22dc650dSSadaf EbrahimiMax lookbehind = 2 367*22dc650dSSadaf EbrahimiSubject length lower bound = 1 368*22dc650dSSadaf Ebrahimi abxZ 369*22dc650dSSadaf Ebrahimi 0: abxZ 370*22dc650dSSadaf Ebrahimi <<< 371*22dc650dSSadaf Ebrahimi 1: 372*22dc650dSSadaf Ebrahimi 373*22dc650dSSadaf Ebrahimi#subject 374*22dc650dSSadaf Ebrahimi# ------------------------------------------------------------------- 375*22dc650dSSadaf Ebrahimi 376*22dc650dSSadaf Ebrahimi# These tests provoke recursion loops, which give a different error message 377*22dc650dSSadaf Ebrahimi# when JIT is used. 378*22dc650dSSadaf Ebrahimi 379*22dc650dSSadaf Ebrahimi/(?R)/I 380*22dc650dSSadaf EbrahimiCapture group count = 0 381*22dc650dSSadaf EbrahimiMay match empty string 382*22dc650dSSadaf EbrahimiSubject length lower bound = 0 383*22dc650dSSadaf Ebrahimi abcd 384*22dc650dSSadaf EbrahimiFailed: error -52: nested recursion at the same subject position 385*22dc650dSSadaf Ebrahimi 386*22dc650dSSadaf Ebrahimi/(a|(?R))/I 387*22dc650dSSadaf EbrahimiCapture group count = 1 388*22dc650dSSadaf EbrahimiMay match empty string 389*22dc650dSSadaf EbrahimiSubject length lower bound = 0 390*22dc650dSSadaf Ebrahimi abcd 391*22dc650dSSadaf Ebrahimi 0: a 392*22dc650dSSadaf Ebrahimi 1: a 393*22dc650dSSadaf Ebrahimi defg 394*22dc650dSSadaf EbrahimiFailed: error -52: nested recursion at the same subject position 395*22dc650dSSadaf Ebrahimi 396*22dc650dSSadaf Ebrahimi/(ab|(bc|(de|(?R))))/I 397*22dc650dSSadaf EbrahimiCapture group count = 3 398*22dc650dSSadaf EbrahimiMay match empty string 399*22dc650dSSadaf EbrahimiSubject length lower bound = 0 400*22dc650dSSadaf Ebrahimi abcd 401*22dc650dSSadaf Ebrahimi 0: ab 402*22dc650dSSadaf Ebrahimi 1: ab 403*22dc650dSSadaf Ebrahimi fghi 404*22dc650dSSadaf EbrahimiFailed: error -52: nested recursion at the same subject position 405*22dc650dSSadaf Ebrahimi 406*22dc650dSSadaf Ebrahimi/(ab|(bc|(de|(?1))))/I 407*22dc650dSSadaf EbrahimiCapture group count = 3 408*22dc650dSSadaf EbrahimiMay match empty string 409*22dc650dSSadaf EbrahimiSubject length lower bound = 0 410*22dc650dSSadaf Ebrahimi abcd 411*22dc650dSSadaf Ebrahimi 0: ab 412*22dc650dSSadaf Ebrahimi 1: ab 413*22dc650dSSadaf Ebrahimi fghi 414*22dc650dSSadaf EbrahimiFailed: error -52: nested recursion at the same subject position 415*22dc650dSSadaf Ebrahimi 416*22dc650dSSadaf Ebrahimi/x(ab|(bc|(de|(?1)x)x)x)/I 417*22dc650dSSadaf EbrahimiCapture group count = 3 418*22dc650dSSadaf EbrahimiFirst code unit = 'x' 419*22dc650dSSadaf EbrahimiSubject length lower bound = 3 420*22dc650dSSadaf Ebrahimi xab123 421*22dc650dSSadaf Ebrahimi 0: xab 422*22dc650dSSadaf Ebrahimi 1: ab 423*22dc650dSSadaf Ebrahimi xfghi 424*22dc650dSSadaf EbrahimiFailed: error -52: nested recursion at the same subject position 425*22dc650dSSadaf Ebrahimi 426*22dc650dSSadaf Ebrahimi/(?!\w)(?R)/ 427*22dc650dSSadaf Ebrahimi abcd 428*22dc650dSSadaf EbrahimiFailed: error -52: nested recursion at the same subject position 429*22dc650dSSadaf Ebrahimi =abc 430*22dc650dSSadaf EbrahimiFailed: error -52: nested recursion at the same subject position 431*22dc650dSSadaf Ebrahimi 432*22dc650dSSadaf Ebrahimi/(?=\w)(?R)/ 433*22dc650dSSadaf Ebrahimi =abc 434*22dc650dSSadaf EbrahimiFailed: error -52: nested recursion at the same subject position 435*22dc650dSSadaf Ebrahimi abcd 436*22dc650dSSadaf EbrahimiFailed: error -52: nested recursion at the same subject position 437*22dc650dSSadaf Ebrahimi 438*22dc650dSSadaf Ebrahimi/(?<!\w)(?R)/ 439*22dc650dSSadaf Ebrahimi abcd 440*22dc650dSSadaf EbrahimiFailed: error -52: nested recursion at the same subject position 441*22dc650dSSadaf Ebrahimi 442*22dc650dSSadaf Ebrahimi/(?<=\w)(?R)/ 443*22dc650dSSadaf Ebrahimi abcd 444*22dc650dSSadaf EbrahimiFailed: error -52: nested recursion at the same subject position 445*22dc650dSSadaf Ebrahimi 446*22dc650dSSadaf Ebrahimi/(a+|(?R)b)/ 447*22dc650dSSadaf Ebrahimi aaa 448*22dc650dSSadaf Ebrahimi 0: aaa 449*22dc650dSSadaf Ebrahimi 1: aaa 450*22dc650dSSadaf Ebrahimi bbb 451*22dc650dSSadaf EbrahimiFailed: error -52: nested recursion at the same subject position 452*22dc650dSSadaf Ebrahimi 453*22dc650dSSadaf Ebrahimi/[^\xff]((?1))/BI 454*22dc650dSSadaf Ebrahimi------------------------------------------------------------------ 455*22dc650dSSadaf Ebrahimi Bra 456*22dc650dSSadaf Ebrahimi [^\x{ff}] 457*22dc650dSSadaf Ebrahimi CBra 1 458*22dc650dSSadaf Ebrahimi Recurse 459*22dc650dSSadaf Ebrahimi Ket 460*22dc650dSSadaf Ebrahimi Ket 461*22dc650dSSadaf Ebrahimi End 462*22dc650dSSadaf Ebrahimi------------------------------------------------------------------ 463*22dc650dSSadaf EbrahimiCapture group count = 1 464*22dc650dSSadaf EbrahimiSubject length lower bound = 1 465*22dc650dSSadaf Ebrahimi abcd 466*22dc650dSSadaf EbrahimiFailed: error -52: nested recursion at the same subject position 467*22dc650dSSadaf Ebrahimi 468*22dc650dSSadaf Ebrahimi# These tests don't behave the same with JIT 469*22dc650dSSadaf Ebrahimi 470*22dc650dSSadaf Ebrahimi/\w+(?C1)/BI,no_auto_possess 471*22dc650dSSadaf Ebrahimi------------------------------------------------------------------ 472*22dc650dSSadaf Ebrahimi Bra 473*22dc650dSSadaf Ebrahimi \w+ 474*22dc650dSSadaf Ebrahimi Callout 1 8 0 475*22dc650dSSadaf Ebrahimi Ket 476*22dc650dSSadaf Ebrahimi End 477*22dc650dSSadaf Ebrahimi------------------------------------------------------------------ 478*22dc650dSSadaf EbrahimiCapture group count = 0 479*22dc650dSSadaf EbrahimiOptions: no_auto_possess 480*22dc650dSSadaf EbrahimiStarting code units: 0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P 481*22dc650dSSadaf Ebrahimi Q R S T U V W X Y Z _ a b c d e f g h i j k l m n o p q r s t u v w x y z 482*22dc650dSSadaf EbrahimiSubject length lower bound = 1 483*22dc650dSSadaf Ebrahimi abc\=callout_fail=1 484*22dc650dSSadaf Ebrahimi--->abc 485*22dc650dSSadaf Ebrahimi 1 ^ ^ End of pattern 486*22dc650dSSadaf Ebrahimi 1 ^ ^ End of pattern 487*22dc650dSSadaf Ebrahimi 1 ^^ End of pattern 488*22dc650dSSadaf Ebrahimi 1 ^ ^ End of pattern 489*22dc650dSSadaf Ebrahimi 1 ^^ End of pattern 490*22dc650dSSadaf Ebrahimi 1 ^^ End of pattern 491*22dc650dSSadaf EbrahimiNo match 492*22dc650dSSadaf Ebrahimi 493*22dc650dSSadaf Ebrahimi/(*NO_AUTO_POSSESS)\w+(?C1)/BI 494*22dc650dSSadaf Ebrahimi------------------------------------------------------------------ 495*22dc650dSSadaf Ebrahimi Bra 496*22dc650dSSadaf Ebrahimi \w+ 497*22dc650dSSadaf Ebrahimi Callout 1 26 0 498*22dc650dSSadaf Ebrahimi Ket 499*22dc650dSSadaf Ebrahimi End 500*22dc650dSSadaf Ebrahimi------------------------------------------------------------------ 501*22dc650dSSadaf EbrahimiCapture group count = 0 502*22dc650dSSadaf EbrahimiCompile options: <none> 503*22dc650dSSadaf EbrahimiOverall options: no_auto_possess 504*22dc650dSSadaf EbrahimiStarting code units: 0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P 505*22dc650dSSadaf Ebrahimi Q R S T U V W X Y Z _ a b c d e f g h i j k l m n o p q r s t u v w x y z 506*22dc650dSSadaf EbrahimiSubject length lower bound = 1 507*22dc650dSSadaf Ebrahimi abc\=callout_fail=1 508*22dc650dSSadaf Ebrahimi--->abc 509*22dc650dSSadaf Ebrahimi 1 ^ ^ End of pattern 510*22dc650dSSadaf Ebrahimi 1 ^ ^ End of pattern 511*22dc650dSSadaf Ebrahimi 1 ^^ End of pattern 512*22dc650dSSadaf Ebrahimi 1 ^ ^ End of pattern 513*22dc650dSSadaf Ebrahimi 1 ^^ End of pattern 514*22dc650dSSadaf Ebrahimi 1 ^^ End of pattern 515*22dc650dSSadaf EbrahimiNo match 516*22dc650dSSadaf Ebrahimi 517*22dc650dSSadaf Ebrahimi# This test breaks the JIT stack limit 518*22dc650dSSadaf Ebrahimi 519*22dc650dSSadaf Ebrahimi/(|]+){2,2452}/ 520*22dc650dSSadaf Ebrahimi (|]+){2,2452} 521*22dc650dSSadaf Ebrahimi 0: 522*22dc650dSSadaf Ebrahimi 1: 523*22dc650dSSadaf Ebrahimi 524*22dc650dSSadaf Ebrahimi/b(?<!ax)(?!cx)/allusedtext 525*22dc650dSSadaf Ebrahimi abc 526*22dc650dSSadaf Ebrahimi 0: abc 527*22dc650dSSadaf Ebrahimi < > 528*22dc650dSSadaf Ebrahimi abcz 529*22dc650dSSadaf Ebrahimi 0: abcz 530*22dc650dSSadaf Ebrahimi < >> 531*22dc650dSSadaf Ebrahimi 532*22dc650dSSadaf Ebrahimi# This test triggers the recursion limit in the interpreter, but completes in 533*22dc650dSSadaf Ebrahimi# JIT. It's in testinput2 with disable_recurse_loop_check to get it to work 534*22dc650dSSadaf Ebrahimi# in the interpreter. 535*22dc650dSSadaf Ebrahimi 536*22dc650dSSadaf Ebrahimi/(a(?1)z||(?1)++)$/ 537*22dc650dSSadaf Ebrahimi abcd 538*22dc650dSSadaf EbrahimiFailed: error -52: nested recursion at the same subject position 539*22dc650dSSadaf Ebrahimi 540*22dc650dSSadaf Ebrahimi# End of testinput15 541