/* Regops and State definitions */
-#define REGNODE_MAX 122
-#define REGMATCH_STATE_MAX 162
+#define REGNODE_MAX 109
+#define REGMATCH_STATE_MAX 149
#define END 0 /* 0000 End of program. */
#define SUCCEED 1 /* 0x01 Return from a subroutine, basically. */
-#define BOL 2 /* 0x02 Match "" at beginning of line. */
-#define MBOL 3 /* 0x03 Same, assuming multiline. */
-#define SBOL 4 /* 0x04 Same, assuming singleline. */
-#define EOS 5 /* 0x05 Match "" at end of string. */
-#define EOL 6 /* 0x06 Match "" at end of line. */
-#define MEOL 7 /* 0x07 Same, assuming multiline. */
-#define SEOL 8 /* 0x08 Same, assuming singleline. */
-#define BOUND 9 /* 0x09 Match "" at any word boundary using native charset semantics for non-utf8 */
-#define BOUNDL 10 /* 0x0a Match "" at any locale word boundary */
-#define BOUNDU 11 /* 0x0b Match "" at any word boundary using Unicode semantics */
-#define BOUNDA 12 /* 0x0c Match "" at any word boundary using ASCII semantics */
-#define NBOUND 13 /* 0x0d Match "" at any word non-boundary using native charset semantics for non-utf8 */
-#define NBOUNDL 14 /* 0x0e Match "" at any locale word non-boundary */
-#define NBOUNDU 15 /* 0x0f Match "" at any word non-boundary using Unicode semantics */
-#define NBOUNDA 16 /* 0x10 Match "" at any word non-boundary using ASCII semantics */
-#define GPOS 17 /* 0x11 Matches where last m//g left off. */
-#define REG_ANY 18 /* 0x12 Match any one character (except newline). */
-#define SANY 19 /* 0x13 Match any one character. */
-#define CANY 20 /* 0x14 Match any one byte. */
-#define ANYOF 21 /* 0x15 Match character in (or not in) this class, single char match only */
-#define ANYOFV 22 /* 0x16 Match character in (or not in) this class, can match-multiple chars */
-#define ALNUM 23 /* 0x17 Match any alphanumeric character using native charset semantics for non-utf8 */
-#define ALNUML 24 /* 0x18 Match any alphanumeric char in locale */
-#define ALNUMU 25 /* 0x19 Match any alphanumeric char using Unicode semantics */
-#define ALNUMA 26 /* 0x1a Match [A-Za-z_0-9] */
-#define NALNUM 27 /* 0x1b Match any non-alphanumeric character using native charset semantics for non-utf8 */
-#define NALNUML 28 /* 0x1c Match any non-alphanumeric char in locale */
-#define NALNUMU 29 /* 0x1d Match any non-alphanumeric char using Unicode semantics */
-#define NALNUMA 30 /* 0x1e Match [^A-Za-z_0-9] */
-#define SPACE 31 /* 0x1f Match any whitespace character using native charset semantics for non-utf8 */
-#define SPACEL 32 /* 0x20 Match any whitespace char in locale */
-#define SPACEU 33 /* 0x21 Match any whitespace char using Unicode semantics */
-#define SPACEA 34 /* 0x22 Match [ \t\n\f\r] */
-#define NSPACE 35 /* 0x23 Match any non-whitespace character using native charset semantics for non-utf8 */
-#define NSPACEL 36 /* 0x24 Match any non-whitespace char in locale */
-#define NSPACEU 37 /* 0x25 Match any non-whitespace char using Unicode semantics */
-#define NSPACEA 38 /* 0x26 Match [^ \t\n\f\r] */
-#define DIGIT 39 /* 0x27 Match any numeric character using native charset semantics for non-utf8 */
-#define DIGITL 40 /* 0x28 Match any numeric character in locale */
-#define PLACEHOLDER1 41 /* 0x29 placeholder for missing DIGITU */
-#define DIGITA 42 /* 0x2a Match [0-9] */
-#define NDIGIT 43 /* 0x2b Match any non-numeric character using native charset semantics for non-utf8 */
-#define NDIGITL 44 /* 0x2c Match any non-numeric character in locale */
-#define PLACEHOLDER2 45 /* 0x2d placeholder for missing NDIGITU */
-#define NDIGITA 46 /* 0x2e Match [^0-9] */
-#define POSIXD 47 /* 0x2f currently unused except as a placeholder */
-#define POSIXL 48 /* 0x30 currently unused except as a placeholder */
-#define POSIXU 49 /* 0x31 currently unused except as a placeholder */
-#define POSIXA 50 /* 0x32 Some [[:class:]] under /a; the FLAGS field gives which one */
-#define NPOSIXD 51 /* 0x33 currently unused except as a placeholder */
-#define NPOSIXL 52 /* 0x34 currently unused except as a placeholder */
-#define NPOSIXU 53 /* 0x35 currently unused except as a placeholder */
-#define NPOSIXA 54 /* 0x36 complement of POSIXA, [[:^class:]] */
-#define CLUMP 55 /* 0x37 Match any extended grapheme cluster sequence */
-#define BRANCH 56 /* 0x38 Match this alternative, or the next... */
-#define BACK 57 /* 0x39 Match "", "next" ptr points backward. */
-#define EXACT 58 /* 0x3a Match this string (preceded by length). */
-#define EXACTF 59 /* 0x3b Match this non-UTF-8 string (not guaranteed to be folded) using /id rules (w/len). */
-#define EXACTFL 60 /* 0x3c Match this string (not guaranteed to be folded) using /il rules (w/len). */
-#define EXACTFU 61 /* 0x3d Match this string (folded iff in UTF-8, length in folding doesn't change if not in UTF-8) using /iu rules (w/len). */
-#define EXACTFA 62 /* 0x3e Match this string (not guaranteed to be folded) using /iaa rules (w/len). */
-#define EXACTFU_SS 63 /* 0x3f Match this string (folded iff in UTF-8, length in folding may change even if not in UTF-8) using /iu rules (w/len). */
-#define EXACTFU_TRICKYFOLD 64 /* 0x40 Match this folded UTF-8 string using /iu rules */
-#define NOTHING 65 /* 0x41 Match empty string. */
-#define TAIL 66 /* 0x42 Match empty string. Can jump here from outside. */
-#define STAR 67 /* 0x43 Match this (simple) thing 0 or more times. */
-#define PLUS 68 /* 0x44 Match this (simple) thing 1 or more times. */
-#define CURLY 69 /* 0x45 Match this simple thing {n,m} times. */
-#define CURLYN 70 /* 0x46 Capture next-after-this simple thing */
-#define CURLYM 71 /* 0x47 Capture this medium-complex thing {n,m} times. */
-#define CURLYX 72 /* 0x48 Match this complex thing {n,m} times. */
-#define WHILEM 73 /* 0x49 Do curly processing and see if rest matches. */
-#define OPEN 74 /* 0x4a Mark this point in input as start of */
-#define CLOSE 75 /* 0x4b Analogous to OPEN. */
-#define REF 76 /* 0x4c Match some already matched string */
-#define REFF 77 /* 0x4d Match already matched string, folded using native charset semantics for non-utf8 */
-#define REFFL 78 /* 0x4e Match already matched string, folded in loc. */
-#define REFFU 79 /* 0x4f Match already matched string, folded using unicode semantics for non-utf8 */
-#define REFFA 80 /* 0x50 Match already matched string, folded using unicode semantics for non-utf8, no mixing ASCII, non-ASCII */
-#define NREF 81 /* 0x51 Match some already matched string */
-#define NREFF 82 /* 0x52 Match already matched string, folded using native charset semantics for non-utf8 */
-#define NREFFL 83 /* 0x53 Match already matched string, folded in loc. */
-#define NREFFU 84 /* 0x54 Match already matched string, folded using unicode semantics for non-utf8 */
-#define NREFFA 85 /* 0x55 Match already matched string, folded using unicode semantics for non-utf8, no mixing ASCII, non-ASCII */
-#define IFMATCH 86 /* 0x56 Succeeds if the following matches. */
-#define UNLESSM 87 /* 0x57 Fails if the following matches. */
-#define SUSPEND 88 /* 0x58 "Independent" sub-RE. */
-#define IFTHEN 89 /* 0x59 Switch, should be preceded by switcher . */
-#define GROUPP 90 /* 0x5a Whether the group matched. */
-#define LONGJMP 91 /* 0x5b Jump far away. */
-#define BRANCHJ 92 /* 0x5c BRANCH with long offset. */
-#define EVAL 93 /* 0x5d Execute some Perl code. */
-#define MINMOD 94 /* 0x5e Next operator is not greedy. */
-#define LOGICAL 95 /* 0x5f Next opcode should set the flag only. */
-#define RENUM 96 /* 0x60 Group with independently numbered parens. */
-#define TRIE 97 /* 0x61 Match many EXACT(F[ALU]?)? at once. flags==type */
-#define TRIEC 98 /* 0x62 Same as TRIE, but with embedded charclass data */
-#define AHOCORASICK 99 /* 0x63 Aho Corasick stclass. flags==type */
-#define AHOCORASICKC 100 /* 0x64 Same as AHOCORASICK, but with embedded charclass data */
-#define GOSUB 101 /* 0x65 recurse to paren arg1 at (signed) ofs arg2 */
-#define GOSTART 102 /* 0x66 recurse to start of pattern */
-#define NGROUPP 103 /* 0x67 Whether the group matched. */
-#define INSUBP 104 /* 0x68 Whether we are in a specific recurse. */
-#define DEFINEP 105 /* 0x69 Never execute directly. */
-#define ENDLIKE 106 /* 0x6a Used only for the type field of verbs */
-#define OPFAIL 107 /* 0x6b Same as (?!) */
-#define ACCEPT 108 /* 0x6c Accepts the current matched string. */
-#define VERB 109 /* 0x6d Used only for the type field of verbs */
-#define PRUNE 110 /* 0x6e Pattern fails at this startpoint if no-backtracking through this */
-#define MARKPOINT 111 /* 0x6f Push the current location for rollback by cut. */
-#define SKIP 112 /* 0x70 On failure skip forward (to the mark) before retrying */
-#define COMMIT 113 /* 0x71 Pattern fails outright if backtracking through this */
-#define CUTGROUP 114 /* 0x72 On failure go to the next alternation in the group */
-#define KEEPS 115 /* 0x73 $& begins here. */
-#define LNBREAK 116 /* 0x74 generic newline pattern */
-#define VERTWS 117 /* 0x75 vertical whitespace (Perl 6) */
-#define NVERTWS 118 /* 0x76 not vertical whitespace (Perl 6) */
-#define HORIZWS 119 /* 0x77 horizontal whitespace (Perl 6) */
-#define NHORIZWS 120 /* 0x78 not horizontal whitespace (Perl 6) */
-#define OPTIMIZED 121 /* 0x79 Placeholder for dump. */
-#define PSEUDO 122 /* 0x7a Pseudo opcode for internal use. */
+#define SBOL 2 /* 0x02 Match "" at beginning of line: /^/, /\A/ */
+#define BOL 2 /* 0x02 type alias */
+#define MBOL 3 /* 0x03 Same, assuming multiline: /^/m */
+#define SEOL 4 /* 0x04 Match "" at end of line: /$/ */
+#define EOL 4 /* 0x04 type alias */
+#define MEOL 5 /* 0x05 Same, assuming multiline: /$/m */
+#define EOS 6 /* 0x06 Match "" at end of string: /\z/ */
+#define GPOS 7 /* 0x07 Matches where last m//g left off. */
+#define BOUND 8 /* 0x08 Like BOUNDA for non-utf8, otherwise like BOUNDU */
+#define BOUNDL 9 /* 0x09 Like BOUND/BOUNDU, but \w and \W are defined by current locale */
+#define BOUNDU 10 /* 0x0a Match "" at any boundary of a given type using /u rules. */
+#define BOUNDA 11 /* 0x0b Match "" at any boundary between \w\W or \W\w, where \w is [_a-zA-Z0-9] */
+#define NBOUND 12 /* 0x0c Like NBOUNDA for non-utf8, otherwise like BOUNDU */
+#define NBOUNDL 13 /* 0x0d Like NBOUND/NBOUNDU, but \w and \W are defined by current locale */
+#define NBOUNDU 14 /* 0x0e Match "" at any non-boundary of a given type using using /u rules. */
+#define NBOUNDA 15 /* 0x0f Match "" betweeen any \w\w or \W\W, where \w is [_a-zA-Z0-9] */
+#define REG_ANY 16 /* 0x10 Match any one character (except newline). */
+#define SANY 17 /* 0x11 Match any one character. */
+#define ANYOF 18 /* 0x12 Match character in (or not in) this class, single char match only */
+#define ANYOFD 19 /* 0x13 Like ANYOF, but /d is in effect */
+#define ANYOFL 20 /* 0x14 Like ANYOF, but /l is in effect */
+#define ANYOFPOSIXL 21 /* 0x15 Like ANYOFL, but matches [[:posix:]] classes */
+#define ANYOFH 22 /* 0x16 Like ANYOF, but only has "High" matches, none in the bitmap; the flags field contains the lowest matchable UTF-8 start byte */
+#define ANYOFHb 23 /* 0x17 Like ANYOFH, but all matches share the same UTF-8 start byte, given in the flags field */
+#define ANYOFHr 24 /* 0x18 Like ANYOFH, but the flags field contains packed bounds for all matchable UTF-8 start bytes. */
+#define ANYOFHs 25 /* 0x19 Like ANYOFHb, but has a string field that gives the leading matchable UTF-8 bytes; flags field is len */
+#define ANYOFR 26 /* 0x1a Matches any character in the range given by its packed args: upper 12 bits is the max delta from the base lower 20; the flags field contains the lowest matchable UTF-8 start byte */
+#define ANYOFRb 27 /* 0x1b Like ANYOFR, but all matches share the same UTF-8 start byte, given in the flags field */
+#define ANYOFM 28 /* 0x1c Like ANYOF, but matches an invariant byte as determined by the mask and arg */
+#define NANYOFM 29 /* 0x1d complement of ANYOFM */
+#define POSIXD 30 /* 0x1e Some [[:class:]] under /d; the FLAGS field gives which one */
+#define POSIXL 31 /* 0x1f Some [[:class:]] under /l; the FLAGS field gives which one */
+#define POSIXU 32 /* 0x20 Some [[:class:]] under /u; the FLAGS field gives which one */
+#define POSIXA 33 /* 0x21 Some [[:class:]] under /a; the FLAGS field gives which one */
+#define NPOSIXD 34 /* 0x22 complement of POSIXD, [[:^class:]] */
+#define NPOSIXL 35 /* 0x23 complement of POSIXL, [[:^class:]] */
+#define NPOSIXU 36 /* 0x24 complement of POSIXU, [[:^class:]] */
+#define NPOSIXA 37 /* 0x25 complement of POSIXA, [[:^class:]] */
+#define CLUMP 38 /* 0x26 Match any extended grapheme cluster sequence */
+#define BRANCH 39 /* 0x27 Match this alternative, or the next... */
+#define EXACT 40 /* 0x28 Match this string (flags field is the length). */
+#define LEXACT 41 /* 0x29 Match this long string (preceded by length; flags unused). */
+#define EXACTL 42 /* 0x2a Like EXACT, but /l is in effect (used so locale-related warnings can be checked for) */
+#define EXACTF 43 /* 0x2b Like EXACT, but match using /id rules; (string not UTF-8, ASCII folded; non-ASCII not) */
+#define EXACTFL 44 /* 0x2c Like EXACT, but match using /il rules; (string not likely to be folded) */
+#define EXACTFU 45 /* 0x2d Like EXACT, but match using /iu rules; (string folded) */
+#define EXACTFAA 46 /* 0x2e Like EXACT, but match using /iaa rules; (string folded except in non-UTF8 patterns: MICRO, SHARP S; folded length <= unfolded) */
+#define EXACTFUP 47 /* 0x2f Like EXACT, but match using /iu rules; (string not UTF-8, folded except MICRO, SHARP S: hence Problematic) */
+#define EXACTFLU8 48 /* 0x30 Like EXACTFU, but use /il, UTF-8, (string is folded, and everything in it is above 255 */
+#define EXACTFAA_NO_TRIE 49 /* 0x31 Like EXACT, but match using /iaa rules (string not UTF-8, not guaranteed to be folded, not currently trie-able) */
+#define EXACT_REQ8 50 /* 0x32 Like EXACT, but only UTF-8 encoded targets can match */
+#define LEXACT_REQ8 51 /* 0x33 Like LEXACT, but only UTF-8 encoded targets can match */
+#define EXACTFU_REQ8 52 /* 0x34 Like EXACTFU, but only UTF-8 encoded targets can match */
+#define EXACTFU_S_EDGE 53 /* 0x35 /di rules, but nothing in it precludes /ui, except begins and/or ends with [Ss]; (string not UTF-8; compile-time only) */
+#define NOTHING 54 /* 0x36 Match empty string. */
+#define TAIL 55 /* 0x37 Match empty string. Can jump here from outside. */
+#define STAR 56 /* 0x38 Match this (simple) thing 0 or more times. */
+#define PLUS 57 /* 0x39 Match this (simple) thing 1 or more times. */
+#define CURLY 58 /* 0x3a Match this simple thing {n,m} times. */
+#define CURLYN 59 /* 0x3b Capture next-after-this simple thing */
+#define CURLYM 60 /* 0x3c Capture this medium-complex thing {n,m} times. */
+#define CURLYX 61 /* 0x3d Match this complex thing {n,m} times. */
+#define WHILEM 62 /* 0x3e Do curly processing and see if rest matches. */
+#define OPEN 63 /* 0x3f Mark this point in input as start of #n. */
+#define CLOSE 64 /* 0x40 Close corresponding OPEN of #n. */
+#define SROPEN 65 /* 0x41 Same as OPEN, but for script run */
+#define SRCLOSE 66 /* 0x42 Close preceding SROPEN */
+#define REF 67 /* 0x43 Match some already matched string */
+#define REFF 68 /* 0x44 Match already matched string, using /di rules. */
+#define REFFL 69 /* 0x45 Match already matched string, using /li rules. */
+#define REFFU 70 /* 0x46 Match already matched string, usng /ui. */
+#define REFFA 71 /* 0x47 Match already matched string, using /aai rules. */
+#define REFN 72 /* 0x48 Match some already matched string */
+#define REFFN 73 /* 0x49 Match already matched string, using /di rules. */
+#define REFFLN 74 /* 0x4a Match already matched string, using /li rules. */
+#define REFFUN 75 /* 0x4b Match already matched string, using /ui rules. */
+#define REFFAN 76 /* 0x4c Match already matched string, using /aai rules. */
+#define LONGJMP 77 /* 0x4d Jump far away. */
+#define BRANCHJ 78 /* 0x4e BRANCH with long offset. */
+#define IFMATCH 79 /* 0x4f Succeeds if the following matches; non-zero flags "f", next_off "o" means lookbehind assertion starting "f..(f-o)" characters before current */
+#define UNLESSM 80 /* 0x50 Fails if the following matches; non-zero flags "f", next_off "o" means lookbehind assertion starting "f..(f-o)" characters before current */
+#define SUSPEND 81 /* 0x51 "Independent" sub-RE. */
+#define IFTHEN 82 /* 0x52 Switch, should be preceded by switcher. */
+#define GROUPP 83 /* 0x53 Whether the group matched. */
+#define EVAL 84 /* 0x54 Execute some Perl code. */
+#define MINMOD 85 /* 0x55 Next operator is not greedy. */
+#define LOGICAL 86 /* 0x56 Next opcode should set the flag only. */
+#define RENUM 87 /* 0x57 Group with independently numbered parens. */
+#define TRIE 88 /* 0x58 Match many EXACT(F[ALU]?)? at once. flags==type */
+#define TRIEC 89 /* 0x59 Same as TRIE, but with embedded charclass data */
+#define AHOCORASICK 90 /* 0x5a Aho Corasick stclass. flags==type */
+#define AHOCORASICKC 91 /* 0x5b Same as AHOCORASICK, but with embedded charclass data */
+#define GOSUB 92 /* 0x5c recurse to paren arg1 at (signed) ofs arg2 */
+#define GROUPPN 93 /* 0x5d Whether the group matched. */
+#define INSUBP 94 /* 0x5e Whether we are in a specific recurse. */
+#define DEFINEP 95 /* 0x5f Never execute directly. */
+#define ENDLIKE 96 /* 0x60 Used only for the type field of verbs */
+#define OPFAIL 97 /* 0x61 Same as (?!), but with verb arg */
+#define ACCEPT 98 /* 0x62 Accepts the current matched string, with verbar */
+#define VERB 99 /* 0x63 Used only for the type field of verbs */
+#define PRUNE 100 /* 0x64 Pattern fails at this startpoint if no-backtracking through this */
+#define MARKPOINT 101 /* 0x65 Push the current location for rollback by cut. */
+#define SKIP 102 /* 0x66 On failure skip forward (to the mark) before retrying */
+#define COMMIT 103 /* 0x67 Pattern fails outright if backtracking through this */
+#define CUTGROUP 104 /* 0x68 On failure go to the next alternation in the group */
+#define KEEPS 105 /* 0x69 $& begins here. */
+#define LNBREAK 106 /* 0x6a generic newline pattern */
+#define OPTIMIZED 107 /* 0x6b Placeholder for dump. */
+#define PSEUDO 108 /* 0x6c Pseudo opcode for internal use. */
+#define REGEX_SET 109 /* 0x6d Regex set, temporary node used in pre-optimization compilation */
/* ------------ States ------------- */
#define TRIE_next (REGNODE_MAX + 1) /* state for TRIE */
#define TRIE_next_fail (REGNODE_MAX + 2) /* state for TRIE */
-#define EVAL_AB (REGNODE_MAX + 3) /* state for EVAL */
-#define EVAL_AB_fail (REGNODE_MAX + 4) /* state for EVAL */
-#define CURLYX_end (REGNODE_MAX + 5) /* state for CURLYX */
-#define CURLYX_end_fail (REGNODE_MAX + 6) /* state for CURLYX */
-#define WHILEM_A_pre (REGNODE_MAX + 7) /* state for WHILEM */
-#define WHILEM_A_pre_fail (REGNODE_MAX + 8) /* state for WHILEM */
-#define WHILEM_A_min (REGNODE_MAX + 9) /* state for WHILEM */
-#define WHILEM_A_min_fail (REGNODE_MAX + 10) /* state for WHILEM */
-#define WHILEM_A_max (REGNODE_MAX + 11) /* state for WHILEM */
-#define WHILEM_A_max_fail (REGNODE_MAX + 12) /* state for WHILEM */
-#define WHILEM_B_min (REGNODE_MAX + 13) /* state for WHILEM */
-#define WHILEM_B_min_fail (REGNODE_MAX + 14) /* state for WHILEM */
-#define WHILEM_B_max (REGNODE_MAX + 15) /* state for WHILEM */
-#define WHILEM_B_max_fail (REGNODE_MAX + 16) /* state for WHILEM */
-#define BRANCH_next (REGNODE_MAX + 17) /* state for BRANCH */
-#define BRANCH_next_fail (REGNODE_MAX + 18) /* state for BRANCH */
-#define CURLYM_A (REGNODE_MAX + 19) /* state for CURLYM */
-#define CURLYM_A_fail (REGNODE_MAX + 20) /* state for CURLYM */
-#define CURLYM_B (REGNODE_MAX + 21) /* state for CURLYM */
-#define CURLYM_B_fail (REGNODE_MAX + 22) /* state for CURLYM */
-#define IFMATCH_A (REGNODE_MAX + 23) /* state for IFMATCH */
-#define IFMATCH_A_fail (REGNODE_MAX + 24) /* state for IFMATCH */
-#define CURLY_B_min_known (REGNODE_MAX + 25) /* state for CURLY */
-#define CURLY_B_min_known_fail (REGNODE_MAX + 26) /* state for CURLY */
+#define EVAL_B (REGNODE_MAX + 3) /* state for EVAL */
+#define EVAL_B_fail (REGNODE_MAX + 4) /* state for EVAL */
+#define EVAL_postponed_AB (REGNODE_MAX + 5) /* state for EVAL */
+#define EVAL_postponed_AB_fail (REGNODE_MAX + 6) /* state for EVAL */
+#define CURLYX_end (REGNODE_MAX + 7) /* state for CURLYX */
+#define CURLYX_end_fail (REGNODE_MAX + 8) /* state for CURLYX */
+#define WHILEM_A_pre (REGNODE_MAX + 9) /* state for WHILEM */
+#define WHILEM_A_pre_fail (REGNODE_MAX + 10) /* state for WHILEM */
+#define WHILEM_A_min (REGNODE_MAX + 11) /* state for WHILEM */
+#define WHILEM_A_min_fail (REGNODE_MAX + 12) /* state for WHILEM */
+#define WHILEM_A_max (REGNODE_MAX + 13) /* state for WHILEM */
+#define WHILEM_A_max_fail (REGNODE_MAX + 14) /* state for WHILEM */
+#define WHILEM_B_min (REGNODE_MAX + 15) /* state for WHILEM */
+#define WHILEM_B_min_fail (REGNODE_MAX + 16) /* state for WHILEM */
+#define WHILEM_B_max (REGNODE_MAX + 17) /* state for WHILEM */
+#define WHILEM_B_max_fail (REGNODE_MAX + 18) /* state for WHILEM */
+#define BRANCH_next (REGNODE_MAX + 19) /* state for BRANCH */
+#define BRANCH_next_fail (REGNODE_MAX + 20) /* state for BRANCH */
+#define CURLYM_A (REGNODE_MAX + 21) /* state for CURLYM */
+#define CURLYM_A_fail (REGNODE_MAX + 22) /* state for CURLYM */
+#define CURLYM_B (REGNODE_MAX + 23) /* state for CURLYM */
+#define CURLYM_B_fail (REGNODE_MAX + 24) /* state for CURLYM */
+#define IFMATCH_A (REGNODE_MAX + 25) /* state for IFMATCH */
+#define IFMATCH_A_fail (REGNODE_MAX + 26) /* state for IFMATCH */
#define CURLY_B_min (REGNODE_MAX + 27) /* state for CURLY */
#define CURLY_B_min_fail (REGNODE_MAX + 28) /* state for CURLY */
#define CURLY_B_max (REGNODE_MAX + 29) /* state for CURLY */
EXTCONST U8 PL_regkind[] = {
END, /* END */
END, /* SUCCEED */
- BOL, /* BOL */
- BOL, /* MBOL */
BOL, /* SBOL */
- EOL, /* EOS */
- EOL, /* EOL */
- EOL, /* MEOL */
+ BOL, /* MBOL */
EOL, /* SEOL */
+ EOL, /* MEOL */
+ EOL, /* EOS */
+ GPOS, /* GPOS */
BOUND, /* BOUND */
BOUND, /* BOUNDL */
BOUND, /* BOUNDU */
NBOUND, /* NBOUNDL */
NBOUND, /* NBOUNDU */
NBOUND, /* NBOUNDA */
- GPOS, /* GPOS */
REG_ANY, /* REG_ANY */
REG_ANY, /* SANY */
- REG_ANY, /* CANY */
ANYOF, /* ANYOF */
- ANYOF, /* ANYOFV */
- ALNUM, /* ALNUM */
- ALNUM, /* ALNUML */
- ALNUM, /* ALNUMU */
- ALNUM, /* ALNUMA */
- NALNUM, /* NALNUM */
- NALNUM, /* NALNUML */
- NALNUM, /* NALNUMU */
- NALNUM, /* NALNUMA */
- SPACE, /* SPACE */
- SPACE, /* SPACEL */
- SPACE, /* SPACEU */
- SPACE, /* SPACEA */
- NSPACE, /* NSPACE */
- NSPACE, /* NSPACEL */
- NSPACE, /* NSPACEU */
- NSPACE, /* NSPACEA */
- DIGIT, /* DIGIT */
- DIGIT, /* DIGITL */
- NOTHING, /* PLACEHOLDER1 */
- DIGIT, /* DIGITA */
- NDIGIT, /* NDIGIT */
- NDIGIT, /* NDIGITL */
- NOTHING, /* PLACEHOLDER2 */
- NDIGIT, /* NDIGITA */
+ ANYOF, /* ANYOFD */
+ ANYOF, /* ANYOFL */
+ ANYOF, /* ANYOFPOSIXL */
+ ANYOF, /* ANYOFH */
+ ANYOF, /* ANYOFHb */
+ ANYOF, /* ANYOFHr */
+ ANYOF, /* ANYOFHs */
+ ANYOFR, /* ANYOFR */
+ ANYOFR, /* ANYOFRb */
+ ANYOFM, /* ANYOFM */
+ ANYOFM, /* NANYOFM */
POSIXD, /* POSIXD */
POSIXD, /* POSIXL */
POSIXD, /* POSIXU */
POSIXD, /* POSIXA */
- POSIXD, /* NPOSIXD */
- POSIXD, /* NPOSIXL */
- POSIXD, /* NPOSIXU */
- POSIXD, /* NPOSIXA */
+ NPOSIXD, /* NPOSIXD */
+ NPOSIXD, /* NPOSIXL */
+ NPOSIXD, /* NPOSIXU */
+ NPOSIXD, /* NPOSIXA */
CLUMP, /* CLUMP */
BRANCH, /* BRANCH */
- BACK, /* BACK */
EXACT, /* EXACT */
+ EXACT, /* LEXACT */
+ EXACT, /* EXACTL */
EXACT, /* EXACTF */
EXACT, /* EXACTFL */
EXACT, /* EXACTFU */
- EXACT, /* EXACTFA */
- EXACT, /* EXACTFU_SS */
- EXACT, /* EXACTFU_TRICKYFOLD */
+ EXACT, /* EXACTFAA */
+ EXACT, /* EXACTFUP */
+ EXACT, /* EXACTFLU8 */
+ EXACT, /* EXACTFAA_NO_TRIE */
+ EXACT, /* EXACT_REQ8 */
+ EXACT, /* LEXACT_REQ8 */
+ EXACT, /* EXACTFU_REQ8 */
+ EXACT, /* EXACTFU_S_EDGE */
NOTHING, /* NOTHING */
NOTHING, /* TAIL */
STAR, /* STAR */
WHILEM, /* WHILEM */
OPEN, /* OPEN */
CLOSE, /* CLOSE */
+ SROPEN, /* SROPEN */
+ SRCLOSE, /* SRCLOSE */
REF, /* REF */
REF, /* REFF */
REF, /* REFFL */
REF, /* REFFU */
REF, /* REFFA */
- REF, /* NREF */
- REF, /* NREFF */
- REF, /* NREFFL */
- REF, /* NREFFU */
- REF, /* NREFFA */
+ REF, /* REFN */
+ REF, /* REFFN */
+ REF, /* REFFLN */
+ REF, /* REFFUN */
+ REF, /* REFFAN */
+ LONGJMP, /* LONGJMP */
+ BRANCHJ, /* BRANCHJ */
BRANCHJ, /* IFMATCH */
BRANCHJ, /* UNLESSM */
BRANCHJ, /* SUSPEND */
BRANCHJ, /* IFTHEN */
GROUPP, /* GROUPP */
- LONGJMP, /* LONGJMP */
- BRANCHJ, /* BRANCHJ */
EVAL, /* EVAL */
MINMOD, /* MINMOD */
LOGICAL, /* LOGICAL */
TRIE, /* AHOCORASICK */
TRIE, /* AHOCORASICKC */
GOSUB, /* GOSUB */
- GOSTART, /* GOSTART */
- NGROUPP, /* NGROUPP */
+ GROUPPN, /* GROUPPN */
INSUBP, /* INSUBP */
DEFINEP, /* DEFINEP */
ENDLIKE, /* ENDLIKE */
VERB, /* CUTGROUP */
KEEPS, /* KEEPS */
LNBREAK, /* LNBREAK */
- VERTWS, /* VERTWS */
- NVERTWS, /* NVERTWS */
- HORIZWS, /* HORIZWS */
- NHORIZWS, /* NHORIZWS */
NOTHING, /* OPTIMIZED */
PSEUDO, /* PSEUDO */
+ REGEX_SET, /* REGEX_SET */
/* ------------ States ------------- */
TRIE, /* TRIE_next */
TRIE, /* TRIE_next_fail */
- EVAL, /* EVAL_AB */
- EVAL, /* EVAL_AB_fail */
+ EVAL, /* EVAL_B */
+ EVAL, /* EVAL_B_fail */
+ EVAL, /* EVAL_postponed_AB */
+ EVAL, /* EVAL_postponed_AB_fail */
CURLYX, /* CURLYX_end */
CURLYX, /* CURLYX_end_fail */
WHILEM, /* WHILEM_A_pre */
CURLYM, /* CURLYM_B_fail */
IFMATCH, /* IFMATCH_A */
IFMATCH, /* IFMATCH_A_fail */
- CURLY, /* CURLY_B_min_known */
- CURLY, /* CURLY_B_min_known_fail */
CURLY, /* CURLY_B_min */
CURLY, /* CURLY_B_min_fail */
CURLY, /* CURLY_B_max */
};
#endif
+#ifdef REG_COMP_C
+
/* regarglen[] - How large is the argument part of the node (in regnodes) */
-#ifdef REG_COMP_C
static const U8 regarglen[] = {
0, /* END */
0, /* SUCCEED */
- 0, /* BOL */
- 0, /* MBOL */
0, /* SBOL */
- 0, /* EOS */
- 0, /* EOL */
- 0, /* MEOL */
+ 0, /* MBOL */
0, /* SEOL */
+ 0, /* MEOL */
+ 0, /* EOS */
+ 0, /* GPOS */
0, /* BOUND */
0, /* BOUNDL */
0, /* BOUNDU */
0, /* NBOUNDL */
0, /* NBOUNDU */
0, /* NBOUNDA */
- 0, /* GPOS */
0, /* REG_ANY */
0, /* SANY */
- 0, /* CANY */
- 0, /* ANYOF */
- 0, /* ANYOFV */
- 0, /* ALNUM */
- 0, /* ALNUML */
- 0, /* ALNUMU */
- 0, /* ALNUMA */
- 0, /* NALNUM */
- 0, /* NALNUML */
- 0, /* NALNUMU */
- 0, /* NALNUMA */
- 0, /* SPACE */
- 0, /* SPACEL */
- 0, /* SPACEU */
- 0, /* SPACEA */
- 0, /* NSPACE */
- 0, /* NSPACEL */
- 0, /* NSPACEU */
- 0, /* NSPACEA */
- 0, /* DIGIT */
- 0, /* DIGITL */
- 0, /* PLACEHOLDER1 */
- 0, /* DIGITA */
- 0, /* NDIGIT */
- 0, /* NDIGITL */
- 0, /* PLACEHOLDER2 */
- 0, /* NDIGITA */
+ EXTRA_SIZE(struct regnode_charclass), /* ANYOF */
+ EXTRA_SIZE(struct regnode_charclass), /* ANYOFD */
+ EXTRA_SIZE(struct regnode_charclass), /* ANYOFL */
+ EXTRA_SIZE(struct regnode_charclass_posixl), /* ANYOFPOSIXL */
+ EXTRA_SIZE(struct regnode_1), /* ANYOFH */
+ EXTRA_SIZE(struct regnode_1), /* ANYOFHb */
+ EXTRA_SIZE(struct regnode_1), /* ANYOFHr */
+ EXTRA_SIZE(struct regnode_1), /* ANYOFHs */
+ EXTRA_SIZE(struct regnode_1), /* ANYOFR */
+ EXTRA_SIZE(struct regnode_1), /* ANYOFRb */
+ EXTRA_SIZE(struct regnode_1), /* ANYOFM */
+ EXTRA_SIZE(struct regnode_1), /* NANYOFM */
0, /* POSIXD */
0, /* POSIXL */
0, /* POSIXU */
0, /* NPOSIXA */
0, /* CLUMP */
0, /* BRANCH */
- 0, /* BACK */
0, /* EXACT */
+ EXTRA_SIZE(struct regnode_1), /* LEXACT */
+ 0, /* EXACTL */
0, /* EXACTF */
0, /* EXACTFL */
0, /* EXACTFU */
- 0, /* EXACTFA */
- 0, /* EXACTFU_SS */
- 0, /* EXACTFU_TRICKYFOLD */
+ 0, /* EXACTFAA */
+ 0, /* EXACTFUP */
+ 0, /* EXACTFLU8 */
+ 0, /* EXACTFAA_NO_TRIE */
+ 0, /* EXACT_REQ8 */
+ EXTRA_SIZE(struct regnode_1), /* LEXACT_REQ8 */
+ 0, /* EXACTFU_REQ8 */
+ 0, /* EXACTFU_S_EDGE */
0, /* NOTHING */
0, /* TAIL */
0, /* STAR */
0, /* WHILEM */
EXTRA_SIZE(struct regnode_1), /* OPEN */
EXTRA_SIZE(struct regnode_1), /* CLOSE */
+ 0, /* SROPEN */
+ 0, /* SRCLOSE */
EXTRA_SIZE(struct regnode_1), /* REF */
EXTRA_SIZE(struct regnode_1), /* REFF */
EXTRA_SIZE(struct regnode_1), /* REFFL */
EXTRA_SIZE(struct regnode_1), /* REFFU */
EXTRA_SIZE(struct regnode_1), /* REFFA */
- EXTRA_SIZE(struct regnode_1), /* NREF */
- EXTRA_SIZE(struct regnode_1), /* NREFF */
- EXTRA_SIZE(struct regnode_1), /* NREFFL */
- EXTRA_SIZE(struct regnode_1), /* NREFFU */
- EXTRA_SIZE(struct regnode_1), /* NREFFA */
+ EXTRA_SIZE(struct regnode_1), /* REFN */
+ EXTRA_SIZE(struct regnode_1), /* REFFN */
+ EXTRA_SIZE(struct regnode_1), /* REFFLN */
+ EXTRA_SIZE(struct regnode_1), /* REFFUN */
+ EXTRA_SIZE(struct regnode_1), /* REFFAN */
+ EXTRA_SIZE(struct regnode_1), /* LONGJMP */
+ EXTRA_SIZE(struct regnode_1), /* BRANCHJ */
EXTRA_SIZE(struct regnode_1), /* IFMATCH */
EXTRA_SIZE(struct regnode_1), /* UNLESSM */
EXTRA_SIZE(struct regnode_1), /* SUSPEND */
EXTRA_SIZE(struct regnode_1), /* IFTHEN */
EXTRA_SIZE(struct regnode_1), /* GROUPP */
- EXTRA_SIZE(struct regnode_1), /* LONGJMP */
- EXTRA_SIZE(struct regnode_1), /* BRANCHJ */
- EXTRA_SIZE(struct regnode_1), /* EVAL */
+ EXTRA_SIZE(struct regnode_2L), /* EVAL */
0, /* MINMOD */
0, /* LOGICAL */
EXTRA_SIZE(struct regnode_1), /* RENUM */
EXTRA_SIZE(struct regnode_1), /* AHOCORASICK */
EXTRA_SIZE(struct regnode_charclass), /* AHOCORASICKC */
EXTRA_SIZE(struct regnode_2L), /* GOSUB */
- 0, /* GOSTART */
- EXTRA_SIZE(struct regnode_1), /* NGROUPP */
+ EXTRA_SIZE(struct regnode_1), /* GROUPPN */
EXTRA_SIZE(struct regnode_1), /* INSUBP */
EXTRA_SIZE(struct regnode_1), /* DEFINEP */
0, /* ENDLIKE */
- 0, /* OPFAIL */
- EXTRA_SIZE(struct regnode_1), /* ACCEPT */
+ EXTRA_SIZE(struct regnode_1), /* OPFAIL */
+ EXTRA_SIZE(struct regnode_2L), /* ACCEPT */
EXTRA_SIZE(struct regnode_1), /* VERB */
EXTRA_SIZE(struct regnode_1), /* PRUNE */
EXTRA_SIZE(struct regnode_1), /* MARKPOINT */
EXTRA_SIZE(struct regnode_1), /* CUTGROUP */
0, /* KEEPS */
0, /* LNBREAK */
- 0, /* VERTWS */
- 0, /* NVERTWS */
- 0, /* HORIZWS */
- 0, /* NHORIZWS */
0, /* OPTIMIZED */
0, /* PSEUDO */
+ EXTRA_SIZE(struct regnode_p), /* REGEX_SET */
};
/* reg_off_by_arg[] - Which argument holds the offset to the next node */
static const char reg_off_by_arg[] = {
0, /* END */
0, /* SUCCEED */
- 0, /* BOL */
- 0, /* MBOL */
0, /* SBOL */
- 0, /* EOS */
- 0, /* EOL */
- 0, /* MEOL */
+ 0, /* MBOL */
0, /* SEOL */
+ 0, /* MEOL */
+ 0, /* EOS */
+ 0, /* GPOS */
0, /* BOUND */
0, /* BOUNDL */
0, /* BOUNDU */
0, /* NBOUNDL */
0, /* NBOUNDU */
0, /* NBOUNDA */
- 0, /* GPOS */
0, /* REG_ANY */
0, /* SANY */
- 0, /* CANY */
0, /* ANYOF */
- 0, /* ANYOFV */
- 0, /* ALNUM */
- 0, /* ALNUML */
- 0, /* ALNUMU */
- 0, /* ALNUMA */
- 0, /* NALNUM */
- 0, /* NALNUML */
- 0, /* NALNUMU */
- 0, /* NALNUMA */
- 0, /* SPACE */
- 0, /* SPACEL */
- 0, /* SPACEU */
- 0, /* SPACEA */
- 0, /* NSPACE */
- 0, /* NSPACEL */
- 0, /* NSPACEU */
- 0, /* NSPACEA */
- 0, /* DIGIT */
- 0, /* DIGITL */
- 0, /* PLACEHOLDER1 */
- 0, /* DIGITA */
- 0, /* NDIGIT */
- 0, /* NDIGITL */
- 0, /* PLACEHOLDER2 */
- 0, /* NDIGITA */
+ 0, /* ANYOFD */
+ 0, /* ANYOFL */
+ 0, /* ANYOFPOSIXL */
+ 0, /* ANYOFH */
+ 0, /* ANYOFHb */
+ 0, /* ANYOFHr */
+ 0, /* ANYOFHs */
+ 0, /* ANYOFR */
+ 0, /* ANYOFRb */
+ 0, /* ANYOFM */
+ 0, /* NANYOFM */
0, /* POSIXD */
0, /* POSIXL */
0, /* POSIXU */
0, /* NPOSIXA */
0, /* CLUMP */
0, /* BRANCH */
- 0, /* BACK */
0, /* EXACT */
+ 0, /* LEXACT */
+ 0, /* EXACTL */
0, /* EXACTF */
0, /* EXACTFL */
0, /* EXACTFU */
- 0, /* EXACTFA */
- 0, /* EXACTFU_SS */
- 0, /* EXACTFU_TRICKYFOLD */
+ 0, /* EXACTFAA */
+ 0, /* EXACTFUP */
+ 0, /* EXACTFLU8 */
+ 0, /* EXACTFAA_NO_TRIE */
+ 0, /* EXACT_REQ8 */
+ 0, /* LEXACT_REQ8 */
+ 0, /* EXACTFU_REQ8 */
+ 0, /* EXACTFU_S_EDGE */
0, /* NOTHING */
0, /* TAIL */
0, /* STAR */
0, /* WHILEM */
0, /* OPEN */
0, /* CLOSE */
+ 0, /* SROPEN */
+ 0, /* SRCLOSE */
0, /* REF */
0, /* REFF */
0, /* REFFL */
0, /* REFFU */
0, /* REFFA */
- 0, /* NREF */
- 0, /* NREFF */
- 0, /* NREFFL */
- 0, /* NREFFU */
- 0, /* NREFFA */
- 2, /* IFMATCH */
- 2, /* UNLESSM */
+ 0, /* REFN */
+ 0, /* REFFN */
+ 0, /* REFFLN */
+ 0, /* REFFUN */
+ 0, /* REFFAN */
+ 1, /* LONGJMP */
+ 1, /* BRANCHJ */
+ 1, /* IFMATCH */
+ 1, /* UNLESSM */
1, /* SUSPEND */
1, /* IFTHEN */
0, /* GROUPP */
- 1, /* LONGJMP */
- 1, /* BRANCHJ */
0, /* EVAL */
0, /* MINMOD */
0, /* LOGICAL */
0, /* AHOCORASICK */
0, /* AHOCORASICKC */
0, /* GOSUB */
- 0, /* GOSTART */
- 0, /* NGROUPP */
+ 0, /* GROUPPN */
0, /* INSUBP */
0, /* DEFINEP */
0, /* ENDLIKE */
0, /* CUTGROUP */
0, /* KEEPS */
0, /* LNBREAK */
- 0, /* VERTWS */
- 0, /* NVERTWS */
- 0, /* HORIZWS */
- 0, /* NHORIZWS */
0, /* OPTIMIZED */
0, /* PSEUDO */
+ 0, /* REGEX_SET */
};
#endif /* REG_COMP_C */
+
/* reg_name[] - Opcode/state names in string form, for debugging */
#ifndef DOINIT
EXTCONST char * const PL_reg_name[] = {
"END", /* 0000 */
"SUCCEED", /* 0x01 */
- "BOL", /* 0x02 */
+ "SBOL", /* 0x02 */
"MBOL", /* 0x03 */
- "SBOL", /* 0x04 */
- "EOS", /* 0x05 */
- "EOL", /* 0x06 */
- "MEOL", /* 0x07 */
- "SEOL", /* 0x08 */
- "BOUND", /* 0x09 */
- "BOUNDL", /* 0x0a */
- "BOUNDU", /* 0x0b */
- "BOUNDA", /* 0x0c */
- "NBOUND", /* 0x0d */
- "NBOUNDL", /* 0x0e */
- "NBOUNDU", /* 0x0f */
- "NBOUNDA", /* 0x10 */
- "GPOS", /* 0x11 */
- "REG_ANY", /* 0x12 */
- "SANY", /* 0x13 */
- "CANY", /* 0x14 */
- "ANYOF", /* 0x15 */
- "ANYOFV", /* 0x16 */
- "ALNUM", /* 0x17 */
- "ALNUML", /* 0x18 */
- "ALNUMU", /* 0x19 */
- "ALNUMA", /* 0x1a */
- "NALNUM", /* 0x1b */
- "NALNUML", /* 0x1c */
- "NALNUMU", /* 0x1d */
- "NALNUMA", /* 0x1e */
- "SPACE", /* 0x1f */
- "SPACEL", /* 0x20 */
- "SPACEU", /* 0x21 */
- "SPACEA", /* 0x22 */
- "NSPACE", /* 0x23 */
- "NSPACEL", /* 0x24 */
- "NSPACEU", /* 0x25 */
- "NSPACEA", /* 0x26 */
- "DIGIT", /* 0x27 */
- "DIGITL", /* 0x28 */
- "PLACEHOLDER1", /* 0x29 */
- "DIGITA", /* 0x2a */
- "NDIGIT", /* 0x2b */
- "NDIGITL", /* 0x2c */
- "PLACEHOLDER2", /* 0x2d */
- "NDIGITA", /* 0x2e */
- "POSIXD", /* 0x2f */
- "POSIXL", /* 0x30 */
- "POSIXU", /* 0x31 */
- "POSIXA", /* 0x32 */
- "NPOSIXD", /* 0x33 */
- "NPOSIXL", /* 0x34 */
- "NPOSIXU", /* 0x35 */
- "NPOSIXA", /* 0x36 */
- "CLUMP", /* 0x37 */
- "BRANCH", /* 0x38 */
- "BACK", /* 0x39 */
- "EXACT", /* 0x3a */
- "EXACTF", /* 0x3b */
- "EXACTFL", /* 0x3c */
- "EXACTFU", /* 0x3d */
- "EXACTFA", /* 0x3e */
- "EXACTFU_SS", /* 0x3f */
- "EXACTFU_TRICKYFOLD", /* 0x40 */
- "NOTHING", /* 0x41 */
- "TAIL", /* 0x42 */
- "STAR", /* 0x43 */
- "PLUS", /* 0x44 */
- "CURLY", /* 0x45 */
- "CURLYN", /* 0x46 */
- "CURLYM", /* 0x47 */
- "CURLYX", /* 0x48 */
- "WHILEM", /* 0x49 */
- "OPEN", /* 0x4a */
- "CLOSE", /* 0x4b */
- "REF", /* 0x4c */
- "REFF", /* 0x4d */
- "REFFL", /* 0x4e */
- "REFFU", /* 0x4f */
- "REFFA", /* 0x50 */
- "NREF", /* 0x51 */
- "NREFF", /* 0x52 */
- "NREFFL", /* 0x53 */
- "NREFFU", /* 0x54 */
- "NREFFA", /* 0x55 */
- "IFMATCH", /* 0x56 */
- "UNLESSM", /* 0x57 */
- "SUSPEND", /* 0x58 */
- "IFTHEN", /* 0x59 */
- "GROUPP", /* 0x5a */
- "LONGJMP", /* 0x5b */
- "BRANCHJ", /* 0x5c */
- "EVAL", /* 0x5d */
- "MINMOD", /* 0x5e */
- "LOGICAL", /* 0x5f */
- "RENUM", /* 0x60 */
- "TRIE", /* 0x61 */
- "TRIEC", /* 0x62 */
- "AHOCORASICK", /* 0x63 */
- "AHOCORASICKC", /* 0x64 */
- "GOSUB", /* 0x65 */
- "GOSTART", /* 0x66 */
- "NGROUPP", /* 0x67 */
- "INSUBP", /* 0x68 */
- "DEFINEP", /* 0x69 */
- "ENDLIKE", /* 0x6a */
- "OPFAIL", /* 0x6b */
- "ACCEPT", /* 0x6c */
- "VERB", /* 0x6d */
- "PRUNE", /* 0x6e */
- "MARKPOINT", /* 0x6f */
- "SKIP", /* 0x70 */
- "COMMIT", /* 0x71 */
- "CUTGROUP", /* 0x72 */
- "KEEPS", /* 0x73 */
- "LNBREAK", /* 0x74 */
- "VERTWS", /* 0x75 */
- "NVERTWS", /* 0x76 */
- "HORIZWS", /* 0x77 */
- "NHORIZWS", /* 0x78 */
- "OPTIMIZED", /* 0x79 */
- "PSEUDO", /* 0x7a */
+ "SEOL", /* 0x04 */
+ "MEOL", /* 0x05 */
+ "EOS", /* 0x06 */
+ "GPOS", /* 0x07 */
+ "BOUND", /* 0x08 */
+ "BOUNDL", /* 0x09 */
+ "BOUNDU", /* 0x0a */
+ "BOUNDA", /* 0x0b */
+ "NBOUND", /* 0x0c */
+ "NBOUNDL", /* 0x0d */
+ "NBOUNDU", /* 0x0e */
+ "NBOUNDA", /* 0x0f */
+ "REG_ANY", /* 0x10 */
+ "SANY", /* 0x11 */
+ "ANYOF", /* 0x12 */
+ "ANYOFD", /* 0x13 */
+ "ANYOFL", /* 0x14 */
+ "ANYOFPOSIXL", /* 0x15 */
+ "ANYOFH", /* 0x16 */
+ "ANYOFHb", /* 0x17 */
+ "ANYOFHr", /* 0x18 */
+ "ANYOFHs", /* 0x19 */
+ "ANYOFR", /* 0x1a */
+ "ANYOFRb", /* 0x1b */
+ "ANYOFM", /* 0x1c */
+ "NANYOFM", /* 0x1d */
+ "POSIXD", /* 0x1e */
+ "POSIXL", /* 0x1f */
+ "POSIXU", /* 0x20 */
+ "POSIXA", /* 0x21 */
+ "NPOSIXD", /* 0x22 */
+ "NPOSIXL", /* 0x23 */
+ "NPOSIXU", /* 0x24 */
+ "NPOSIXA", /* 0x25 */
+ "CLUMP", /* 0x26 */
+ "BRANCH", /* 0x27 */
+ "EXACT", /* 0x28 */
+ "LEXACT", /* 0x29 */
+ "EXACTL", /* 0x2a */
+ "EXACTF", /* 0x2b */
+ "EXACTFL", /* 0x2c */
+ "EXACTFU", /* 0x2d */
+ "EXACTFAA", /* 0x2e */
+ "EXACTFUP", /* 0x2f */
+ "EXACTFLU8", /* 0x30 */
+ "EXACTFAA_NO_TRIE", /* 0x31 */
+ "EXACT_REQ8", /* 0x32 */
+ "LEXACT_REQ8", /* 0x33 */
+ "EXACTFU_REQ8", /* 0x34 */
+ "EXACTFU_S_EDGE", /* 0x35 */
+ "NOTHING", /* 0x36 */
+ "TAIL", /* 0x37 */
+ "STAR", /* 0x38 */
+ "PLUS", /* 0x39 */
+ "CURLY", /* 0x3a */
+ "CURLYN", /* 0x3b */
+ "CURLYM", /* 0x3c */
+ "CURLYX", /* 0x3d */
+ "WHILEM", /* 0x3e */
+ "OPEN", /* 0x3f */
+ "CLOSE", /* 0x40 */
+ "SROPEN", /* 0x41 */
+ "SRCLOSE", /* 0x42 */
+ "REF", /* 0x43 */
+ "REFF", /* 0x44 */
+ "REFFL", /* 0x45 */
+ "REFFU", /* 0x46 */
+ "REFFA", /* 0x47 */
+ "REFN", /* 0x48 */
+ "REFFN", /* 0x49 */
+ "REFFLN", /* 0x4a */
+ "REFFUN", /* 0x4b */
+ "REFFAN", /* 0x4c */
+ "LONGJMP", /* 0x4d */
+ "BRANCHJ", /* 0x4e */
+ "IFMATCH", /* 0x4f */
+ "UNLESSM", /* 0x50 */
+ "SUSPEND", /* 0x51 */
+ "IFTHEN", /* 0x52 */
+ "GROUPP", /* 0x53 */
+ "EVAL", /* 0x54 */
+ "MINMOD", /* 0x55 */
+ "LOGICAL", /* 0x56 */
+ "RENUM", /* 0x57 */
+ "TRIE", /* 0x58 */
+ "TRIEC", /* 0x59 */
+ "AHOCORASICK", /* 0x5a */
+ "AHOCORASICKC", /* 0x5b */
+ "GOSUB", /* 0x5c */
+ "GROUPPN", /* 0x5d */
+ "INSUBP", /* 0x5e */
+ "DEFINEP", /* 0x5f */
+ "ENDLIKE", /* 0x60 */
+ "OPFAIL", /* 0x61 */
+ "ACCEPT", /* 0x62 */
+ "VERB", /* 0x63 */
+ "PRUNE", /* 0x64 */
+ "MARKPOINT", /* 0x65 */
+ "SKIP", /* 0x66 */
+ "COMMIT", /* 0x67 */
+ "CUTGROUP", /* 0x68 */
+ "KEEPS", /* 0x69 */
+ "LNBREAK", /* 0x6a */
+ "OPTIMIZED", /* 0x6b */
+ "PSEUDO", /* 0x6c */
+ "REGEX_SET", /* 0x6d */
/* ------------ States ------------- */
"TRIE_next", /* REGNODE_MAX +0x01 */
"TRIE_next_fail", /* REGNODE_MAX +0x02 */
- "EVAL_AB", /* REGNODE_MAX +0x03 */
- "EVAL_AB_fail", /* REGNODE_MAX +0x04 */
- "CURLYX_end", /* REGNODE_MAX +0x05 */
- "CURLYX_end_fail", /* REGNODE_MAX +0x06 */
- "WHILEM_A_pre", /* REGNODE_MAX +0x07 */
- "WHILEM_A_pre_fail", /* REGNODE_MAX +0x08 */
- "WHILEM_A_min", /* REGNODE_MAX +0x09 */
- "WHILEM_A_min_fail", /* REGNODE_MAX +0x0a */
- "WHILEM_A_max", /* REGNODE_MAX +0x0b */
- "WHILEM_A_max_fail", /* REGNODE_MAX +0x0c */
- "WHILEM_B_min", /* REGNODE_MAX +0x0d */
- "WHILEM_B_min_fail", /* REGNODE_MAX +0x0e */
- "WHILEM_B_max", /* REGNODE_MAX +0x0f */
- "WHILEM_B_max_fail", /* REGNODE_MAX +0x10 */
- "BRANCH_next", /* REGNODE_MAX +0x11 */
- "BRANCH_next_fail", /* REGNODE_MAX +0x12 */
- "CURLYM_A", /* REGNODE_MAX +0x13 */
- "CURLYM_A_fail", /* REGNODE_MAX +0x14 */
- "CURLYM_B", /* REGNODE_MAX +0x15 */
- "CURLYM_B_fail", /* REGNODE_MAX +0x16 */
- "IFMATCH_A", /* REGNODE_MAX +0x17 */
- "IFMATCH_A_fail", /* REGNODE_MAX +0x18 */
- "CURLY_B_min_known", /* REGNODE_MAX +0x19 */
- "CURLY_B_min_known_fail", /* REGNODE_MAX +0x1a */
+ "EVAL_B", /* REGNODE_MAX +0x03 */
+ "EVAL_B_fail", /* REGNODE_MAX +0x04 */
+ "EVAL_postponed_AB", /* REGNODE_MAX +0x05 */
+ "EVAL_postponed_AB_fail", /* REGNODE_MAX +0x06 */
+ "CURLYX_end", /* REGNODE_MAX +0x07 */
+ "CURLYX_end_fail", /* REGNODE_MAX +0x08 */
+ "WHILEM_A_pre", /* REGNODE_MAX +0x09 */
+ "WHILEM_A_pre_fail", /* REGNODE_MAX +0x0a */
+ "WHILEM_A_min", /* REGNODE_MAX +0x0b */
+ "WHILEM_A_min_fail", /* REGNODE_MAX +0x0c */
+ "WHILEM_A_max", /* REGNODE_MAX +0x0d */
+ "WHILEM_A_max_fail", /* REGNODE_MAX +0x0e */
+ "WHILEM_B_min", /* REGNODE_MAX +0x0f */
+ "WHILEM_B_min_fail", /* REGNODE_MAX +0x10 */
+ "WHILEM_B_max", /* REGNODE_MAX +0x11 */
+ "WHILEM_B_max_fail", /* REGNODE_MAX +0x12 */
+ "BRANCH_next", /* REGNODE_MAX +0x13 */
+ "BRANCH_next_fail", /* REGNODE_MAX +0x14 */
+ "CURLYM_A", /* REGNODE_MAX +0x15 */
+ "CURLYM_A_fail", /* REGNODE_MAX +0x16 */
+ "CURLYM_B", /* REGNODE_MAX +0x17 */
+ "CURLYM_B_fail", /* REGNODE_MAX +0x18 */
+ "IFMATCH_A", /* REGNODE_MAX +0x19 */
+ "IFMATCH_A_fail", /* REGNODE_MAX +0x1a */
"CURLY_B_min", /* REGNODE_MAX +0x1b */
"CURLY_B_min_fail", /* REGNODE_MAX +0x1c */
"CURLY_B_max", /* REGNODE_MAX +0x1d */
EXTCONST char * PL_reg_extflags_name[];
#else
EXTCONST char * const PL_reg_extflags_name[] = {
- /* Bits in extflags defined: 11011111111111111111111011111111 */
+ /* Bits in extflags defined: 11111111111111110000111111111111 */
"MULTILINE", /* 0x00000001 */
"SINGLELINE", /* 0x00000002 */
"FOLD", /* 0x00000004 */
"EXTENDED", /* 0x00000008 */
- "KEEPCOPY", /* 0x00000010 */
- "CHARSET", /* 0x000000e0 */
- "CHARSET", /* 0x000000e0 */
- "CHARSET", /* 0x000000e0 */
- "UNUSED_BIT_8", /* 0x00000100 */
- "ANCH_BOL", /* 0x00000200 */
- "ANCH_MBOL", /* 0x00000400 */
- "ANCH_SBOL", /* 0x00000800 */
- "ANCH_GPOS", /* 0x00001000 */
- "GPOS_SEEN", /* 0x00002000 */
- "GPOS_FLOAT", /* 0x00004000 */
- "LOOKBEHIND_SEEN", /* 0x00008000 */
- "EVAL_SEEN", /* 0x00010000 */
- "CANY_SEEN", /* 0x00020000 */
- "NOSCAN", /* 0x00040000 */
+ "EXTENDED_MORE", /* 0x00000010 */
+ "NOCAPTURE", /* 0x00000020 */
+ "KEEPCOPY", /* 0x00000040 */
+ "CHARSET0", /* 0x00000080 : "CHARSET" - 0x00000380 */
+ "CHARSET1", /* 0x00000100 : "CHARSET" - 0x00000380 */
+ "CHARSET2", /* 0x00000200 : "CHARSET" - 0x00000380 */
+ "STRICT", /* 0x00000400 */
+ "SPLIT", /* 0x00000800 */
+ "UNUSED_BIT_12", /* 0x00001000 */
+ "UNUSED_BIT_13", /* 0x00002000 */
+ "UNUSED_BIT_14", /* 0x00004000 */
+ "UNUSED_BIT_15", /* 0x00008000 */
+ "NO_INPLACE_SUBST", /* 0x00010000 */
+ "EVAL_SEEN", /* 0x00020000 */
+ "UNBOUNDED_QUANTIFIER_SEEN",/* 0x00040000 */
"CHECK_ALL", /* 0x00080000 */
"MATCH_UTF8", /* 0x00100000 */
"USE_INTUIT_NOML", /* 0x00200000 */
"USE_INTUIT_ML", /* 0x00400000 */
"INTUIT_TAIL", /* 0x00800000 */
- "MODIFIES_VARS", /* 0x01000000 */
+ "IS_ANCHORED", /* 0x01000000 */
"COPY_DONE", /* 0x02000000 */
"TAINTED_SEEN", /* 0x04000000 */
"TAINTED", /* 0x08000000 */
"START_ONLY", /* 0x10000000 */
- "UNUSED_BIT_29", /* 0x20000000 */
+ "SKIPWHITE", /* 0x20000000 */
"WHITE", /* 0x40000000 */
"NULL", /* 0x80000000 */
};
#endif /* DOINIT */
+#ifdef DEBUGGING
+# define REG_EXTFLAGS_NAME_SIZE 32
+#endif
+
+/* PL_reg_intflags_name[] - Opcode/state names in string form, for debugging */
+
+#ifndef DOINIT
+EXTCONST char * PL_reg_intflags_name[];
+#else
+EXTCONST char * const PL_reg_intflags_name[] = {
+ "SKIP", /* 0x00000001 - PREGf_SKIP */
+ "IMPLICIT", /* 0x00000002 - PREGf_IMPLICIT - Converted .* to ^.* */
+ "NAUGHTY", /* 0x00000004 - PREGf_NAUGHTY - how exponential is this pattern? */
+ "VERBARG_SEEN", /* 0x00000008 - PREGf_VERBARG_SEEN */
+ "CUTGROUP_SEEN", /* 0x00000010 - PREGf_CUTGROUP_SEEN */
+ "USE_RE_EVAL", /* 0x00000020 - PREGf_USE_RE_EVAL - compiled with "use re 'eval'" */
+ "NOSCAN", /* 0x00000040 - PREGf_NOSCAN */
+ "GPOS_SEEN", /* 0x00000100 - PREGf_GPOS_SEEN */
+ "GPOS_FLOAT", /* 0x00000200 - PREGf_GPOS_FLOAT */
+ "ANCH_MBOL", /* 0x00000400 - PREGf_ANCH_MBOL */
+ "ANCH_SBOL", /* 0x00000800 - PREGf_ANCH_SBOL */
+ "ANCH_GPOS", /* 0x00001000 - PREGf_ANCH_GPOS */
+ "RECURSE_SEEN", /* 0x00002000 - PREGf_RECURSE_SEEN */
+};
+#endif /* DOINIT */
+
+#ifdef DEBUGGING
+# define REG_INTFLAGS_NAME_SIZE 13
+#endif
+
/* The following have no fixed length. U8 so we can do strchr() on it. */
#define REGNODE_VARIES(node) (PL_varies_bitmask[(node) >> 3] & (1 << ((node) & 7)))
EXTCONST U8 PL_varies[] __attribute__deprecated__;
#else
EXTCONST U8 PL_varies[] __attribute__deprecated__ = {
- ANYOFV, CLUMP, BRANCH, BACK, STAR, PLUS, CURLY, CURLYN, CURLYM, CURLYX,
- WHILEM, REF, REFF, REFFL, REFFU, REFFA, NREF, NREFF, NREFFL, NREFFU,
- NREFFA, SUSPEND, IFTHEN, BRANCHJ,
+ CLUMP, BRANCH, STAR, PLUS, CURLY, CURLYN, CURLYM, CURLYX, WHILEM, REF,
+ REFF, REFFL, REFFU, REFFA, REFN, REFFN, REFFLN, REFFUN, REFFAN,
+ BRANCHJ, SUSPEND, IFTHEN,
0
};
#endif /* DOINIT */
EXTCONST U8 PL_varies_bitmask[];
#else
EXTCONST U8 PL_varies_bitmask[] = {
- 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x80, 0x03, 0xF8, 0xF3, 0x3F, 0x13, 0x00, 0x00, 0x00, 0x00
+ 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x7F, 0xF8, 0x5F, 0x06, 0x00, 0x00, 0x00
};
#endif /* DOINIT */
EXTCONST U8 PL_simple[] __attribute__deprecated__;
#else
EXTCONST U8 PL_simple[] __attribute__deprecated__ = {
- REG_ANY, SANY, CANY, ANYOF, ALNUM, ALNUML, ALNUMU, ALNUMA, NALNUM,
- NALNUML, NALNUMU, NALNUMA, SPACE, SPACEL, SPACEU, SPACEA, NSPACE,
- NSPACEL, NSPACEU, NSPACEA, DIGIT, DIGITL, DIGITA, NDIGIT, NDIGITL,
- NDIGITA, POSIXD, POSIXL, POSIXU, POSIXA, NPOSIXD, NPOSIXL, NPOSIXU,
- NPOSIXA, VERTWS, NVERTWS, HORIZWS, NHORIZWS,
+ REG_ANY, SANY, ANYOF, ANYOFD, ANYOFL, ANYOFPOSIXL, ANYOFH, ANYOFHb,
+ ANYOFHr, ANYOFHs, ANYOFR, ANYOFRb, ANYOFM, NANYOFM, POSIXD, POSIXL,
+ POSIXU, POSIXA, NPOSIXD, NPOSIXL, NPOSIXU, NPOSIXA, REGEX_SET,
0
};
#endif /* DOINIT */
EXTCONST U8 PL_simple_bitmask[];
#else
EXTCONST U8 PL_simple_bitmask[] = {
- 0x00, 0x00, 0xBC, 0xFF, 0xFF, 0xDD, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x01
+ 0x00, 0x00, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20
};
#endif /* DOINIT */