| # These are: | |
| # | |
| # (1) Tests of the match-limiting features. The results are different for | |
| # interpretive or JIT matching, so this test should not be run with JIT. The | |
| # same tests are run using JIT in test 17. | |
| # (2) Other tests that must not be run with JIT. | |
| # These tests are first so that they don't inherit a large enough heap frame | |
| # vector from a previous test. | |
| /(*LIMIT_HEAP=21)\[(a)]{60}/expand | |
| \[a]{60} | |
| Failed: error -63: heap limit exceeded | |
| "(*LIMIT_HEAP=21)()((?))()()()()()()()()()()()()()()()()()()()()()()()(())()()()()()()()()()()()()()()()()()()()()()(())()()()()()()()()()()()()()" | |
| xx | |
| Failed: error -63: heap limit exceeded | |
| # ----------------------------------------------------------------------- | |
| /(a+)*zz/I | |
| Capture group count = 1 | |
| Starting code units: a z | |
| Last code unit = 'z' | |
| Subject length lower bound = 2 | |
| aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazzbbbbbb\=find_limits_noheap | |
| Minimum match limit = 7 | |
| Minimum depth limit = 7 | |
| 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazz | |
| 1: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | |
| aaaaaaaaaaaaaz\=find_limits_noheap | |
| Minimum match limit = 20481 | |
| Minimum depth limit = 30 | |
| No match | |
| !((?:\s|//.*\\n|/[*](?:\\n|.)*?[*]/)*)!I | |
| Capture group count = 1 | |
| May match empty string | |
| Subject length lower bound = 0 | |
| /* this is a C style comment */\=find_limits_noheap | |
| Minimum match limit = 64 | |
| Minimum depth limit = 7 | |
| 0: /* this is a C style comment */ | |
| 1: /* this is a C style comment */ | |
| /^(?>a)++/ | |
| aa\=find_limits_noheap | |
| Minimum match limit = 5 | |
| Minimum depth limit = 3 | |
| 0: aa | |
| aaaaaaaaa\=find_limits_noheap | |
| Minimum match limit = 12 | |
| Minimum depth limit = 3 | |
| 0: aaaaaaaaa | |
| /(a)(?1)++/ | |
| aa\=find_limits_noheap | |
| Minimum match limit = 7 | |
| Minimum depth limit = 5 | |
| 0: aa | |
| 1: a | |
| aaaaaaaaa\=find_limits_noheap | |
| Minimum match limit = 21 | |
| Minimum depth limit = 5 | |
| 0: aaaaaaaaa | |
| 1: a | |
| /a(?:.)*?a/ims | |
| abbbbbbbbbbbbbbbbbbbbba\=find_limits_noheap | |
| Minimum match limit = 24 | |
| Minimum depth limit = 3 | |
| 0: abbbbbbbbbbbbbbbbbbbbba | |
| /a(?:.(*THEN))*?a/ims | |
| abbbbbbbbbbbbbbbbbbbbba\=find_limits_noheap | |
| Minimum match limit = 66 | |
| Minimum depth limit = 45 | |
| 0: abbbbbbbbbbbbbbbbbbbbba | |
| /a(?:.(*THEN:ABC))*?a/ims | |
| abbbbbbbbbbbbbbbbbbbbba\=find_limits_noheap | |
| Minimum match limit = 66 | |
| Minimum depth limit = 45 | |
| 0: abbbbbbbbbbbbbbbbbbbbba | |
| /^(?>a+)(?>b+)(?>c+)(?>d+)(?>e+)/ | |
| aabbccddee\=find_limits_noheap | |
| Minimum match limit = 7 | |
| Minimum depth limit = 7 | |
| 0: aabbccddee | |
| /^(?>(a+))(?>(b+))(?>(c+))(?>(d+))(?>(e+))/ | |
| aabbccddee\=find_limits_noheap | |
| Minimum match limit = 12 | |
| Minimum depth limit = 12 | |
| 0: aabbccddee | |
| 1: aa | |
| 2: bb | |
| 3: cc | |
| 4: dd | |
| 5: ee | |
| /^(?>(a+))(?>b+)(?>(c+))(?>d+)(?>(e+))/ | |
| aabbccddee\=find_limits_noheap | |
| Minimum match limit = 10 | |
| Minimum depth limit = 10 | |
| 0: aabbccddee | |
| 1: aa | |
| 2: cc | |
| 3: ee | |
| /(*LIMIT_MATCH=12bc)abc/ | |
| Failed: error 160 at offset 16: (*VERB) not recognized or malformed | |
| here: ...T_MATCH=12 |<--| bc)abc | |
| /(*LIMIT_MATCH=4294967290)abc/ | |
| Failed: error 160 at offset 23: (*VERB) not recognized or malformed | |
| here: ...=429496729 |<--| 0)abc | |
| /(*LIMIT_DEPTH=4294967280)abc/I | |
| Capture group count = 0 | |
| Depth limit = 4294967280 | |
| First code unit = 'a' | |
| Last code unit = 'c' | |
| Subject length lower bound = 3 | |
| /(a+)*zz/ | |
| \= Expect no match | |
| aaaaaaaaaaaaaz | |
| No match | |
| \= Expect limit exceeded | |
| aaaaaaaaaaaaaz\=match_limit=3000 | |
| Failed: error -47: match limit exceeded | |
| /(a+)*zz/ | |
| \= Expect limit exceeded | |
| aaaaaaaaaaaaaz\=depth_limit=10 | |
| Failed: error -53: matching depth limit exceeded | |
| /(*LIMIT_MATCH=3000)(a+)*zz/I | |
| Capture group count = 1 | |
| Match limit = 3000 | |
| Starting code units: a z | |
| Last code unit = 'z' | |
| Subject length lower bound = 2 | |
| \= Expect limit exceeded | |
| aaaaaaaaaaaaaz | |
| Failed: error -47: match limit exceeded | |
| \= Expect limit exceeded | |
| aaaaaaaaaaaaaz\=match_limit=60000 | |
| Failed: error -47: match limit exceeded | |
| /(*LIMIT_MATCH=60000)(*LIMIT_MATCH=3000)(a+)*zz/I | |
| Capture group count = 1 | |
| Match limit = 3000 | |
| Starting code units: a z | |
| Last code unit = 'z' | |
| Subject length lower bound = 2 | |
| \= Expect limit exceeded | |
| aaaaaaaaaaaaaz | |
| Failed: error -47: match limit exceeded | |
| /(*LIMIT_MATCH=60000)(a+)*zz/I | |
| Capture group count = 1 | |
| Match limit = 60000 | |
| Starting code units: a z | |
| Last code unit = 'z' | |
| Subject length lower bound = 2 | |
| \= Expect no match | |
| aaaaaaaaaaaaaz | |
| No match | |
| \= Expect limit exceeded | |
| aaaaaaaaaaaaaz\=match_limit=3000 | |
| Failed: error -47: match limit exceeded | |
| /(*LIMIT_DEPTH=10)(a+)*zz/I | |
| Capture group count = 1 | |
| Depth limit = 10 | |
| Starting code units: a z | |
| Last code unit = 'z' | |
| Subject length lower bound = 2 | |
| \= Expect limit exceeded | |
| aaaaaaaaaaaaaz | |
| Failed: error -53: matching depth limit exceeded | |
| \= Expect limit exceeded | |
| aaaaaaaaaaaaaz\=depth_limit=1000 | |
| Failed: error -53: matching depth limit exceeded | |
| /(*LIMIT_DEPTH=10)(*LIMIT_DEPTH=1000)(a+)*zz/I | |
| Capture group count = 1 | |
| Depth limit = 1000 | |
| Starting code units: a z | |
| Last code unit = 'z' | |
| Subject length lower bound = 2 | |
| \= Expect no match | |
| aaaaaaaaaaaaaz | |
| No match | |
| /(*LIMIT_DEPTH=1000)(a+)*zz/I | |
| Capture group count = 1 | |
| Depth limit = 1000 | |
| Starting code units: a z | |
| Last code unit = 'z' | |
| Subject length lower bound = 2 | |
| \= Expect no match | |
| aaaaaaaaaaaaaz | |
| No match | |
| \= Expect limit exceeded | |
| aaaaaaaaaaaaaz\=depth_limit=10 | |
| Failed: error -53: matching depth limit exceeded | |
| # These three have infinitely nested recursions. | |
| /((?2))((?1))/ | |
| abc | |
| Failed: error -52: nested recursion at the same subject position | |
| /((?(R2)a+|(?1)b))()/ | |
| aaaabcde | |
| Failed: error -52: nested recursion at the same subject position | |
| /(?(R)a*(?1)|((?R))b)/ | |
| aaaabcde | |
| Failed: error -52: nested recursion at the same subject position | |
| # The allusedtext modifier does not work with JIT, which does not maintain | |
| # the leftchar/rightchar data. | |
| /abc(?=xyz)/allusedtext | |
| abcxyzpqr | |
| 0: abcxyz | |
| >>> | |
| abcxyzpqr\=aftertext | |
| 0: abcxyz | |
| >>> | |
| 0+ xyzpqr | |
| /(?<=pqr)abc(?=xyz)/allusedtext | |
| xyzpqrabcxyzpqr | |
| 0: pqrabcxyz | |
| <<< >>> | |
| xyzpqrabcxyzpqr\=aftertext | |
| 0: pqrabcxyz | |
| <<< >>> | |
| 0+ xyzpqr | |
| /a\b/ | |
| a.\=allusedtext | |
| 0: a. | |
| > | |
| a\=allusedtext | |
| 0: a | |
| /abc\Kxyz/ | |
| abcxyz\=allusedtext | |
| 0: abcxyz | |
| <<< | |
| /abc(?=xyz(*ACCEPT))/ | |
| abcxyz\=allusedtext | |
| 0: abcxyz | |
| >>> | |
| /abc(?=abcde)(?=ab)/allusedtext | |
| abcabcdefg | |
| 0: abcabcde | |
| >>>>> | |
| #subject allusedtext | |
| /(?<=abc)123/ | |
| xyzabc123pqr | |
| 0: abc123 | |
| <<< | |
| xyzabc12\=ps | |
| Partial match: abc12 | |
| <<< | |
| xyzabc12\=ph | |
| Partial match: abc12 | |
| <<< | |
| /\babc\b/ | |
| +++abc+++ | |
| 0: +abc+ | |
| < > | |
| +++ab\=ps | |
| Partial match: +ab | |
| < | |
| +++ab\=ph | |
| Partial match: +ab | |
| < | |
| /(?<=abc)def/ | |
| abc\=ph | |
| Partial match: abc | |
| <<< | |
| /(?<=123)(*MARK:xx)abc/mark | |
| xxxx123a\=ph | |
| Partial match, mark=xx: 123a | |
| <<< | |
| xxxx123a\=ps | |
| Partial match, mark=xx: 123a | |
| <<< | |
| /(?<=(?<=a)b)c.*/I | |
| Capture group count = 0 | |
| Max lookbehind = 1 | |
| First code unit = 'c' | |
| Subject length lower bound = 1 | |
| abc\=ph | |
| Partial match: abc | |
| << | |
| \= Expect no match | |
| xbc\=ph | |
| No match | |
| /(?<=ab)c.*/I | |
| Capture group count = 0 | |
| Max lookbehind = 2 | |
| First code unit = 'c' | |
| Subject length lower bound = 1 | |
| abc\=ph | |
| Partial match: abc | |
| << | |
| \= Expect no match | |
| xbc\=ph | |
| No match | |
| /abc(?<=bc)def/ | |
| xxxabcd\=ph | |
| Partial match: abcd | |
| /(?<=ab)cdef/ | |
| xxabcd\=ph | |
| Partial match: abcd | |
| << | |
| /(?<=(?<=(?<=a)b)c)./I | |
| Capture group count = 0 | |
| Max lookbehind = 1 | |
| Subject length lower bound = 1 | |
| 123abcXYZ | |
| 0: abcX | |
| <<< | |
| /(?<=ab(cd(?<=...)))./I | |
| Capture group count = 1 | |
| Max lookbehind = 4 | |
| Subject length lower bound = 1 | |
| abcdX | |
| 0: abcdX | |
| <<<< | |
| 1: cd | |
| /(?<=ab((?<=...)cd))./I | |
| Capture group count = 1 | |
| Max lookbehind = 4 | |
| Subject length lower bound = 1 | |
| ZabcdX | |
| 0: ZabcdX | |
| <<<<< | |
| 1: cd | |
| /(?<=((?<=(?<=ab).))(?1)(?1))./I | |
| Capture group count = 1 | |
| Max lookbehind = 2 | |
| Subject length lower bound = 1 | |
| abxZ | |
| 0: abxZ | |
| <<< | |
| 1: | |
| #subject | |
| # ------------------------------------------------------------------- | |
| # These tests provoke recursion loops, which give a different error message | |
| # when JIT is used. | |
| /(?R)/I | |
| Capture group count = 0 | |
| May match empty string | |
| Subject length lower bound = 0 | |
| abcd | |
| Failed: error -52: nested recursion at the same subject position | |
| /(a|(?R))/I | |
| Capture group count = 1 | |
| May match empty string | |
| Subject length lower bound = 0 | |
| abcd | |
| 0: a | |
| 1: a | |
| defg | |
| Failed: error -52: nested recursion at the same subject position | |
| /(ab|(bc|(de|(?R))))/I | |
| Capture group count = 3 | |
| May match empty string | |
| Subject length lower bound = 0 | |
| abcd | |
| 0: ab | |
| 1: ab | |
| fghi | |
| Failed: error -52: nested recursion at the same subject position | |
| /(ab|(bc|(de|(?1))))/I | |
| Capture group count = 3 | |
| May match empty string | |
| Subject length lower bound = 0 | |
| abcd | |
| 0: ab | |
| 1: ab | |
| fghi | |
| Failed: error -52: nested recursion at the same subject position | |
| /x(ab|(bc|(de|(?1)x)x)x)/I | |
| Capture group count = 3 | |
| First code unit = 'x' | |
| Subject length lower bound = 3 | |
| xab123 | |
| 0: xab | |
| 1: ab | |
| xfghi | |
| Failed: error -52: nested recursion at the same subject position | |
| /(?!\w)(?R)/ | |
| abcd | |
| Failed: error -52: nested recursion at the same subject position | |
| =abc | |
| Failed: error -52: nested recursion at the same subject position | |
| /(?=\w)(?R)/ | |
| =abc | |
| Failed: error -52: nested recursion at the same subject position | |
| abcd | |
| Failed: error -52: nested recursion at the same subject position | |
| /(?<!\w)(?R)/ | |
| abcd | |
| Failed: error -52: nested recursion at the same subject position | |
| /(?<=\w)(?R)/ | |
| abcd | |
| Failed: error -52: nested recursion at the same subject position | |
| /(a+|(?R)b)/ | |
| aaa | |
| 0: aaa | |
| 1: aaa | |
| bbb | |
| Failed: error -52: nested recursion at the same subject position | |
| #if !ebcdic | |
| /[^\xff]((?1))/BI | |
| ------------------------------------------------------------------ | |
| Bra | |
| [^\x{ff}] (not) | |
| CBra 1 | |
| Recurse | |
| Ket | |
| Ket | |
| End | |
| ------------------------------------------------------------------ | |
| Capture group count = 1 | |
| Subject length lower bound = 1 | |
| abcd | |
| Failed: error -52: nested recursion at the same subject position | |
| #endif | |
| # These tests don't behave the same with JIT | |
| /\w+(?C1)/BI,no_auto_possess | |
| ------------------------------------------------------------------ | |
| Bra | |
| \w+ | |
| Callout 1 8 0 | |
| Ket | |
| End | |
| ------------------------------------------------------------------ | |
| Capture group count = 0 | |
| Options: no_auto_possess | |
| Optimizations: dotstar_anchor,start_optimize | |
| Starting 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 | |
| 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 | |
| Subject length lower bound = 1 | |
| abc\=callout_fail=1 | |
| --->abc | |
| 1 ^ ^ End of pattern | |
| 1 ^ ^ End of pattern | |
| 1 ^^ End of pattern | |
| 1 ^ ^ End of pattern | |
| 1 ^^ End of pattern | |
| 1 ^^ End of pattern | |
| No match | |
| /(*NO_AUTO_POSSESS)\w+(?C1)/BI | |
| ------------------------------------------------------------------ | |
| Bra | |
| \w+ | |
| Callout 1 26 0 | |
| Ket | |
| End | |
| ------------------------------------------------------------------ | |
| Capture group count = 0 | |
| Compile options: <none> | |
| Overall options: no_auto_possess | |
| Optimizations: dotstar_anchor,start_optimize | |
| Starting 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 | |
| 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 | |
| Subject length lower bound = 1 | |
| abc\=callout_fail=1 | |
| --->abc | |
| 1 ^ ^ End of pattern | |
| 1 ^ ^ End of pattern | |
| 1 ^^ End of pattern | |
| 1 ^ ^ End of pattern | |
| 1 ^^ End of pattern | |
| 1 ^^ End of pattern | |
| No match | |
| # This test breaks the JIT stack limit | |
| /(|]+){2,2452}/ | |
| (|]+){2,2452} | |
| 0: | |
| 1: | |
| /b(?<!ax)(?!cx)/allusedtext | |
| abc | |
| 0: abc | |
| < > | |
| abcz | |
| 0: abcz | |
| < >> | |
| # This test triggers the recursion limit in the interpreter, but completes in | |
| # JIT. It's in testinput2 with disable_recurse_loop_check to get it to work | |
| # in the interpreter. | |
| /(a(?1)z||(?1)++)$/ | |
| abcd | |
| Failed: error -52: nested recursion at the same subject position | |
| # End of testinput15 |