This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
new perldelta
[perl5.git] / regnodes.h
index 55a89f1..17a8422 100644 (file)
-/* -*- buffer-read-only: t -*-
+/* -*- mode: C; buffer-read-only: t -*-
    !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!!
-   This file is built by regen/regcomp.pl from regcomp.sym.
+   This file is built by regen/regcomp.pl from regcomp.sym, op_reg_common.h
+   and regexp.h.
    Any changes made here will be lost!
-*/
+ */
+
+#if defined(PERL_CORE) || defined(PERL_EXT_RE_BUILD)
+
+
+/* typedefs for regex nodes - one typedef per node type */
+
+typedef struct regnode_2                         tregnode_ACCEPT;
+typedef struct regnode_1                         tregnode_AHOCORASICK;
+typedef struct regnode_charclass                 tregnode_AHOCORASICKC;
+typedef struct regnode_charclass                 tregnode_ANYOF;
+typedef struct regnode_charclass                 tregnode_ANYOFD;
+typedef struct regnode_1                         tregnode_ANYOFH;
+typedef struct regnode_1                         tregnode_ANYOFHb;
+typedef struct regnode_bbm                       tregnode_ANYOFHbbm;
+typedef struct regnode_1                         tregnode_ANYOFHr;
+typedef struct regnode_1                         tregnode_ANYOFHs;
+typedef struct regnode_charclass                 tregnode_ANYOFL;
+typedef struct regnode_1                         tregnode_ANYOFM;
+typedef struct regnode_charclass_posixl          tregnode_ANYOFPOSIXL;
+typedef struct regnode_1                         tregnode_ANYOFR;
+typedef struct regnode_1                         tregnode_ANYOFRb;
+typedef struct regnode                           tregnode_BOUND;
+typedef struct regnode                           tregnode_BOUNDA;
+typedef struct regnode                           tregnode_BOUNDL;
+typedef struct regnode                           tregnode_BOUNDU;
+typedef struct regnode_1                         tregnode_BRANCH;
+typedef struct regnode_2                         tregnode_BRANCHJ;
+typedef struct regnode_1                         tregnode_CLOSE;
+typedef struct regnode                           tregnode_CLUMP;
+typedef struct regnode_1                         tregnode_COMMIT;
+typedef struct regnode_3                         tregnode_CURLY;
+typedef struct regnode_3                         tregnode_CURLYM;
+typedef struct regnode_3                         tregnode_CURLYN;
+typedef struct regnode_3                         tregnode_CURLYX;
+typedef struct regnode_1                         tregnode_CUTGROUP;
+typedef struct regnode_1                         tregnode_DEFINEP;
+typedef struct regnode                           tregnode_END;
+typedef struct regnode                           tregnode_ENDLIKE;
+typedef struct regnode                           tregnode_EOS;
+typedef struct regnode_2                         tregnode_EVAL;
+typedef struct regnode                           tregnode_EXACT;
+typedef struct regnode                           tregnode_EXACTF;
+typedef struct regnode                           tregnode_EXACTFAA;
+typedef struct regnode                           tregnode_EXACTFAA_NO_TRIE;
+typedef struct regnode                           tregnode_EXACTFL;
+typedef struct regnode                           tregnode_EXACTFLU8;
+typedef struct regnode                           tregnode_EXACTFU;
+typedef struct regnode                           tregnode_EXACTFUP;
+typedef struct regnode                           tregnode_EXACTFU_REQ8;
+typedef struct regnode                           tregnode_EXACTFU_S_EDGE;
+typedef struct regnode                           tregnode_EXACTL;
+typedef struct regnode                           tregnode_EXACT_REQ8;
+typedef struct regnode_2                         tregnode_GOSUB;
+typedef struct regnode                           tregnode_GPOS;
+typedef struct regnode_1                         tregnode_GROUPP;
+typedef struct regnode_1                         tregnode_GROUPPN;
+typedef struct regnode_1                         tregnode_IFMATCH;
+typedef struct regnode_1                         tregnode_IFTHEN;
+typedef struct regnode_1                         tregnode_INSUBP;
+typedef struct regnode                           tregnode_KEEPS;
+typedef struct regnode_1                         tregnode_LEXACT;
+typedef struct regnode_1                         tregnode_LEXACT_REQ8;
+typedef struct regnode                           tregnode_LNBREAK;
+typedef struct regnode                           tregnode_LOGICAL;
+typedef struct regnode_1                         tregnode_LONGJMP;
+typedef struct regnode                           tregnode_LOOKBEHIND_END;
+typedef struct regnode_1                         tregnode_MARKPOINT;
+typedef struct regnode                           tregnode_MBOL;
+typedef struct regnode                           tregnode_MEOL;
+typedef struct regnode                           tregnode_MINMOD;
+typedef struct regnode_1                         tregnode_NANYOFM;
+typedef struct regnode                           tregnode_NBOUND;
+typedef struct regnode                           tregnode_NBOUNDA;
+typedef struct regnode                           tregnode_NBOUNDL;
+typedef struct regnode                           tregnode_NBOUNDU;
+typedef struct regnode                           tregnode_NOTHING;
+typedef struct regnode                           tregnode_NPOSIXA;
+typedef struct regnode                           tregnode_NPOSIXD;
+typedef struct regnode                           tregnode_NPOSIXL;
+typedef struct regnode                           tregnode_NPOSIXU;
+typedef struct regnode_1                         tregnode_OPEN;
+typedef struct regnode_1                         tregnode_OPFAIL;
+typedef struct regnode                           tregnode_OPTIMIZED;
+typedef struct regnode                           tregnode_PLUS;
+typedef struct regnode                           tregnode_POSIXA;
+typedef struct regnode                           tregnode_POSIXD;
+typedef struct regnode                           tregnode_POSIXL;
+typedef struct regnode                           tregnode_POSIXU;
+typedef struct regnode_1                         tregnode_PRUNE;
+typedef struct regnode                           tregnode_PSEUDO;
+typedef struct regnode_2                         tregnode_REF;
+typedef struct regnode_2                         tregnode_REFF;
+typedef struct regnode_2                         tregnode_REFFA;
+typedef struct regnode_2                         tregnode_REFFAN;
+typedef struct regnode_2                         tregnode_REFFL;
+typedef struct regnode_2                         tregnode_REFFLN;
+typedef struct regnode_2                         tregnode_REFFN;
+typedef struct regnode_2                         tregnode_REFFU;
+typedef struct regnode_2                         tregnode_REFFUN;
+typedef struct regnode_2                         tregnode_REFN;
+typedef struct regnode_p                         tregnode_REGEX_SET;
+typedef struct regnode                           tregnode_REG_ANY;
+typedef struct regnode_1                         tregnode_RENUM;
+typedef struct regnode                           tregnode_SANY;
+typedef struct regnode                           tregnode_SBOL;
+typedef struct regnode                           tregnode_SEOL;
+typedef struct regnode_1                         tregnode_SKIP;
+typedef struct regnode                           tregnode_SRCLOSE;
+typedef struct regnode                           tregnode_SROPEN;
+typedef struct regnode                           tregnode_STAR;
+typedef struct regnode                           tregnode_SUCCEED;
+typedef struct regnode_1                         tregnode_SUSPEND;
+typedef struct regnode                           tregnode_TAIL;
+typedef struct regnode_1                         tregnode_TRIE;
+typedef struct regnode_charclass                 tregnode_TRIEC;
+typedef struct regnode_1                         tregnode_UNLESSM;
+typedef struct regnode_1                         tregnode_VERB;
+typedef struct regnode                           tregnode_WHILEM;
+
+/* end typedefs */
 
 /* Regops and State definitions */
 
-#define REGNODE_MAX            93
-#define REGMATCH_STATE_MAX     133
-
-#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 */
-#define        BOUNDL                  10      /* 0x0a Match "" at any word boundary */
-#define        NBOUND                  11      /* 0x0b Match "" at any word non-boundary */
-#define        NBOUNDL                 12      /* 0x0c Match "" at any word non-boundary */
-#define        GPOS                    13      /* 0x0d Matches where last m//g left off. */
-#define        REG_ANY                 14      /* 0x0e Match any one character (except newline). */
-#define        SANY                    15      /* 0x0f Match any one character. */
-#define        CANY                    16      /* 0x10 Match any one byte. */
-#define        ANYOF                   17      /* 0x11 Match character in (or not in) this class, folding is native charset for non-utf8. */
-#define        ALNUM                   18      /* 0x12 Match any alphanumeric character */
-#define        ALNUML                  19      /* 0x13 Match any alphanumeric char in locale */
-#define        NALNUM                  20      /* 0x14 Match any non-alphanumeric character */
-#define        NALNUML                 21      /* 0x15 Match any non-alphanumeric char in locale */
-#define        SPACE                   22      /* 0x16 Match any whitespace character */
-#define        SPACEL                  23      /* 0x17 Match any whitespace char in locale */
-#define        NSPACE                  24      /* 0x18 Match any non-whitespace character */
-#define        NSPACEL                 25      /* 0x19 Match any non-whitespace char in locale */
-#define        DIGIT                   26      /* 0x1a Match any numeric character */
-#define        DIGITL                  27      /* 0x1b Match any numeric character in locale */
-#define        NDIGIT                  28      /* 0x1c Match any non-numeric character */
-#define        NDIGITL                 29      /* 0x1d Match any non-numeric character in locale */
-#define        CLUMP                   30      /* 0x1e Match any extended grapheme cluster sequence */
-#define        BRANCH                  31      /* 0x1f Match this alternative, or the next... */
-#define        BACK                    32      /* 0x20 Match "", "next" ptr points backward. */
-#define        EXACT                   33      /* 0x21 Match this string (preceded by length). */
-#define        EXACTF                  34      /* 0x22 Match this string, folded, native charset semantics for non-utf8 (prec. by length). */
-#define        EXACTFL                 35      /* 0x23 Match this string, folded in locale (w/len). */
-#define        EXACTFU                 36      /* 0x24 Match this string, folded, Unicode semantics for non-utf8 (prec. by length). */
-#define        NOTHING                 37      /* 0x25 Match empty string. */
-#define        TAIL                    38      /* 0x26 Match empty string. Can jump here from outside. */
-#define        STAR                    39      /* 0x27 Match this (simple) thing 0 or more times. */
-#define        PLUS                    40      /* 0x28 Match this (simple) thing 1 or more times. */
-#define        CURLY                   41      /* 0x29 Match this simple thing {n,m} times. */
-#define        CURLYN                  42      /* 0x2a Capture next-after-this simple thing */
-#define        CURLYM                  43      /* 0x2b Capture this medium-complex thing {n,m} times. */
-#define        CURLYX                  44      /* 0x2c Match this complex thing {n,m} times. */
-#define        WHILEM                  45      /* 0x2d Do curly processing and see if rest matches. */
-#define        OPEN                    46      /* 0x2e Mark this point in input as start of */
-#define        CLOSE                   47      /* 0x2f Analogous to OPEN. */
-#define        REF                     48      /* 0x30 Match some already matched string */
-#define        REFF                    49      /* 0x31 Match already matched string, folded using native charset semantics for non-utf8 */
-#define        REFFL                   50      /* 0x32 Match already matched string, folded in loc. */
-#define        REFFU                   51      /* 0x33 Match already matched string, folded using unicode semantics for non-utf8 */
-#define        NREF                    52      /* 0x34 Match some already matched string */
-#define        NREFF                   53      /* 0x35 Match already matched string, folded using native charset semantics for non-utf8 */
-#define        NREFFL                  54      /* 0x36 Match already matched string, folded in loc. */
-#define        NREFFU                  55      /* 0x37 Match already matched string, folded using unicode semantics for non-utf8 */
-#define        IFMATCH                 56      /* 0x38 Succeeds if the following matches. */
-#define        UNLESSM                 57      /* 0x39 Fails if the following matches. */
-#define        SUSPEND                 58      /* 0x3a "Independent" sub-RE. */
-#define        IFTHEN                  59      /* 0x3b Switch, should be preceeded by switcher . */
-#define        GROUPP                  60      /* 0x3c Whether the group matched. */
-#define        LONGJMP                 61      /* 0x3d Jump far away. */
-#define        BRANCHJ                 62      /* 0x3e BRANCH with long offset. */
-#define        EVAL                    63      /* 0x3f Execute some Perl code. */
-#define        MINMOD                  64      /* 0x40 Next operator is not greedy. */
-#define        LOGICAL                 65      /* 0x41 Next opcode should set the flag only. */
-#define        RENUM                   66      /* 0x42 Group with independently numbered parens. */
-#define        TRIE                    67      /* 0x43 Match many EXACT(F[LU]?)? at once. flags==type */
-#define        TRIEC                   68      /* 0x44 Same as TRIE, but with embedded charclass data */
-#define        AHOCORASICK             69      /* 0x45 Aho Corasick stclass. flags==type */
-#define        AHOCORASICKC            70      /* 0x46 Same as AHOCORASICK, but with embedded charclass data */
-#define        GOSUB                   71      /* 0x47 recurse to paren arg1 at (signed) ofs arg2 */
-#define        GOSTART                 72      /* 0x48 recurse to start of pattern */
-#define        NGROUPP                 73      /* 0x49 Whether the group matched. */
-#define        INSUBP                  74      /* 0x4a Whether we are in a specific recurse. */
-#define        DEFINEP                 75      /* 0x4b Never execute directly. */
-#define        ENDLIKE                 76      /* 0x4c Used only for the type field of verbs */
-#define        OPFAIL                  77      /* 0x4d Same as (?!) */
-#define        ACCEPT                  78      /* 0x4e Accepts the current matched string. */
-#define        VERB                    79      /* 0x4f Used only for the type field of verbs */
-#define        PRUNE                   80      /* 0x50 Pattern fails at this startpoint if no-backtracking through this */
-#define        MARKPOINT               81      /* 0x51 Push the current location for rollback by cut. */
-#define        SKIP                    82      /* 0x52 On failure skip forward (to the mark) before retrying */
-#define        COMMIT                  83      /* 0x53 Pattern fails outright if backtracking through this */
-#define        CUTGROUP                84      /* 0x54 On failure go to the next alternation in the group */
-#define        KEEPS                   85      /* 0x55 $& begins here. */
-#define        LNBREAK                 86      /* 0x56 generic newline pattern */
-#define        VERTWS                  87      /* 0x57 vertical whitespace         (Perl 6) */
-#define        NVERTWS                 88      /* 0x58 not vertical whitespace     (Perl 6) */
-#define        HORIZWS                 89      /* 0x59 horizontal whitespace       (Perl 6) */
-#define        NHORIZWS                90      /* 0x5a not horizontal whitespace   (Perl 6) */
-#define        FOLDCHAR                91      /* 0x5b codepoint with tricky case folding properties. */
-#define        OPTIMIZED               92      /* 0x5c Placeholder for dump. */
-#define        PSEUDO                  93      /* 0x5d Pseudo opcode for internal use. */
-       /* ------------ 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        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 */
-#define        CURLY_B_max_fail        (REGNODE_MAX + 30)      /* state for CURLY */
-#define        COMMIT_next             (REGNODE_MAX + 31)      /* state for COMMIT */
-#define        COMMIT_next_fail        (REGNODE_MAX + 32)      /* state for COMMIT */
-#define        MARKPOINT_next          (REGNODE_MAX + 33)      /* state for MARKPOINT */
-#define        MARKPOINT_next_fail     (REGNODE_MAX + 34)      /* state for MARKPOINT */
-#define        SKIP_next               (REGNODE_MAX + 35)      /* state for SKIP */
-#define        SKIP_next_fail          (REGNODE_MAX + 36)      /* state for SKIP */
-#define        CUTGROUP_next           (REGNODE_MAX + 37)      /* state for CUTGROUP */
-#define        CUTGROUP_next_fail      (REGNODE_MAX + 38)      /* state for CUTGROUP */
-#define        KEEPS_next              (REGNODE_MAX + 39)      /* state for KEEPS */
-#define        KEEPS_next_fail         (REGNODE_MAX + 40)      /* state for KEEPS */
-
-/* PL_regkind[] What type of regop or state is this. */
+#define REGNODE_MAX            111
+#define REGMATCH_STATE_MAX     153
+
+/* -- For regexec.c to switch on target being utf8 (t8) or not (tb, b='byte'); */
+#define with_t_UTF8ness(op, t_utf8) (((op) << 1) + (cBOOL(t_utf8)))
+/* -- same, but also with pattern (p8, pb) -- */
+#define with_tp_UTF8ness(op, t_utf8, p_utf8)                        \
+               (((op) << 2) + (cBOOL(t_utf8) << 1) + cBOOL(p_utf8))
+
+/* The #defines below give both the basic regnode and the expanded version for
+   switching on utf8ness */
+#define END                           0        /* 0x00 End of program. */
+#define END_tb                           0     /*      0x000 */
+#define END_t8                           1     /*      0x001 */
+#define END_tb_pb                           0  /*      0x000 */
+#define END_tb_p8                           1  /*      0x001 */
+#define END_t8_pb                           2  /*      0x002 */
+#define END_t8_p8                           3  /*      0x003 */
+
+#define SUCCEED                       1        /* 0x01 Return from a
+                                                  subroutine, basically. */
+#define SUCCEED_tb                       2     /*      0x002 */
+#define SUCCEED_t8                       3     /*      0x003 */
+#define SUCCEED_tb_pb                       4  /*      0x004 */
+#define SUCCEED_tb_p8                       5  /*      0x005 */
+#define SUCCEED_t8_pb                       6  /*      0x006 */
+#define SUCCEED_t8_p8                       7  /*      0x007 */
+
+#define SBOL                          2        /* 0x02 Match "" at beginning
+                                                  of line: /^/, /\A/ */
+#define SBOL_tb                          4     /*      0x004 */
+#define SBOL_t8                          5     /*      0x005 */
+#define SBOL_tb_pb                          8  /*      0x008 */
+#define SBOL_tb_p8                          9  /*      0x009 */
+#define SBOL_t8_pb                         10  /*      0x00a */
+#define SBOL_t8_p8                         11  /*      0x00b */
+
+#define BOL                           2        /* 0x02 Match "" at beginning
+                                                  of line: /^/, /\A/ */
+#define BOL_tb                           4     /*      0x004 */
+#define BOL_t8                           5     /*      0x005 */
+#define BOL_tb_pb                           8  /*      0x008 */
+#define BOL_tb_p8                           9  /*      0x009 */
+#define BOL_t8_pb                          10  /*      0x00a */
+#define BOL_t8_p8                          11  /*      0x00b */
+
+#define MBOL                          3        /* 0x03 Same, assuming
+                                                  multiline: /^/m */
+#define MBOL_tb                          6     /*      0x006 */
+#define MBOL_t8                          7     /*      0x007 */
+#define MBOL_tb_pb                         12  /*      0x00c */
+#define MBOL_tb_p8                         13  /*      0x00d */
+#define MBOL_t8_pb                         14  /*      0x00e */
+#define MBOL_t8_p8                         15  /*      0x00f */
+
+#define SEOL                          4        /* 0x04 Match "" at end of
+                                                  line: /$/ */
+#define SEOL_tb                          8     /*      0x008 */
+#define SEOL_t8                          9     /*      0x009 */
+#define SEOL_tb_pb                         16  /*      0x010 */
+#define SEOL_tb_p8                         17  /*      0x011 */
+#define SEOL_t8_pb                         18  /*      0x012 */
+#define SEOL_t8_p8                         19  /*      0x013 */
+
+#define EOL                           4        /* 0x04 Match "" at end of
+                                                  line: /$/ */
+#define EOL_tb                           8     /*      0x008 */
+#define EOL_t8                           9     /*      0x009 */
+#define EOL_tb_pb                          16  /*      0x010 */
+#define EOL_tb_p8                          17  /*      0x011 */
+#define EOL_t8_pb                          18  /*      0x012 */
+#define EOL_t8_p8                          19  /*      0x013 */
+
+#define MEOL                          5        /* 0x05 Same, assuming
+                                                  multiline: /$/m */
+#define MEOL_tb                         10     /*      0x00a */
+#define MEOL_t8                         11     /*      0x00b */
+#define MEOL_tb_pb                         20  /*      0x014 */
+#define MEOL_tb_p8                         21  /*      0x015 */
+#define MEOL_t8_pb                         22  /*      0x016 */
+#define MEOL_t8_p8                         23  /*      0x017 */
+
+#define EOS                           6        /* 0x06 Match "" at end of
+                                                  string: /\z/ */
+#define EOS_tb                          12     /*      0x00c */
+#define EOS_t8                          13     /*      0x00d */
+#define EOS_tb_pb                          24  /*      0x018 */
+#define EOS_tb_p8                          25  /*      0x019 */
+#define EOS_t8_pb                          26  /*      0x01a */
+#define EOS_t8_p8                          27  /*      0x01b */
+
+#define GPOS                          7        /* 0x07 Matches where last m//g
+                                                  left off. */
+#define GPOS_tb                         14     /*      0x00e */
+#define GPOS_t8                         15     /*      0x00f */
+#define GPOS_tb_pb                         28  /*      0x01c */
+#define GPOS_tb_p8                         29  /*      0x01d */
+#define GPOS_t8_pb                         30  /*      0x01e */
+#define GPOS_t8_p8                         31  /*      0x01f */
+
+#define BOUND                         8        /* 0x08 Like BOUNDA for
+                                                  non-utf8, otherwise like
+                                                  BOUNDU */
+#define BOUND_tb                        16     /*      0x010 */
+#define BOUND_t8                        17     /*      0x011 */
+#define BOUND_tb_pb                        32  /*      0x020 */
+#define BOUND_tb_p8                        33  /*      0x021 */
+#define BOUND_t8_pb                        34  /*      0x022 */
+#define BOUND_t8_p8                        35  /*      0x023 */
+
+#define BOUNDL                        9        /* 0x09 Like BOUND/BOUNDU, but
+                                                  \w and \W are defined by
+                                                  current locale */
+#define BOUNDL_tb                       18     /*      0x012 */
+#define BOUNDL_t8                       19     /*      0x013 */
+#define BOUNDL_tb_pb                       36  /*      0x024 */
+#define BOUNDL_tb_p8                       37  /*      0x025 */
+#define BOUNDL_t8_pb                       38  /*      0x026 */
+#define BOUNDL_t8_p8                       39  /*      0x027 */
+
+#define BOUNDU                       10        /* 0x0a Match "" at any
+                                                  boundary of a given type
+                                                  using /u rules. */
+#define BOUNDU_tb                       20     /*      0x014 */
+#define BOUNDU_t8                       21     /*      0x015 */
+#define BOUNDU_tb_pb                       40  /*      0x028 */
+#define BOUNDU_tb_p8                       41  /*      0x029 */
+#define BOUNDU_t8_pb                       42  /*      0x02a */
+#define BOUNDU_t8_p8                       43  /*      0x02b */
+
+#define BOUNDA                       11        /* 0x0b Match "" at any
+                                                  boundary between \w\W or
+                                                  \W\w, where \w is
+                                                  [_a-zA-Z0-9] */
+#define BOUNDA_tb                       22     /*      0x016 */
+#define BOUNDA_t8                       23     /*      0x017 */
+#define BOUNDA_tb_pb                       44  /*      0x02c */
+#define BOUNDA_tb_p8                       45  /*      0x02d */
+#define BOUNDA_t8_pb                       46  /*      0x02e */
+#define BOUNDA_t8_p8                       47  /*      0x02f */
+
+#define NBOUND                       12        /* 0x0c Like NBOUNDA for
+                                                  non-utf8, otherwise like
+                                                  BOUNDU */
+#define NBOUND_tb                       24     /*      0x018 */
+#define NBOUND_t8                       25     /*      0x019 */
+#define NBOUND_tb_pb                       48  /*      0x030 */
+#define NBOUND_tb_p8                       49  /*      0x031 */
+#define NBOUND_t8_pb                       50  /*      0x032 */
+#define NBOUND_t8_p8                       51  /*      0x033 */
+
+#define NBOUNDL                      13        /* 0x0d Like NBOUND/NBOUNDU,
+                                                  but \w and \W are defined by
+                                                  current locale */
+#define NBOUNDL_tb                      26     /*      0x01a */
+#define NBOUNDL_t8                      27     /*      0x01b */
+#define NBOUNDL_tb_pb                      52  /*      0x034 */
+#define NBOUNDL_tb_p8                      53  /*      0x035 */
+#define NBOUNDL_t8_pb                      54  /*      0x036 */
+#define NBOUNDL_t8_p8                      55  /*      0x037 */
+
+#define NBOUNDU                      14        /* 0x0e Match "" at any
+                                                  non-boundary of a given type
+                                                  using using /u rules. */
+#define NBOUNDU_tb                      28     /*      0x01c */
+#define NBOUNDU_t8                      29     /*      0x01d */
+#define NBOUNDU_tb_pb                      56  /*      0x038 */
+#define NBOUNDU_tb_p8                      57  /*      0x039 */
+#define NBOUNDU_t8_pb                      58  /*      0x03a */
+#define NBOUNDU_t8_p8                      59  /*      0x03b */
+
+#define NBOUNDA                      15        /* 0x0f Match "" betweeen any
+                                                  \w\w or \W\W, where \w is
+                                                  [_a-zA-Z0-9] */
+#define NBOUNDA_tb                      30     /*      0x01e */
+#define NBOUNDA_t8                      31     /*      0x01f */
+#define NBOUNDA_tb_pb                      60  /*      0x03c */
+#define NBOUNDA_tb_p8                      61  /*      0x03d */
+#define NBOUNDA_t8_pb                      62  /*      0x03e */
+#define NBOUNDA_t8_p8                      63  /*      0x03f */
+
+#define REG_ANY                      16        /* 0x10 Match any one character
+                                                  (except newline). */
+#define REG_ANY_tb                      32     /*      0x020 */
+#define REG_ANY_t8                      33     /*      0x021 */
+#define REG_ANY_tb_pb                      64  /*      0x040 */
+#define REG_ANY_tb_p8                      65  /*      0x041 */
+#define REG_ANY_t8_pb                      66  /*      0x042 */
+#define REG_ANY_t8_p8                      67  /*      0x043 */
+
+#define SANY                         17        /* 0x11 Match any one
+                                                  character. */
+#define SANY_tb                         34     /*      0x022 */
+#define SANY_t8                         35     /*      0x023 */
+#define SANY_tb_pb                         68  /*      0x044 */
+#define SANY_tb_p8                         69  /*      0x045 */
+#define SANY_t8_pb                         70  /*      0x046 */
+#define SANY_t8_p8                         71  /*      0x047 */
+
+#define ANYOF                        18        /* 0x12 Match character in (or
+                                                  not in) this class, single
+                                                  char match only */
+#define ANYOF_tb                        36     /*      0x024 */
+#define ANYOF_t8                        37     /*      0x025 */
+#define ANYOF_tb_pb                        72  /*      0x048 */
+#define ANYOF_tb_p8                        73  /*      0x049 */
+#define ANYOF_t8_pb                        74  /*      0x04a */
+#define ANYOF_t8_p8                        75  /*      0x04b */
+
+#define ANYOFD                       19        /* 0x13 Like ANYOF, but /d is
+                                                  in effect */
+#define ANYOFD_tb                       38     /*      0x026 */
+#define ANYOFD_t8                       39     /*      0x027 */
+#define ANYOFD_tb_pb                       76  /*      0x04c */
+#define ANYOFD_tb_p8                       77  /*      0x04d */
+#define ANYOFD_t8_pb                       78  /*      0x04e */
+#define ANYOFD_t8_p8                       79  /*      0x04f */
+
+#define ANYOFL                       20        /* 0x14 Like ANYOF, but /l is
+                                                  in effect */
+#define ANYOFL_tb                       40     /*      0x028 */
+#define ANYOFL_t8                       41     /*      0x029 */
+#define ANYOFL_tb_pb                       80  /*      0x050 */
+#define ANYOFL_tb_p8                       81  /*      0x051 */
+#define ANYOFL_t8_pb                       82  /*      0x052 */
+#define ANYOFL_t8_p8                       83  /*      0x053 */
+
+#define ANYOFPOSIXL                  21        /* 0x15 Like ANYOFL, but
+                                                  matches [[:posix:]] classes
+                                               */
+#define ANYOFPOSIXL_tb                  42     /*      0x02a */
+#define ANYOFPOSIXL_t8                  43     /*      0x02b */
+#define ANYOFPOSIXL_tb_pb                  84  /*      0x054 */
+#define ANYOFPOSIXL_tb_p8                  85  /*      0x055 */
+#define ANYOFPOSIXL_t8_pb                  86  /*      0x056 */
+#define ANYOFPOSIXL_t8_p8                  87  /*      0x057 */
+
+#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 ANYOFH_tb                       44     /*      0x02c */
+#define ANYOFH_t8                       45     /*      0x02d */
+#define ANYOFH_tb_pb                       88  /*      0x058 */
+#define ANYOFH_tb_p8                       89  /*      0x059 */
+#define ANYOFH_t8_pb                       90  /*      0x05a */
+#define ANYOFH_t8_p8                       91  /*      0x05b */
+
+#define ANYOFHb                      23        /* 0x17 Like ANYOFH, but all
+                                                  matches share the same UTF-8
+                                                  start byte, given in the
+                                                  flags field */
+#define ANYOFHb_tb                      46     /*      0x02e */
+#define ANYOFHb_t8                      47     /*      0x02f */
+#define ANYOFHb_tb_pb                      92  /*      0x05c */
+#define ANYOFHb_tb_p8                      93  /*      0x05d */
+#define ANYOFHb_t8_pb                      94  /*      0x05e */
+#define ANYOFHb_t8_p8                      95  /*      0x05f */
+
+#define ANYOFHr                      24        /* 0x18 Like ANYOFH, but the
+                                                  flags field contains packed
+                                                  bounds for all matchable
+                                                  UTF-8 start bytes. */
+#define ANYOFHr_tb                      48     /*      0x030 */
+#define ANYOFHr_t8                      49     /*      0x031 */
+#define ANYOFHr_tb_pb                      96  /*      0x060 */
+#define ANYOFHr_tb_p8                      97  /*      0x061 */
+#define ANYOFHr_t8_pb                      98  /*      0x062 */
+#define ANYOFHr_t8_p8                      99  /*      0x063 */
+
+#define ANYOFHs                      25        /* 0x19 Like ANYOFHb, but has a
+                                                  string field that gives the
+                                                  leading matchable UTF-8
+                                                  bytes; flags field is len */
+#define ANYOFHs_tb                      50     /*      0x032 */
+#define ANYOFHs_t8                      51     /*      0x033 */
+#define ANYOFHs_tb_pb                     100  /*      0x064 */
+#define ANYOFHs_tb_p8                     101  /*      0x065 */
+#define ANYOFHs_t8_pb                     102  /*      0x066 */
+#define ANYOFHs_t8_p8                     103  /*      0x067 */
+
+#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 ANYOFR_tb                       52     /*      0x034 */
+#define ANYOFR_t8                       53     /*      0x035 */
+#define ANYOFR_tb_pb                      104  /*      0x068 */
+#define ANYOFR_tb_p8                      105  /*      0x069 */
+#define ANYOFR_t8_pb                      106  /*      0x06a */
+#define ANYOFR_t8_p8                      107  /*      0x06b */
+
+#define ANYOFRb                      27        /* 0x1b Like ANYOFR, but all
+                                                  matches share the same UTF-8
+                                                  start byte, given in the
+                                                  flags field */
+#define ANYOFRb_tb                      54     /*      0x036 */
+#define ANYOFRb_t8                      55     /*      0x037 */
+#define ANYOFRb_tb_pb                     108  /*      0x06c */
+#define ANYOFRb_tb_p8                     109  /*      0x06d */
+#define ANYOFRb_t8_pb                     110  /*      0x06e */
+#define ANYOFRb_t8_p8                     111  /*      0x06f */
+
+#define ANYOFHbbm                    28        /* 0x1c Like ANYOFHb, but only
+                                                  for 2-byte UTF-8 characters;
+                                                  uses a bitmap to match the
+                                                  continuation byte */
+#define ANYOFHbbm_tb                    56     /*      0x038 */
+#define ANYOFHbbm_t8                    57     /*      0x039 */
+#define ANYOFHbbm_tb_pb                   112  /*      0x070 */
+#define ANYOFHbbm_tb_p8                   113  /*      0x071 */
+#define ANYOFHbbm_t8_pb                   114  /*      0x072 */
+#define ANYOFHbbm_t8_p8                   115  /*      0x073 */
+
+#define ANYOFM                       29        /* 0x1d Like ANYOF, but matches
+                                                  an invariant byte as
+                                                  determined by the mask and
+                                                  arg */
+#define ANYOFM_tb                       58     /*      0x03a */
+#define ANYOFM_t8                       59     /*      0x03b */
+#define ANYOFM_tb_pb                      116  /*      0x074 */
+#define ANYOFM_tb_p8                      117  /*      0x075 */
+#define ANYOFM_t8_pb                      118  /*      0x076 */
+#define ANYOFM_t8_p8                      119  /*      0x077 */
+
+#define NANYOFM                      30        /* 0x1e complement of ANYOFM */
+#define NANYOFM_tb                      60     /*      0x03c */
+#define NANYOFM_t8                      61     /*      0x03d */
+#define NANYOFM_tb_pb                     120  /*      0x078 */
+#define NANYOFM_tb_p8                     121  /*      0x079 */
+#define NANYOFM_t8_pb                     122  /*      0x07a */
+#define NANYOFM_t8_p8                     123  /*      0x07b */
+
+#define POSIXD                       31        /* 0x1f Some [[:class:]] under
+                                                  /d; the FLAGS field gives
+                                                  which one */
+#define POSIXD_tb                       62     /*      0x03e */
+#define POSIXD_t8                       63     /*      0x03f */
+#define POSIXD_tb_pb                      124  /*      0x07c */
+#define POSIXD_tb_p8                      125  /*      0x07d */
+#define POSIXD_t8_pb                      126  /*      0x07e */
+#define POSIXD_t8_p8                      127  /*      0x07f */
+
+#define POSIXL                       32        /* 0x20 Some [[:class:]] under
+                                                  /l; the FLAGS field gives
+                                                  which one */
+#define POSIXL_tb                       64     /*      0x040 */
+#define POSIXL_t8                       65     /*      0x041 */
+#define POSIXL_tb_pb                      128  /*      0x080 */
+#define POSIXL_tb_p8                      129  /*      0x081 */
+#define POSIXL_t8_pb                      130  /*      0x082 */
+#define POSIXL_t8_p8                      131  /*      0x083 */
+
+#define POSIXU                       33        /* 0x21 Some [[:class:]] under
+                                                  /u; the FLAGS field gives
+                                                  which one */
+#define POSIXU_tb                       66     /*      0x042 */
+#define POSIXU_t8                       67     /*      0x043 */
+#define POSIXU_tb_pb                      132  /*      0x084 */
+#define POSIXU_tb_p8                      133  /*      0x085 */
+#define POSIXU_t8_pb                      134  /*      0x086 */
+#define POSIXU_t8_p8                      135  /*      0x087 */
+
+#define POSIXA                       34        /* 0x22 Some [[:class:]] under
+                                                  /a; the FLAGS field gives
+                                                  which one */
+#define POSIXA_tb                       68     /*      0x044 */
+#define POSIXA_t8                       69     /*      0x045 */
+#define POSIXA_tb_pb                      136  /*      0x088 */
+#define POSIXA_tb_p8                      137  /*      0x089 */
+#define POSIXA_t8_pb                      138  /*      0x08a */
+#define POSIXA_t8_p8                      139  /*      0x08b */
+
+#define NPOSIXD                      35        /* 0x23 complement of POSIXD,
+                                                  [[:^class:]] */
+#define NPOSIXD_tb                      70     /*      0x046 */
+#define NPOSIXD_t8                      71     /*      0x047 */
+#define NPOSIXD_tb_pb                     140  /*      0x08c */
+#define NPOSIXD_tb_p8                     141  /*      0x08d */
+#define NPOSIXD_t8_pb                     142  /*      0x08e */
+#define NPOSIXD_t8_p8                     143  /*      0x08f */
+
+#define NPOSIXL                      36        /* 0x24 complement of POSIXL,
+                                                  [[:^class:]] */
+#define NPOSIXL_tb                      72     /*      0x048 */
+#define NPOSIXL_t8                      73     /*      0x049 */
+#define NPOSIXL_tb_pb                     144  /*      0x090 */
+#define NPOSIXL_tb_p8                     145  /*      0x091 */
+#define NPOSIXL_t8_pb                     146  /*      0x092 */
+#define NPOSIXL_t8_p8                     147  /*      0x093 */
+
+#define NPOSIXU                      37        /* 0x25 complement of POSIXU,
+                                                  [[:^class:]] */
+#define NPOSIXU_tb                      74     /*      0x04a */
+#define NPOSIXU_t8                      75     /*      0x04b */
+#define NPOSIXU_tb_pb                     148  /*      0x094 */
+#define NPOSIXU_tb_p8                     149  /*      0x095 */
+#define NPOSIXU_t8_pb                     150  /*      0x096 */
+#define NPOSIXU_t8_p8                     151  /*      0x097 */
+
+#define NPOSIXA                      38        /* 0x26 complement of POSIXA,
+                                                  [[:^class:]] */
+#define NPOSIXA_tb                      76     /*      0x04c */
+#define NPOSIXA_t8                      77     /*      0x04d */
+#define NPOSIXA_tb_pb                     152  /*      0x098 */
+#define NPOSIXA_tb_p8                     153  /*      0x099 */
+#define NPOSIXA_t8_pb                     154  /*      0x09a */
+#define NPOSIXA_t8_p8                     155  /*      0x09b */
+
+#define CLUMP                        39        /* 0x27 Match any extended
+                                                  grapheme cluster sequence */
+#define CLUMP_tb                        78     /*      0x04e */
+#define CLUMP_t8                        79     /*      0x04f */
+#define CLUMP_tb_pb                       156  /*      0x09c */
+#define CLUMP_tb_p8                       157  /*      0x09d */
+#define CLUMP_t8_pb                       158  /*      0x09e */
+#define CLUMP_t8_p8                       159  /*      0x09f */
+
+#define BRANCH                       40        /* 0x28 Match this alternative,
+                                                  or the next... */
+#define BRANCH_tb                       80     /*      0x050 */
+#define BRANCH_t8                       81     /*      0x051 */
+#define BRANCH_tb_pb                      160  /*      0x0a0 */
+#define BRANCH_tb_p8                      161  /*      0x0a1 */
+#define BRANCH_t8_pb                      162  /*      0x0a2 */
+#define BRANCH_t8_p8                      163  /*      0x0a3 */
+
+#define EXACT                        41        /* 0x29 Match this string
+                                                  (flags field is the length).
+                                               */
+#define EXACT_tb                        82     /*      0x052 */
+#define EXACT_t8                        83     /*      0x053 */
+#define EXACT_tb_pb                       164  /*      0x0a4 */
+#define EXACT_tb_p8                       165  /*      0x0a5 */
+#define EXACT_t8_pb                       166  /*      0x0a6 */
+#define EXACT_t8_p8                       167  /*      0x0a7 */
+
+#define LEXACT                       42        /* 0x2a Match this long string
+                                                  (preceded by length; flags
+                                                  unused). */
+#define LEXACT_tb                       84     /*      0x054 */
+#define LEXACT_t8                       85     /*      0x055 */
+#define LEXACT_tb_pb                      168  /*      0x0a8 */
+#define LEXACT_tb_p8                      169  /*      0x0a9 */
+#define LEXACT_t8_pb                      170  /*      0x0aa */
+#define LEXACT_t8_p8                      171  /*      0x0ab */
+
+#define EXACTL                       43        /* 0x2b Like EXACT, but /l is
+                                                  in effect (used so
+                                                  locale-related warnings can
+                                                  be checked for) */
+#define EXACTL_tb                       86     /*      0x056 */
+#define EXACTL_t8                       87     /*      0x057 */
+#define EXACTL_tb_pb                      172  /*      0x0ac */
+#define EXACTL_tb_p8                      173  /*      0x0ad */
+#define EXACTL_t8_pb                      174  /*      0x0ae */
+#define EXACTL_t8_p8                      175  /*      0x0af */
+
+#define EXACTF                       44        /* 0x2c Like EXACT, but match
+                                                  using /id rules; (string not
+                                                  UTF-8, ASCII folded;
+                                                  non-ASCII not) */
+#define EXACTF_tb                       88     /*      0x058 */
+#define EXACTF_t8                       89     /*      0x059 */
+#define EXACTF_tb_pb                      176  /*      0x0b0 */
+#define EXACTF_tb_p8                      177  /*      0x0b1 */
+#define EXACTF_t8_pb                      178  /*      0x0b2 */
+#define EXACTF_t8_p8                      179  /*      0x0b3 */
+
+#define EXACTFL                      45        /* 0x2d Like EXACT, but match
+                                                  using /il rules; (string not
+                                                  likely to be folded) */
+#define EXACTFL_tb                      90     /*      0x05a */
+#define EXACTFL_t8                      91     /*      0x05b */
+#define EXACTFL_tb_pb                     180  /*      0x0b4 */
+#define EXACTFL_tb_p8                     181  /*      0x0b5 */
+#define EXACTFL_t8_pb                     182  /*      0x0b6 */
+#define EXACTFL_t8_p8                     183  /*      0x0b7 */
+
+#define EXACTFU                      46        /* 0x2e Like EXACT, but match
+                                                  using /iu rules; (string
+                                                  folded) */
+#define EXACTFU_tb                      92     /*      0x05c */
+#define EXACTFU_t8                      93     /*      0x05d */
+#define EXACTFU_tb_pb                     184  /*      0x0b8 */
+#define EXACTFU_tb_p8                     185  /*      0x0b9 */
+#define EXACTFU_t8_pb                     186  /*      0x0ba */
+#define EXACTFU_t8_p8                     187  /*      0x0bb */
+
+#define EXACTFAA                     47        /* 0x2f Like EXACT, but match
+                                                  using /iaa rules; (string
+                                                  folded except MICRO in
+                                                  non-UTF8 patterns; doesn't
+                                                  contain SHARP S unless
+                                                  UTF-8; folded length <=
+                                                  unfolded) */
+#define EXACTFAA_tb                     94     /*      0x05e */
+#define EXACTFAA_t8                     95     /*      0x05f */
+#define EXACTFAA_tb_pb                    188  /*      0x0bc */
+#define EXACTFAA_tb_p8                    189  /*      0x0bd */
+#define EXACTFAA_t8_pb                    190  /*      0x0be */
+#define EXACTFAA_t8_p8                    191  /*      0x0bf */
+
+#define EXACTFAA_NO_TRIE             48        /* 0x30 Like EXACTFAA, (string
+                                                  not UTF-8, folded except:
+                                                  MICRO, SHARP S; folded
+                                                  length <= unfolded, not
+                                                  currently trie-able) */
+#define EXACTFAA_NO_TRIE_tb             96     /*      0x060 */
+#define EXACTFAA_NO_TRIE_t8             97     /*      0x061 */
+#define EXACTFAA_NO_TRIE_tb_pb            192  /*      0x0c0 */
+#define EXACTFAA_NO_TRIE_tb_p8            193  /*      0x0c1 */
+#define EXACTFAA_NO_TRIE_t8_pb            194  /*      0x0c2 */
+#define EXACTFAA_NO_TRIE_t8_p8            195  /*      0x0c3 */
+
+#define EXACTFUP                     49        /* 0x31 Like EXACT, but match
+                                                  using /iu rules; (string not
+                                                  UTF-8, folded except MICRO:
+                                                  hence Problematic) */
+#define EXACTFUP_tb                     98     /*      0x062 */
+#define EXACTFUP_t8                     99     /*      0x063 */
+#define EXACTFUP_tb_pb                    196  /*      0x0c4 */
+#define EXACTFUP_tb_p8                    197  /*      0x0c5 */
+#define EXACTFUP_t8_pb                    198  /*      0x0c6 */
+#define EXACTFUP_t8_p8                    199  /*      0x0c7 */
+
+#define EXACTFLU8                    50        /* 0x32 Like EXACTFU, but use
+                                                  /il, UTF-8, (string is
+                                                  folded, and everything in it
+                                                  is above 255 */
+#define EXACTFLU8_tb                   100     /*      0x064 */
+#define EXACTFLU8_t8                   101     /*      0x065 */
+#define EXACTFLU8_tb_pb                   200  /*      0x0c8 */
+#define EXACTFLU8_tb_p8                   201  /*      0x0c9 */
+#define EXACTFLU8_t8_pb                   202  /*      0x0ca */
+#define EXACTFLU8_t8_p8                   203  /*      0x0cb */
+
+#define EXACT_REQ8                   51        /* 0x33 Like EXACT, but only
+                                                  UTF-8 encoded targets can
+                                                  match */
+#define EXACT_REQ8_tb                  102     /*      0x066 */
+#define EXACT_REQ8_t8                  103     /*      0x067 */
+#define EXACT_REQ8_tb_pb                  204  /*      0x0cc */
+#define EXACT_REQ8_tb_p8                  205  /*      0x0cd */
+#define EXACT_REQ8_t8_pb                  206  /*      0x0ce */
+#define EXACT_REQ8_t8_p8                  207  /*      0x0cf */
+
+#define LEXACT_REQ8                  52        /* 0x34 Like LEXACT, but only
+                                                  UTF-8 encoded targets can
+                                                  match */
+#define LEXACT_REQ8_tb                 104     /*      0x068 */
+#define LEXACT_REQ8_t8                 105     /*      0x069 */
+#define LEXACT_REQ8_tb_pb                 208  /*      0x0d0 */
+#define LEXACT_REQ8_tb_p8                 209  /*      0x0d1 */
+#define LEXACT_REQ8_t8_pb                 210  /*      0x0d2 */
+#define LEXACT_REQ8_t8_p8                 211  /*      0x0d3 */
+
+#define EXACTFU_REQ8                 53        /* 0x35 Like EXACTFU, but only
+                                                  UTF-8 encoded targets can
+                                                  match */
+#define EXACTFU_REQ8_tb                106     /*      0x06a */
+#define EXACTFU_REQ8_t8                107     /*      0x06b */
+#define EXACTFU_REQ8_tb_pb                212  /*      0x0d4 */
+#define EXACTFU_REQ8_tb_p8                213  /*      0x0d5 */
+#define EXACTFU_REQ8_t8_pb                214  /*      0x0d6 */
+#define EXACTFU_REQ8_t8_p8                215  /*      0x0d7 */
+
+#define EXACTFU_S_EDGE               54        /* 0x36 /di rules, but nothing
+                                                  in it precludes /ui, except
+                                                  begins and/or ends with
+                                                  [Ss]; (string not UTF-8;
+                                                  compile-time only) */
+#define EXACTFU_S_EDGE_tb              108     /*      0x06c */
+#define EXACTFU_S_EDGE_t8              109     /*      0x06d */
+#define EXACTFU_S_EDGE_tb_pb              216  /*      0x0d8 */
+#define EXACTFU_S_EDGE_tb_p8              217  /*      0x0d9 */
+#define EXACTFU_S_EDGE_t8_pb              218  /*      0x0da */
+#define EXACTFU_S_EDGE_t8_p8              219  /*      0x0db */
+
+#define LNBREAK                      55        /* 0x37 generic newline pattern
+                                               */
+#define LNBREAK_tb                     110     /*      0x06e */
+#define LNBREAK_t8                     111     /*      0x06f */
+#define LNBREAK_tb_pb                     220  /*      0x0dc */
+#define LNBREAK_tb_p8                     221  /*      0x0dd */
+#define LNBREAK_t8_pb                     222  /*      0x0de */
+#define LNBREAK_t8_p8                     223  /*      0x0df */
+
+#define TRIE                         56        /* 0x38 Match many
+                                                  EXACT(F[ALU]?)? at once.
+                                                  flags==type */
+#define TRIE_tb                        112     /*      0x070 */
+#define TRIE_t8                        113     /*      0x071 */
+#define TRIE_tb_pb                        224  /*      0x0e0 */
+#define TRIE_tb_p8                        225  /*      0x0e1 */
+#define TRIE_t8_pb                        226  /*      0x0e2 */
+#define TRIE_t8_p8                        227  /*      0x0e3 */
+
+#define TRIEC                        57        /* 0x39 Same as TRIE, but with
+                                                  embedded charclass data */
+#define TRIEC_tb                       114     /*      0x072 */
+#define TRIEC_t8                       115     /*      0x073 */
+#define TRIEC_tb_pb                       228  /*      0x0e4 */
+#define TRIEC_tb_p8                       229  /*      0x0e5 */
+#define TRIEC_t8_pb                       230  /*      0x0e6 */
+#define TRIEC_t8_p8                       231  /*      0x0e7 */
+
+#define AHOCORASICK                  58        /* 0x3a Aho Corasick stclass.
+                                                  flags==type */
+#define AHOCORASICK_tb                 116     /*      0x074 */
+#define AHOCORASICK_t8                 117     /*      0x075 */
+#define AHOCORASICK_tb_pb                 232  /*      0x0e8 */
+#define AHOCORASICK_tb_p8                 233  /*      0x0e9 */
+#define AHOCORASICK_t8_pb                 234  /*      0x0ea */
+#define AHOCORASICK_t8_p8                 235  /*      0x0eb */
+
+#define AHOCORASICKC                 59        /* 0x3b Same as AHOCORASICK,
+                                                  but with embedded charclass
+                                                  data */
+#define AHOCORASICKC_tb                118     /*      0x076 */
+#define AHOCORASICKC_t8                119     /*      0x077 */
+#define AHOCORASICKC_tb_pb                236  /*      0x0ec */
+#define AHOCORASICKC_tb_p8                237  /*      0x0ed */
+#define AHOCORASICKC_t8_pb                238  /*      0x0ee */
+#define AHOCORASICKC_t8_p8                239  /*      0x0ef */
+
+#define NOTHING                      60        /* 0x3c Match empty string. */
+#define NOTHING_tb                     120     /*      0x078 */
+#define NOTHING_t8                     121     /*      0x079 */
+#define NOTHING_tb_pb                     240  /*      0x0f0 */
+#define NOTHING_tb_p8                     241  /*      0x0f1 */
+#define NOTHING_t8_pb                     242  /*      0x0f2 */
+#define NOTHING_t8_p8                     243  /*      0x0f3 */
+
+#define TAIL                         61        /* 0x3d Match empty string. Can
+                                                  jump here from outside. */
+#define TAIL_tb                        122     /*      0x07a */
+#define TAIL_t8                        123     /*      0x07b */
+#define TAIL_tb_pb                        244  /*      0x0f4 */
+#define TAIL_tb_p8                        245  /*      0x0f5 */
+#define TAIL_t8_pb                        246  /*      0x0f6 */
+#define TAIL_t8_p8                        247  /*      0x0f7 */
+
+#define STAR                         62        /* 0x3e Match this (simple)
+                                                  thing 0 or more times:
+                                                  /A{0,}B/ where A is width 1
+                                                  char */
+#define STAR_tb                        124     /*      0x07c */
+#define STAR_t8                        125     /*      0x07d */
+#define STAR_tb_pb                        248  /*      0x0f8 */
+#define STAR_tb_p8                        249  /*      0x0f9 */
+#define STAR_t8_pb                        250  /*      0x0fa */
+#define STAR_t8_p8                        251  /*      0x0fb */
+
+#define PLUS                         63        /* 0x3f Match this (simple)
+                                                  thing 1 or more times:
+                                                  /A{1,}B/ where A is width 1
+                                                  char */
+#define PLUS_tb                        126     /*      0x07e */
+#define PLUS_t8                        127     /*      0x07f */
+#define PLUS_tb_pb                        252  /*      0x0fc */
+#define PLUS_tb_p8                        253  /*      0x0fd */
+#define PLUS_t8_pb                        254  /*      0x0fe */
+#define PLUS_t8_p8                        255  /*      0x0ff */
+
+#define CURLY                        64        /* 0x40 Match this (simple)
+                                                  thing {n,m} times: /A{m,n}B/
+                                                  where A is width 1 char */
+#define CURLY_tb                       128     /*      0x080 */
+#define CURLY_t8                       129     /*      0x081 */
+#define CURLY_tb_pb                       256  /*      0x100 */
+#define CURLY_tb_p8                       257  /*      0x101 */
+#define CURLY_t8_pb                       258  /*      0x102 */
+#define CURLY_t8_p8                       259  /*      0x103 */
+
+#define CURLYN                       65        /* 0x41 Capture next-after-this
+                                                  simple thing: /(A){m,n}B/
+                                                  where A is width 1 char */
+#define CURLYN_tb                      130     /*      0x082 */
+#define CURLYN_t8                      131     /*      0x083 */
+#define CURLYN_tb_pb                      260  /*      0x104 */
+#define CURLYN_tb_p8                      261  /*      0x105 */
+#define CURLYN_t8_pb                      262  /*      0x106 */
+#define CURLYN_t8_p8                      263  /*      0x107 */
+
+#define CURLYM                       66        /* 0x42 Capture this
+                                                  medium-complex thing {n,m}
+                                                  times: /(A){m,n}B/ where A
+                                                  is fixed-length */
+#define CURLYM_tb                      132     /*      0x084 */
+#define CURLYM_t8                      133     /*      0x085 */
+#define CURLYM_tb_pb                      264  /*      0x108 */
+#define CURLYM_tb_p8                      265  /*      0x109 */
+#define CURLYM_t8_pb                      266  /*      0x10a */
+#define CURLYM_t8_p8                      267  /*      0x10b */
+
+#define CURLYX                       67        /* 0x43 Match/Capture this
+                                                  complex thing {n,m} times.
+                                               */
+#define CURLYX_tb                      134     /*      0x086 */
+#define CURLYX_t8                      135     /*      0x087 */
+#define CURLYX_tb_pb                      268  /*      0x10c */
+#define CURLYX_tb_p8                      269  /*      0x10d */
+#define CURLYX_t8_pb                      270  /*      0x10e */
+#define CURLYX_t8_p8                      271  /*      0x10f */
+
+#define WHILEM                       68        /* 0x44 Do curly processing and
+                                                  see if rest matches. */
+#define WHILEM_tb                      136     /*      0x088 */
+#define WHILEM_t8                      137     /*      0x089 */
+#define WHILEM_tb_pb                      272  /*      0x110 */
+#define WHILEM_tb_p8                      273  /*      0x111 */
+#define WHILEM_t8_pb                      274  /*      0x112 */
+#define WHILEM_t8_p8                      275  /*      0x113 */
+
+#define OPEN                         69        /* 0x45 Mark this point in
+                                                  input as start of #n. */
+#define OPEN_tb                        138     /*      0x08a */
+#define OPEN_t8                        139     /*      0x08b */
+#define OPEN_tb_pb                        276  /*      0x114 */
+#define OPEN_tb_p8                        277  /*      0x115 */
+#define OPEN_t8_pb                        278  /*      0x116 */
+#define OPEN_t8_p8                        279  /*      0x117 */
+
+#define CLOSE                        70        /* 0x46 Close corresponding
+                                                  OPEN of #n. */
+#define CLOSE_tb                       140     /*      0x08c */
+#define CLOSE_t8                       141     /*      0x08d */
+#define CLOSE_tb_pb                       280  /*      0x118 */
+#define CLOSE_tb_p8                       281  /*      0x119 */
+#define CLOSE_t8_pb                       282  /*      0x11a */
+#define CLOSE_t8_p8                       283  /*      0x11b */
+
+#define SROPEN                       71        /* 0x47 Same as OPEN, but for
+                                                  script run */
+#define SROPEN_tb                      142     /*      0x08e */
+#define SROPEN_t8                      143     /*      0x08f */
+#define SROPEN_tb_pb                      284  /*      0x11c */
+#define SROPEN_tb_p8                      285  /*      0x11d */
+#define SROPEN_t8_pb                      286  /*      0x11e */
+#define SROPEN_t8_p8                      287  /*      0x11f */
+
+#define SRCLOSE                      72        /* 0x48 Close preceding SROPEN
+                                               */
+#define SRCLOSE_tb                     144     /*      0x090 */
+#define SRCLOSE_t8                     145     /*      0x091 */
+#define SRCLOSE_tb_pb                     288  /*      0x120 */
+#define SRCLOSE_tb_p8                     289  /*      0x121 */
+#define SRCLOSE_t8_pb                     290  /*      0x122 */
+#define SRCLOSE_t8_p8                     291  /*      0x123 */
+
+#define REF                          73        /* 0x49 Match some already
+                                                  matched string */
+#define REF_tb                         146     /*      0x092 */
+#define REF_t8                         147     /*      0x093 */
+#define REF_tb_pb                         292  /*      0x124 */
+#define REF_tb_p8                         293  /*      0x125 */
+#define REF_t8_pb                         294  /*      0x126 */
+#define REF_t8_p8                         295  /*      0x127 */
+
+#define REFF                         74        /* 0x4a Match already matched
+                                                  string, using /di rules. */
+#define REFF_tb                        148     /*      0x094 */
+#define REFF_t8                        149     /*      0x095 */
+#define REFF_tb_pb                        296  /*      0x128 */
+#define REFF_tb_p8                        297  /*      0x129 */
+#define REFF_t8_pb                        298  /*      0x12a */
+#define REFF_t8_p8                        299  /*      0x12b */
+
+#define REFFL                        75        /* 0x4b Match already matched
+                                                  string, using /li rules. */
+#define REFFL_tb                       150     /*      0x096 */
+#define REFFL_t8                       151     /*      0x097 */
+#define REFFL_tb_pb                       300  /*      0x12c */
+#define REFFL_tb_p8                       301  /*      0x12d */
+#define REFFL_t8_pb                       302  /*      0x12e */
+#define REFFL_t8_p8                       303  /*      0x12f */
+
+#define REFFU                        76        /* 0x4c Match already matched
+                                                  string, usng /ui. */
+#define REFFU_tb                       152     /*      0x098 */
+#define REFFU_t8                       153     /*      0x099 */
+#define REFFU_tb_pb                       304  /*      0x130 */
+#define REFFU_tb_p8                       305  /*      0x131 */
+#define REFFU_t8_pb                       306  /*      0x132 */
+#define REFFU_t8_p8                       307  /*      0x133 */
+
+#define REFFA                        77        /* 0x4d Match already matched
+                                                  string, using /aai rules. */
+#define REFFA_tb                       154     /*      0x09a */
+#define REFFA_t8                       155     /*      0x09b */
+#define REFFA_tb_pb                       308  /*      0x134 */
+#define REFFA_tb_p8                       309  /*      0x135 */
+#define REFFA_t8_pb                       310  /*      0x136 */
+#define REFFA_t8_p8                       311  /*      0x137 */
+
+#define REFN                         78        /* 0x4e Match some already
+                                                  matched string */
+#define REFN_tb                        156     /*      0x09c */
+#define REFN_t8                        157     /*      0x09d */
+#define REFN_tb_pb                        312  /*      0x138 */
+#define REFN_tb_p8                        313  /*      0x139 */
+#define REFN_t8_pb                        314  /*      0x13a */
+#define REFN_t8_p8                        315  /*      0x13b */
+
+#define REFFN                        79        /* 0x4f Match already matched
+                                                  string, using /di rules. */
+#define REFFN_tb                       158     /*      0x09e */
+#define REFFN_t8                       159     /*      0x09f */
+#define REFFN_tb_pb                       316  /*      0x13c */
+#define REFFN_tb_p8                       317  /*      0x13d */
+#define REFFN_t8_pb                       318  /*      0x13e */
+#define REFFN_t8_p8                       319  /*      0x13f */
+
+#define REFFLN                       80        /* 0x50 Match already matched
+                                                  string, using /li rules. */
+#define REFFLN_tb                      160     /*      0x0a0 */
+#define REFFLN_t8                      161     /*      0x0a1 */
+#define REFFLN_tb_pb                      320  /*      0x140 */
+#define REFFLN_tb_p8                      321  /*      0x141 */
+#define REFFLN_t8_pb                      322  /*      0x142 */
+#define REFFLN_t8_p8                      323  /*      0x143 */
+
+#define REFFUN                       81        /* 0x51 Match already matched
+                                                  string, using /ui rules. */
+#define REFFUN_tb                      162     /*      0x0a2 */
+#define REFFUN_t8                      163     /*      0x0a3 */
+#define REFFUN_tb_pb                      324  /*      0x144 */
+#define REFFUN_tb_p8                      325  /*      0x145 */
+#define REFFUN_t8_pb                      326  /*      0x146 */
+#define REFFUN_t8_p8                      327  /*      0x147 */
+
+#define REFFAN                       82        /* 0x52 Match already matched
+                                                  string, using /aai rules. */
+#define REFFAN_tb                      164     /*      0x0a4 */
+#define REFFAN_t8                      165     /*      0x0a5 */
+#define REFFAN_tb_pb                      328  /*      0x148 */
+#define REFFAN_tb_p8                      329  /*      0x149 */
+#define REFFAN_t8_pb                      330  /*      0x14a */
+#define REFFAN_t8_p8                      331  /*      0x14b */
+
+#define LONGJMP                      83        /* 0x53 Jump far away. */
+#define LONGJMP_tb                     166     /*      0x0a6 */
+#define LONGJMP_t8                     167     /*      0x0a7 */
+#define LONGJMP_tb_pb                     332  /*      0x14c */
+#define LONGJMP_tb_p8                     333  /*      0x14d */
+#define LONGJMP_t8_pb                     334  /*      0x14e */
+#define LONGJMP_t8_p8                     335  /*      0x14f */
+
+#define BRANCHJ                      84        /* 0x54 BRANCH with long
+                                                  offset. */
+#define BRANCHJ_tb                     168     /*      0x0a8 */
+#define BRANCHJ_t8                     169     /*      0x0a9 */
+#define BRANCHJ_tb_pb                     336  /*      0x150 */
+#define BRANCHJ_tb_p8                     337  /*      0x151 */
+#define BRANCHJ_t8_pb                     338  /*      0x152 */
+#define BRANCHJ_t8_p8                     339  /*      0x153 */
+
+#define IFMATCH                      85        /* 0x55 Succeeds if the
+                                                  following matches; non-zero
+                                                  flags "f", next_off "o"
+                                                  means lookbehind assertion
+                                                  starting "f..(f-o)"
+                                                  characters before current */
+#define IFMATCH_tb                     170     /*      0x0aa */
+#define IFMATCH_t8                     171     /*      0x0ab */
+#define IFMATCH_tb_pb                     340  /*      0x154 */
+#define IFMATCH_tb_p8                     341  /*      0x155 */
+#define IFMATCH_t8_pb                     342  /*      0x156 */
+#define IFMATCH_t8_p8                     343  /*      0x157 */
+
+#define UNLESSM                      86        /* 0x56 Fails if the following
+                                                  matches; non-zero flags "f",
+                                                  next_off "o" means
+                                                  lookbehind assertion
+                                                  starting "f..(f-o)"
+                                                  characters before current */
+#define UNLESSM_tb                     172     /*      0x0ac */
+#define UNLESSM_t8                     173     /*      0x0ad */
+#define UNLESSM_tb_pb                     344  /*      0x158 */
+#define UNLESSM_tb_p8                     345  /*      0x159 */
+#define UNLESSM_t8_pb                     346  /*      0x15a */
+#define UNLESSM_t8_p8                     347  /*      0x15b */
+
+#define SUSPEND                      87        /* 0x57 "Independent" sub-RE.
+                                               */
+#define SUSPEND_tb                     174     /*      0x0ae */
+#define SUSPEND_t8                     175     /*      0x0af */
+#define SUSPEND_tb_pb                     348  /*      0x15c */
+#define SUSPEND_tb_p8                     349  /*      0x15d */
+#define SUSPEND_t8_pb                     350  /*      0x15e */
+#define SUSPEND_t8_p8                     351  /*      0x15f */
+
+#define IFTHEN                       88        /* 0x58 Switch, should be
+                                                  preceded by switcher. */
+#define IFTHEN_tb                      176     /*      0x0b0 */
+#define IFTHEN_t8                      177     /*      0x0b1 */
+#define IFTHEN_tb_pb                      352  /*      0x160 */
+#define IFTHEN_tb_p8                      353  /*      0x161 */
+#define IFTHEN_t8_pb                      354  /*      0x162 */
+#define IFTHEN_t8_p8                      355  /*      0x163 */
+
+#define GROUPP                       89        /* 0x59 Whether the group
+                                                  matched. */
+#define GROUPP_tb                      178     /*      0x0b2 */
+#define GROUPP_t8                      179     /*      0x0b3 */
+#define GROUPP_tb_pb                      356  /*      0x164 */
+#define GROUPP_tb_p8                      357  /*      0x165 */
+#define GROUPP_t8_pb                      358  /*      0x166 */
+#define GROUPP_t8_p8                      359  /*      0x167 */
+
+#define EVAL                         90        /* 0x5a Execute some Perl code.
+                                               */
+#define EVAL_tb                        180     /*      0x0b4 */
+#define EVAL_t8                        181     /*      0x0b5 */
+#define EVAL_tb_pb                        360  /*      0x168 */
+#define EVAL_tb_p8                        361  /*      0x169 */
+#define EVAL_t8_pb                        362  /*      0x16a */
+#define EVAL_t8_p8                        363  /*      0x16b */
+
+#define MINMOD                       91        /* 0x5b Next operator is not
+                                                  greedy. */
+#define MINMOD_tb                      182     /*      0x0b6 */
+#define MINMOD_t8                      183     /*      0x0b7 */
+#define MINMOD_tb_pb                      364  /*      0x16c */
+#define MINMOD_tb_p8                      365  /*      0x16d */
+#define MINMOD_t8_pb                      366  /*      0x16e */
+#define MINMOD_t8_p8                      367  /*      0x16f */
+
+#define LOGICAL                      92        /* 0x5c Next opcode should set
+                                                  the flag only. */
+#define LOGICAL_tb                     184     /*      0x0b8 */
+#define LOGICAL_t8                     185     /*      0x0b9 */
+#define LOGICAL_tb_pb                     368  /*      0x170 */
+#define LOGICAL_tb_p8                     369  /*      0x171 */
+#define LOGICAL_t8_pb                     370  /*      0x172 */
+#define LOGICAL_t8_p8                     371  /*      0x173 */
+
+#define RENUM                        93        /* 0x5d Group with
+                                                  independently numbered
+                                                  parens. */
+#define RENUM_tb                       186     /*      0x0ba */
+#define RENUM_t8                       187     /*      0x0bb */
+#define RENUM_tb_pb                       372  /*      0x174 */
+#define RENUM_tb_p8                       373  /*      0x175 */
+#define RENUM_t8_pb                       374  /*      0x176 */
+#define RENUM_t8_p8                       375  /*      0x177 */
+
+#define GOSUB                        94        /* 0x5e recurse to paren arg1
+                                                  at (signed) ofs arg2 */
+#define GOSUB_tb                       188     /*      0x0bc */
+#define GOSUB_t8                       189     /*      0x0bd */
+#define GOSUB_tb_pb                       376  /*      0x178 */
+#define GOSUB_tb_p8                       377  /*      0x179 */
+#define GOSUB_t8_pb                       378  /*      0x17a */
+#define GOSUB_t8_p8                       379  /*      0x17b */
+
+#define GROUPPN                      95        /* 0x5f Whether the group
+                                                  matched. */
+#define GROUPPN_tb                     190     /*      0x0be */
+#define GROUPPN_t8                     191     /*      0x0bf */
+#define GROUPPN_tb_pb                     380  /*      0x17c */
+#define GROUPPN_tb_p8                     381  /*      0x17d */
+#define GROUPPN_t8_pb                     382  /*      0x17e */
+#define GROUPPN_t8_p8                     383  /*      0x17f */
+
+#define INSUBP                       96        /* 0x60 Whether we are in a
+                                                  specific recurse. */
+#define INSUBP_tb                      192     /*      0x0c0 */
+#define INSUBP_t8                      193     /*      0x0c1 */
+#define INSUBP_tb_pb                      384  /*      0x180 */
+#define INSUBP_tb_p8                      385  /*      0x181 */
+#define INSUBP_t8_pb                      386  /*      0x182 */
+#define INSUBP_t8_p8                      387  /*      0x183 */
+
+#define DEFINEP                      97        /* 0x61 Never execute directly.
+                                               */
+#define DEFINEP_tb                     194     /*      0x0c2 */
+#define DEFINEP_t8                     195     /*      0x0c3 */
+#define DEFINEP_tb_pb                     388  /*      0x184 */
+#define DEFINEP_tb_p8                     389  /*      0x185 */
+#define DEFINEP_t8_pb                     390  /*      0x186 */
+#define DEFINEP_t8_p8                     391  /*      0x187 */
+
+#define ENDLIKE                      98        /* 0x62 Used only for the type
+                                                  field of verbs */
+#define ENDLIKE_tb                     196     /*      0x0c4 */
+#define ENDLIKE_t8                     197     /*      0x0c5 */
+#define ENDLIKE_tb_pb                     392  /*      0x188 */
+#define ENDLIKE_tb_p8                     393  /*      0x189 */
+#define ENDLIKE_t8_pb                     394  /*      0x18a */
+#define ENDLIKE_t8_p8                     395  /*      0x18b */
+
+#define OPFAIL                       99        /* 0x63 Same as (?!), but with
+                                                  verb arg */
+#define OPFAIL_tb                      198     /*      0x0c6 */
+#define OPFAIL_t8                      199     /*      0x0c7 */
+#define OPFAIL_tb_pb                      396  /*      0x18c */
+#define OPFAIL_tb_p8                      397  /*      0x18d */
+#define OPFAIL_t8_pb                      398  /*      0x18e */
+#define OPFAIL_t8_p8                      399  /*      0x18f */
+
+#define ACCEPT                      100        /* 0x64 Accepts the current
+                                                  matched string, with verbar
+                                               */
+#define ACCEPT_tb                      200     /*      0x0c8 */
+#define ACCEPT_t8                      201     /*      0x0c9 */
+#define ACCEPT_tb_pb                      400  /*      0x190 */
+#define ACCEPT_tb_p8                      401  /*      0x191 */
+#define ACCEPT_t8_pb                      402  /*      0x192 */
+#define ACCEPT_t8_p8                      403  /*      0x193 */
+
+#define VERB                        101        /* 0x65 Used only for the type
+                                                  field of verbs */
+#define VERB_tb                        202     /*      0x0ca */
+#define VERB_t8                        203     /*      0x0cb */
+#define VERB_tb_pb                        404  /*      0x194 */
+#define VERB_tb_p8                        405  /*      0x195 */
+#define VERB_t8_pb                        406  /*      0x196 */
+#define VERB_t8_p8                        407  /*      0x197 */
+
+#define PRUNE                       102        /* 0x66 Pattern fails at this
+                                                  startpoint if
+                                                  no-backtracking through this
+                                               */
+#define PRUNE_tb                       204     /*      0x0cc */
+#define PRUNE_t8                       205     /*      0x0cd */
+#define PRUNE_tb_pb                       408  /*      0x198 */
+#define PRUNE_tb_p8                       409  /*      0x199 */
+#define PRUNE_t8_pb                       410  /*      0x19a */
+#define PRUNE_t8_p8                       411  /*      0x19b */
+
+#define MARKPOINT                   103        /* 0x67 Push the current
+                                                  location for rollback by
+                                                  cut. */
+#define MARKPOINT_tb                   206     /*      0x0ce */
+#define MARKPOINT_t8                   207     /*      0x0cf */
+#define MARKPOINT_tb_pb                   412  /*      0x19c */
+#define MARKPOINT_tb_p8                   413  /*      0x19d */
+#define MARKPOINT_t8_pb                   414  /*      0x19e */
+#define MARKPOINT_t8_p8                   415  /*      0x19f */
+
+#define SKIP                        104        /* 0x68 On failure skip forward
+                                                  (to the mark) before
+                                                  retrying */
+#define SKIP_tb                        208     /*      0x0d0 */
+#define SKIP_t8                        209     /*      0x0d1 */
+#define SKIP_tb_pb                        416  /*      0x1a0 */
+#define SKIP_tb_p8                        417  /*      0x1a1 */
+#define SKIP_t8_pb                        418  /*      0x1a2 */
+#define SKIP_t8_p8                        419  /*      0x1a3 */
+
+#define COMMIT                      105        /* 0x69 Pattern fails outright
+                                                  if backtracking through this
+                                               */
+#define COMMIT_tb                      210     /*      0x0d2 */
+#define COMMIT_t8                      211     /*      0x0d3 */
+#define COMMIT_tb_pb                      420  /*      0x1a4 */
+#define COMMIT_tb_p8                      421  /*      0x1a5 */
+#define COMMIT_t8_pb                      422  /*      0x1a6 */
+#define COMMIT_t8_p8                      423  /*      0x1a7 */
+
+#define CUTGROUP                    106        /* 0x6a On failure go to the
+                                                  next alternation in the
+                                                  group */
+#define CUTGROUP_tb                    212     /*      0x0d4 */
+#define CUTGROUP_t8                    213     /*      0x0d5 */
+#define CUTGROUP_tb_pb                    424  /*      0x1a8 */
+#define CUTGROUP_tb_p8                    425  /*      0x1a9 */
+#define CUTGROUP_t8_pb                    426  /*      0x1aa */
+#define CUTGROUP_t8_p8                    427  /*      0x1ab */
+
+#define KEEPS                       107        /* 0x6b $& begins here. */
+#define KEEPS_tb                       214     /*      0x0d6 */
+#define KEEPS_t8                       215     /*      0x0d7 */
+#define KEEPS_tb_pb                       428  /*      0x1ac */
+#define KEEPS_tb_p8                       429  /*      0x1ad */
+#define KEEPS_t8_pb                       430  /*      0x1ae */
+#define KEEPS_t8_p8                       431  /*      0x1af */
+
+#define LOOKBEHIND_END              108        /* 0x6c Return from lookbehind
+                                                  (IFMATCH/UNLESSM) and
+                                                  validate position */
+#define LOOKBEHIND_END_tb              216     /*      0x0d8 */
+#define LOOKBEHIND_END_t8              217     /*      0x0d9 */
+#define LOOKBEHIND_END_tb_pb              432  /*      0x1b0 */
+#define LOOKBEHIND_END_tb_p8              433  /*      0x1b1 */
+#define LOOKBEHIND_END_t8_pb              434  /*      0x1b2 */
+#define LOOKBEHIND_END_t8_p8              435  /*      0x1b3 */
+
+#define OPTIMIZED                   109        /* 0x6d Placeholder for dump.
+                                               */
+#define OPTIMIZED_tb                   218     /*      0x0da */
+#define OPTIMIZED_t8                   219     /*      0x0db */
+#define OPTIMIZED_tb_pb                   436  /*      0x1b4 */
+#define OPTIMIZED_tb_p8                   437  /*      0x1b5 */
+#define OPTIMIZED_t8_pb                   438  /*      0x1b6 */
+#define OPTIMIZED_t8_p8                   439  /*      0x1b7 */
+
+#define PSEUDO                      110        /* 0x6e Pseudo opcode for
+                                                  internal use. */
+#define PSEUDO_tb                      220     /*      0x0dc */
+#define PSEUDO_t8                      221     /*      0x0dd */
+#define PSEUDO_tb_pb                      440  /*      0x1b8 */
+#define PSEUDO_tb_p8                      441  /*      0x1b9 */
+#define PSEUDO_t8_pb                      442  /*      0x1ba */
+#define PSEUDO_t8_p8                      443  /*      0x1bb */
+
+#define REGEX_SET                   111        /* 0x6f Regex set, temporary
+                                                  node used in
+                                                  pre-optimization compilation
+                                               */
+#define REGEX_SET_tb                   222     /*      0x0de */
+#define REGEX_SET_t8                   223     /*      0x0df */
+#define REGEX_SET_tb_pb                   444  /*      0x1bc */
+#define REGEX_SET_tb_p8                   445  /*      0x1bd */
+#define REGEX_SET_t8_pb                   446  /*      0x1be */
+#define REGEX_SET_t8_p8                   447  /*      0x1bf */
 
-#ifndef DOINIT
-EXTCONST U8 PL_regkind[];
-#else
-EXTCONST U8 PL_regkind[] = {
-       END,            /* END                    */
-       END,            /* SUCCEED                */
-       BOL,            /* BOL                    */
-       BOL,            /* MBOL                   */
-       BOL,            /* SBOL                   */
-       EOL,            /* EOS                    */
-       EOL,            /* EOL                    */
-       EOL,            /* MEOL                   */
-       EOL,            /* SEOL                   */
-       BOUND,          /* BOUND                  */
-       BOUND,          /* BOUNDL                 */
-       NBOUND,         /* NBOUND                 */
-       NBOUND,         /* NBOUNDL                */
-       GPOS,           /* GPOS                   */
-       REG_ANY,        /* REG_ANY                */
-       REG_ANY,        /* SANY                   */
-       REG_ANY,        /* CANY                   */
-       ANYOF,          /* ANYOF                  */
-       ALNUM,          /* ALNUM                  */
-       ALNUM,          /* ALNUML                 */
-       NALNUM,         /* NALNUM                 */
-       NALNUM,         /* NALNUML                */
-       SPACE,          /* SPACE                  */
-       SPACE,          /* SPACEL                 */
-       NSPACE,         /* NSPACE                 */
-       NSPACE,         /* NSPACEL                */
-       DIGIT,          /* DIGIT                  */
-       DIGIT,          /* DIGITL                 */
-       NDIGIT,         /* NDIGIT                 */
-       NDIGIT,         /* NDIGITL                */
-       CLUMP,          /* CLUMP                  */
-       BRANCH,         /* BRANCH                 */
-       BACK,           /* BACK                   */
-       EXACT,          /* EXACT                  */
-       EXACT,          /* EXACTF                 */
-       EXACT,          /* EXACTFL                */
-       EXACT,          /* EXACTFU                */
-       NOTHING,        /* NOTHING                */
-       NOTHING,        /* TAIL                   */
-       STAR,           /* STAR                   */
-       PLUS,           /* PLUS                   */
-       CURLY,          /* CURLY                  */
-       CURLY,          /* CURLYN                 */
-       CURLY,          /* CURLYM                 */
-       CURLY,          /* CURLYX                 */
-       WHILEM,         /* WHILEM                 */
-       OPEN,           /* OPEN                   */
-       CLOSE,          /* CLOSE                  */
-       REF,            /* REF                    */
-       REF,            /* REFF                   */
-       REF,            /* REFFL                  */
-       REF,            /* REFFU                  */
-       REF,            /* NREF                   */
-       REF,            /* NREFF                  */
-       REF,            /* NREFFL                 */
-       REF,            /* NREFFU                 */
-       BRANCHJ,        /* IFMATCH                */
-       BRANCHJ,        /* UNLESSM                */
-       BRANCHJ,        /* SUSPEND                */
-       BRANCHJ,        /* IFTHEN                 */
-       GROUPP,         /* GROUPP                 */
-       LONGJMP,        /* LONGJMP                */
-       BRANCHJ,        /* BRANCHJ                */
-       EVAL,           /* EVAL                   */
-       MINMOD,         /* MINMOD                 */
-       LOGICAL,        /* LOGICAL                */
-       BRANCHJ,        /* RENUM                  */
-       TRIE,           /* TRIE                   */
-       TRIE,           /* TRIEC                  */
-       TRIE,           /* AHOCORASICK            */
-       TRIE,           /* AHOCORASICKC           */
-       GOSUB,          /* GOSUB                  */
-       GOSTART,        /* GOSTART                */
-       NGROUPP,        /* NGROUPP                */
-       INSUBP,         /* INSUBP                 */
-       DEFINEP,        /* DEFINEP                */
-       ENDLIKE,        /* ENDLIKE                */
-       ENDLIKE,        /* OPFAIL                 */
-       ENDLIKE,        /* ACCEPT                 */
-       VERB,           /* VERB                   */
-       VERB,           /* PRUNE                  */
-       VERB,           /* MARKPOINT              */
-       VERB,           /* SKIP                   */
-       VERB,           /* COMMIT                 */
-       VERB,           /* CUTGROUP               */
-       KEEPS,          /* KEEPS                  */
-       LNBREAK,        /* LNBREAK                */
-       VERTWS,         /* VERTWS                 */
-       NVERTWS,        /* NVERTWS                */
-       HORIZWS,        /* HORIZWS                */
-       NHORIZWS,       /* NHORIZWS               */
-       FOLDCHAR,       /* FOLDCHAR               */
-       NOTHING,        /* OPTIMIZED              */
-       PSEUDO,         /* PSEUDO                 */
        /* ------------ States ------------- */
-       TRIE,           /* TRIE_next              */
-       TRIE,           /* TRIE_next_fail         */
-       EVAL,           /* EVAL_AB                */
-       EVAL,           /* EVAL_AB_fail           */
-       CURLYX,         /* CURLYX_end             */
-       CURLYX,         /* CURLYX_end_fail        */
-       WHILEM,         /* WHILEM_A_pre           */
-       WHILEM,         /* WHILEM_A_pre_fail      */
-       WHILEM,         /* WHILEM_A_min           */
-       WHILEM,         /* WHILEM_A_min_fail      */
-       WHILEM,         /* WHILEM_A_max           */
-       WHILEM,         /* WHILEM_A_max_fail      */
-       WHILEM,         /* WHILEM_B_min           */
-       WHILEM,         /* WHILEM_B_min_fail      */
-       WHILEM,         /* WHILEM_B_max           */
-       WHILEM,         /* WHILEM_B_max_fail      */
-       BRANCH,         /* BRANCH_next            */
-       BRANCH,         /* BRANCH_next_fail       */
-       CURLYM,         /* CURLYM_A               */
-       CURLYM,         /* CURLYM_A_fail          */
-       CURLYM,         /* CURLYM_B               */
-       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            */
-       CURLY,          /* CURLY_B_max_fail       */
-       COMMIT,         /* COMMIT_next            */
-       COMMIT,         /* COMMIT_next_fail       */
-       MARKPOINT,      /* MARKPOINT_next         */
-       MARKPOINT,      /* MARKPOINT_next_fail    */
-       SKIP,           /* SKIP_next              */
-       SKIP,           /* SKIP_next_fail         */
-       CUTGROUP,       /* CUTGROUP_next          */
-       CUTGROUP,       /* CUTGROUP_next_fail     */
-       KEEPS,          /* KEEPS_next             */
-       KEEPS,          /* KEEPS_next_fail        */
-};
-#endif
+#define TRIE_next                   112        /* 0x70 state for TRIE */
+#define TRIE_next_tb                   224     /*      0x0e0 */
+#define TRIE_next_t8                   225     /*      0x0e1 */
+#define TRIE_next_tb_pb                   448  /*      0x1c0 */
+#define TRIE_next_tb_p8                   449  /*      0x1c1 */
+#define TRIE_next_t8_pb                   450  /*      0x1c2 */
+#define TRIE_next_t8_p8                   451  /*      0x1c3 */
 
-/* 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,                                      /* SEOL         */
-       0,                                      /* BOUND        */
-       0,                                      /* BOUNDL       */
-       0,                                      /* NBOUND       */
-       0,                                      /* NBOUNDL      */
-       0,                                      /* GPOS         */
-       0,                                      /* REG_ANY      */
-       0,                                      /* SANY         */
-       0,                                      /* CANY         */
-       0,                                      /* ANYOF        */
-       0,                                      /* ALNUM        */
-       0,                                      /* ALNUML       */
-       0,                                      /* NALNUM       */
-       0,                                      /* NALNUML      */
-       0,                                      /* SPACE        */
-       0,                                      /* SPACEL       */
-       0,                                      /* NSPACE       */
-       0,                                      /* NSPACEL      */
-       0,                                      /* DIGIT        */
-       0,                                      /* DIGITL       */
-       0,                                      /* NDIGIT       */
-       0,                                      /* NDIGITL      */
-       0,                                      /* CLUMP        */
-       0,                                      /* BRANCH       */
-       0,                                      /* BACK         */
-       0,                                      /* EXACT        */
-       0,                                      /* EXACTF       */
-       0,                                      /* EXACTFL      */
-       0,                                      /* EXACTFU      */
-       0,                                      /* NOTHING      */
-       0,                                      /* TAIL         */
-       0,                                      /* STAR         */
-       0,                                      /* PLUS         */
-       EXTRA_SIZE(struct regnode_2),           /* CURLY        */
-       EXTRA_SIZE(struct regnode_2),           /* CURLYN       */
-       EXTRA_SIZE(struct regnode_2),           /* CURLYM       */
-       EXTRA_SIZE(struct regnode_2),           /* CURLYX       */
-       0,                                      /* WHILEM       */
-       EXTRA_SIZE(struct regnode_1),           /* OPEN         */
-       EXTRA_SIZE(struct regnode_1),           /* CLOSE        */
-       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),           /* NREF         */
-       EXTRA_SIZE(struct regnode_1),           /* NREFF        */
-       EXTRA_SIZE(struct regnode_1),           /* NREFFL       */
-       EXTRA_SIZE(struct regnode_1),           /* NREFFU       */
-       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         */
-       0,                                      /* MINMOD       */
-       0,                                      /* LOGICAL      */
-       EXTRA_SIZE(struct regnode_1),           /* RENUM        */
-       EXTRA_SIZE(struct regnode_1),           /* TRIE         */
-       EXTRA_SIZE(struct regnode_charclass),   /* TRIEC        */
-       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),           /* INSUBP       */
-       EXTRA_SIZE(struct regnode_1),           /* DEFINEP      */
-       0,                                      /* ENDLIKE      */
-       0,                                      /* OPFAIL       */
-       EXTRA_SIZE(struct regnode_1),           /* ACCEPT       */
-       EXTRA_SIZE(struct regnode_1),           /* VERB         */
-       EXTRA_SIZE(struct regnode_1),           /* PRUNE        */
-       EXTRA_SIZE(struct regnode_1),           /* MARKPOINT    */
-       EXTRA_SIZE(struct regnode_1),           /* SKIP         */
-       EXTRA_SIZE(struct regnode_1),           /* COMMIT       */
-       EXTRA_SIZE(struct regnode_1),           /* CUTGROUP     */
-       0,                                      /* KEEPS        */
-       0,                                      /* LNBREAK      */
-       0,                                      /* VERTWS       */
-       0,                                      /* NVERTWS      */
-       0,                                      /* HORIZWS      */
-       0,                                      /* NHORIZWS     */
-       EXTRA_SIZE(struct regnode_1),           /* FOLDCHAR     */
-       0,                                      /* OPTIMIZED    */
-       0,                                      /* PSEUDO       */
-};
+#define TRIE_next_fail              113        /* 0x71 state for TRIE */
+#define TRIE_next_fail_tb              226     /*      0x0e2 */
+#define TRIE_next_fail_t8              227     /*      0x0e3 */
+#define TRIE_next_fail_tb_pb              452  /*      0x1c4 */
+#define TRIE_next_fail_tb_p8              453  /*      0x1c5 */
+#define TRIE_next_fail_t8_pb              454  /*      0x1c6 */
+#define TRIE_next_fail_t8_p8              455  /*      0x1c7 */
 
-/* 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,      /* SEOL         */
-       0,      /* BOUND        */
-       0,      /* BOUNDL       */
-       0,      /* NBOUND       */
-       0,      /* NBOUNDL      */
-       0,      /* GPOS         */
-       0,      /* REG_ANY      */
-       0,      /* SANY         */
-       0,      /* CANY         */
-       0,      /* ANYOF        */
-       0,      /* ALNUM        */
-       0,      /* ALNUML       */
-       0,      /* NALNUM       */
-       0,      /* NALNUML      */
-       0,      /* SPACE        */
-       0,      /* SPACEL       */
-       0,      /* NSPACE       */
-       0,      /* NSPACEL      */
-       0,      /* DIGIT        */
-       0,      /* DIGITL       */
-       0,      /* NDIGIT       */
-       0,      /* NDIGITL      */
-       0,      /* CLUMP        */
-       0,      /* BRANCH       */
-       0,      /* BACK         */
-       0,      /* EXACT        */
-       0,      /* EXACTF       */
-       0,      /* EXACTFL      */
-       0,      /* EXACTFU      */
-       0,      /* NOTHING      */
-       0,      /* TAIL         */
-       0,      /* STAR         */
-       0,      /* PLUS         */
-       0,      /* CURLY        */
-       0,      /* CURLYN       */
-       0,      /* CURLYM       */
-       0,      /* CURLYX       */
-       0,      /* WHILEM       */
-       0,      /* OPEN         */
-       0,      /* CLOSE        */
-       0,      /* REF          */
-       0,      /* REFF         */
-       0,      /* REFFL        */
-       0,      /* REFFU        */
-       0,      /* NREF         */
-       0,      /* NREFF        */
-       0,      /* NREFFL       */
-       0,      /* NREFFU       */
-       2,      /* IFMATCH      */
-       2,      /* UNLESSM      */
-       1,      /* SUSPEND      */
-       1,      /* IFTHEN       */
-       0,      /* GROUPP       */
-       1,      /* LONGJMP      */
-       1,      /* BRANCHJ      */
-       0,      /* EVAL         */
-       0,      /* MINMOD       */
-       0,      /* LOGICAL      */
-       1,      /* RENUM        */
-       0,      /* TRIE         */
-       0,      /* TRIEC        */
-       0,      /* AHOCORASICK  */
-       0,      /* AHOCORASICKC */
-       0,      /* GOSUB        */
-       0,      /* GOSTART      */
-       0,      /* NGROUPP      */
-       0,      /* INSUBP       */
-       0,      /* DEFINEP      */
-       0,      /* ENDLIKE      */
-       0,      /* OPFAIL       */
-       0,      /* ACCEPT       */
-       0,      /* VERB         */
-       0,      /* PRUNE        */
-       0,      /* MARKPOINT    */
-       0,      /* SKIP         */
-       0,      /* COMMIT       */
-       0,      /* CUTGROUP     */
-       0,      /* KEEPS        */
-       0,      /* LNBREAK      */
-       0,      /* VERTWS       */
-       0,      /* NVERTWS      */
-       0,      /* HORIZWS      */
-       0,      /* NHORIZWS     */
-       0,      /* FOLDCHAR     */
-       0,      /* OPTIMIZED    */
-       0,      /* PSEUDO       */
-};
+#define EVAL_B                      114        /* 0x72 state for EVAL */
+#define EVAL_B_tb                      228     /*      0x0e4 */
+#define EVAL_B_t8                      229     /*      0x0e5 */
+#define EVAL_B_tb_pb                      456  /*      0x1c8 */
+#define EVAL_B_tb_p8                      457  /*      0x1c9 */
+#define EVAL_B_t8_pb                      458  /*      0x1ca */
+#define EVAL_B_t8_p8                      459  /*      0x1cb */
+
+#define EVAL_B_fail                 115        /* 0x73 state for EVAL */
+#define EVAL_B_fail_tb                 230     /*      0x0e6 */
+#define EVAL_B_fail_t8                 231     /*      0x0e7 */
+#define EVAL_B_fail_tb_pb                 460  /*      0x1cc */
+#define EVAL_B_fail_tb_p8                 461  /*      0x1cd */
+#define EVAL_B_fail_t8_pb                 462  /*      0x1ce */
+#define EVAL_B_fail_t8_p8                 463  /*      0x1cf */
+
+#define EVAL_postponed_AB           116        /* 0x74 state for EVAL */
+#define EVAL_postponed_AB_tb           232     /*      0x0e8 */
+#define EVAL_postponed_AB_t8           233     /*      0x0e9 */
+#define EVAL_postponed_AB_tb_pb           464  /*      0x1d0 */
+#define EVAL_postponed_AB_tb_p8           465  /*      0x1d1 */
+#define EVAL_postponed_AB_t8_pb           466  /*      0x1d2 */
+#define EVAL_postponed_AB_t8_p8           467  /*      0x1d3 */
+
+#define EVAL_postponed_AB_fail      117        /* 0x75 state for EVAL */
+#define EVAL_postponed_AB_fail_tb      234     /*      0x0ea */
+#define EVAL_postponed_AB_fail_t8      235     /*      0x0eb */
+#define EVAL_postponed_AB_fail_tb_pb      468  /*      0x1d4 */
+#define EVAL_postponed_AB_fail_tb_p8      469  /*      0x1d5 */
+#define EVAL_postponed_AB_fail_t8_pb      470  /*      0x1d6 */
+#define EVAL_postponed_AB_fail_t8_p8      471  /*      0x1d7 */
+
+#define CURLYX_end                  118        /* 0x76 state for CURLYX */
+#define CURLYX_end_tb                  236     /*      0x0ec */
+#define CURLYX_end_t8                  237     /*      0x0ed */
+#define CURLYX_end_tb_pb                  472  /*      0x1d8 */
+#define CURLYX_end_tb_p8                  473  /*      0x1d9 */
+#define CURLYX_end_t8_pb                  474  /*      0x1da */
+#define CURLYX_end_t8_p8                  475  /*      0x1db */
+
+#define CURLYX_end_fail             119        /* 0x77 state for CURLYX */
+#define CURLYX_end_fail_tb             238     /*      0x0ee */
+#define CURLYX_end_fail_t8             239     /*      0x0ef */
+#define CURLYX_end_fail_tb_pb             476  /*      0x1dc */
+#define CURLYX_end_fail_tb_p8             477  /*      0x1dd */
+#define CURLYX_end_fail_t8_pb             478  /*      0x1de */
+#define CURLYX_end_fail_t8_p8             479  /*      0x1df */
+
+#define WHILEM_A_pre                120        /* 0x78 state for WHILEM */
+#define WHILEM_A_pre_tb                240     /*      0x0f0 */
+#define WHILEM_A_pre_t8                241     /*      0x0f1 */
+#define WHILEM_A_pre_tb_pb                480  /*      0x1e0 */
+#define WHILEM_A_pre_tb_p8                481  /*      0x1e1 */
+#define WHILEM_A_pre_t8_pb                482  /*      0x1e2 */
+#define WHILEM_A_pre_t8_p8                483  /*      0x1e3 */
+
+#define WHILEM_A_pre_fail           121        /* 0x79 state for WHILEM */
+#define WHILEM_A_pre_fail_tb           242     /*      0x0f2 */
+#define WHILEM_A_pre_fail_t8           243     /*      0x0f3 */
+#define WHILEM_A_pre_fail_tb_pb           484  /*      0x1e4 */
+#define WHILEM_A_pre_fail_tb_p8           485  /*      0x1e5 */
+#define WHILEM_A_pre_fail_t8_pb           486  /*      0x1e6 */
+#define WHILEM_A_pre_fail_t8_p8           487  /*      0x1e7 */
+
+#define WHILEM_A_min                122        /* 0x7a state for WHILEM */
+#define WHILEM_A_min_tb                244     /*      0x0f4 */
+#define WHILEM_A_min_t8                245     /*      0x0f5 */
+#define WHILEM_A_min_tb_pb                488  /*      0x1e8 */
+#define WHILEM_A_min_tb_p8                489  /*      0x1e9 */
+#define WHILEM_A_min_t8_pb                490  /*      0x1ea */
+#define WHILEM_A_min_t8_p8                491  /*      0x1eb */
+
+#define WHILEM_A_min_fail           123        /* 0x7b state for WHILEM */
+#define WHILEM_A_min_fail_tb           246     /*      0x0f6 */
+#define WHILEM_A_min_fail_t8           247     /*      0x0f7 */
+#define WHILEM_A_min_fail_tb_pb           492  /*      0x1ec */
+#define WHILEM_A_min_fail_tb_p8           493  /*      0x1ed */
+#define WHILEM_A_min_fail_t8_pb           494  /*      0x1ee */
+#define WHILEM_A_min_fail_t8_p8           495  /*      0x1ef */
+
+#define WHILEM_A_max                124        /* 0x7c state for WHILEM */
+#define WHILEM_A_max_tb                248     /*      0x0f8 */
+#define WHILEM_A_max_t8                249     /*      0x0f9 */
+#define WHILEM_A_max_tb_pb                496  /*      0x1f0 */
+#define WHILEM_A_max_tb_p8                497  /*      0x1f1 */
+#define WHILEM_A_max_t8_pb                498  /*      0x1f2 */
+#define WHILEM_A_max_t8_p8                499  /*      0x1f3 */
+
+#define WHILEM_A_max_fail           125        /* 0x7d state for WHILEM */
+#define WHILEM_A_max_fail_tb           250     /*      0x0fa */
+#define WHILEM_A_max_fail_t8           251     /*      0x0fb */
+#define WHILEM_A_max_fail_tb_pb           500  /*      0x1f4 */
+#define WHILEM_A_max_fail_tb_p8           501  /*      0x1f5 */
+#define WHILEM_A_max_fail_t8_pb           502  /*      0x1f6 */
+#define WHILEM_A_max_fail_t8_p8           503  /*      0x1f7 */
+
+#define WHILEM_B_min                126        /* 0x7e state for WHILEM */
+#define WHILEM_B_min_tb                252     /*      0x0fc */
+#define WHILEM_B_min_t8                253     /*      0x0fd */
+#define WHILEM_B_min_tb_pb                504  /*      0x1f8 */
+#define WHILEM_B_min_tb_p8                505  /*      0x1f9 */
+#define WHILEM_B_min_t8_pb                506  /*      0x1fa */
+#define WHILEM_B_min_t8_p8                507  /*      0x1fb */
+
+#define WHILEM_B_min_fail           127        /* 0x7f state for WHILEM */
+#define WHILEM_B_min_fail_tb           254     /*      0x0fe */
+#define WHILEM_B_min_fail_t8           255     /*      0x0ff */
+#define WHILEM_B_min_fail_tb_pb           508  /*      0x1fc */
+#define WHILEM_B_min_fail_tb_p8           509  /*      0x1fd */
+#define WHILEM_B_min_fail_t8_pb           510  /*      0x1fe */
+#define WHILEM_B_min_fail_t8_p8           511  /*      0x1ff */
+
+#define WHILEM_B_max                128        /* 0x80 state for WHILEM */
+#define WHILEM_B_max_tb                256     /*      0x100 */
+#define WHILEM_B_max_t8                257     /*      0x101 */
+#define WHILEM_B_max_tb_pb                512  /*      0x200 */
+#define WHILEM_B_max_tb_p8                513  /*      0x201 */
+#define WHILEM_B_max_t8_pb                514  /*      0x202 */
+#define WHILEM_B_max_t8_p8                515  /*      0x203 */
+
+#define WHILEM_B_max_fail           129        /* 0x81 state for WHILEM */
+#define WHILEM_B_max_fail_tb           258     /*      0x102 */
+#define WHILEM_B_max_fail_t8           259     /*      0x103 */
+#define WHILEM_B_max_fail_tb_pb           516  /*      0x204 */
+#define WHILEM_B_max_fail_tb_p8           517  /*      0x205 */
+#define WHILEM_B_max_fail_t8_pb           518  /*      0x206 */
+#define WHILEM_B_max_fail_t8_p8           519  /*      0x207 */
+
+#define BRANCH_next                 130        /* 0x82 state for BRANCH */
+#define BRANCH_next_tb                 260     /*      0x104 */
+#define BRANCH_next_t8                 261     /*      0x105 */
+#define BRANCH_next_tb_pb                 520  /*      0x208 */
+#define BRANCH_next_tb_p8                 521  /*      0x209 */
+#define BRANCH_next_t8_pb                 522  /*      0x20a */
+#define BRANCH_next_t8_p8                 523  /*      0x20b */
 
-#endif /* REG_COMP_C */
+#define BRANCH_next_fail            131        /* 0x83 state for BRANCH */
+#define BRANCH_next_fail_tb            262     /*      0x106 */
+#define BRANCH_next_fail_t8            263     /*      0x107 */
+#define BRANCH_next_fail_tb_pb            524  /*      0x20c */
+#define BRANCH_next_fail_tb_p8            525  /*      0x20d */
+#define BRANCH_next_fail_t8_pb            526  /*      0x20e */
+#define BRANCH_next_fail_t8_p8            527  /*      0x20f */
 
-/* reg_name[] - Opcode/state names in string form, for debugging */
+#define CURLYM_A                    132        /* 0x84 state for CURLYM */
+#define CURLYM_A_tb                    264     /*      0x108 */
+#define CURLYM_A_t8                    265     /*      0x109 */
+#define CURLYM_A_tb_pb                    528  /*      0x210 */
+#define CURLYM_A_tb_p8                    529  /*      0x211 */
+#define CURLYM_A_t8_pb                    530  /*      0x212 */
+#define CURLYM_A_t8_p8                    531  /*      0x213 */
+
+#define CURLYM_A_fail               133        /* 0x85 state for CURLYM */
+#define CURLYM_A_fail_tb               266     /*      0x10a */
+#define CURLYM_A_fail_t8               267     /*      0x10b */
+#define CURLYM_A_fail_tb_pb               532  /*      0x214 */
+#define CURLYM_A_fail_tb_p8               533  /*      0x215 */
+#define CURLYM_A_fail_t8_pb               534  /*      0x216 */
+#define CURLYM_A_fail_t8_p8               535  /*      0x217 */
+
+#define CURLYM_B                    134        /* 0x86 state for CURLYM */
+#define CURLYM_B_tb                    268     /*      0x10c */
+#define CURLYM_B_t8                    269     /*      0x10d */
+#define CURLYM_B_tb_pb                    536  /*      0x218 */
+#define CURLYM_B_tb_p8                    537  /*      0x219 */
+#define CURLYM_B_t8_pb                    538  /*      0x21a */
+#define CURLYM_B_t8_p8                    539  /*      0x21b */
+
+#define CURLYM_B_fail               135        /* 0x87 state for CURLYM */
+#define CURLYM_B_fail_tb               270     /*      0x10e */
+#define CURLYM_B_fail_t8               271     /*      0x10f */
+#define CURLYM_B_fail_tb_pb               540  /*      0x21c */
+#define CURLYM_B_fail_tb_p8               541  /*      0x21d */
+#define CURLYM_B_fail_t8_pb               542  /*      0x21e */
+#define CURLYM_B_fail_t8_p8               543  /*      0x21f */
+
+#define IFMATCH_A                   136        /* 0x88 state for IFMATCH */
+#define IFMATCH_A_tb                   272     /*      0x110 */
+#define IFMATCH_A_t8                   273     /*      0x111 */
+#define IFMATCH_A_tb_pb                   544  /*      0x220 */
+#define IFMATCH_A_tb_p8                   545  /*      0x221 */
+#define IFMATCH_A_t8_pb                   546  /*      0x222 */
+#define IFMATCH_A_t8_p8                   547  /*      0x223 */
+
+#define IFMATCH_A_fail              137        /* 0x89 state for IFMATCH */
+#define IFMATCH_A_fail_tb              274     /*      0x112 */
+#define IFMATCH_A_fail_t8              275     /*      0x113 */
+#define IFMATCH_A_fail_tb_pb              548  /*      0x224 */
+#define IFMATCH_A_fail_tb_p8              549  /*      0x225 */
+#define IFMATCH_A_fail_t8_pb              550  /*      0x226 */
+#define IFMATCH_A_fail_t8_p8              551  /*      0x227 */
+
+#define CURLY_B_min                 138        /* 0x8a state for CURLY */
+#define CURLY_B_min_tb                 276     /*      0x114 */
+#define CURLY_B_min_t8                 277     /*      0x115 */
+#define CURLY_B_min_tb_pb                 552  /*      0x228 */
+#define CURLY_B_min_tb_p8                 553  /*      0x229 */
+#define CURLY_B_min_t8_pb                 554  /*      0x22a */
+#define CURLY_B_min_t8_p8                 555  /*      0x22b */
+
+#define CURLY_B_min_fail            139        /* 0x8b state for CURLY */
+#define CURLY_B_min_fail_tb            278     /*      0x116 */
+#define CURLY_B_min_fail_t8            279     /*      0x117 */
+#define CURLY_B_min_fail_tb_pb            556  /*      0x22c */
+#define CURLY_B_min_fail_tb_p8            557  /*      0x22d */
+#define CURLY_B_min_fail_t8_pb            558  /*      0x22e */
+#define CURLY_B_min_fail_t8_p8            559  /*      0x22f */
+
+#define CURLY_B_max                 140        /* 0x8c state for CURLY */
+#define CURLY_B_max_tb                 280     /*      0x118 */
+#define CURLY_B_max_t8                 281     /*      0x119 */
+#define CURLY_B_max_tb_pb                 560  /*      0x230 */
+#define CURLY_B_max_tb_p8                 561  /*      0x231 */
+#define CURLY_B_max_t8_pb                 562  /*      0x232 */
+#define CURLY_B_max_t8_p8                 563  /*      0x233 */
+
+#define CURLY_B_max_fail            141        /* 0x8d state for CURLY */
+#define CURLY_B_max_fail_tb            282     /*      0x11a */
+#define CURLY_B_max_fail_t8            283     /*      0x11b */
+#define CURLY_B_max_fail_tb_pb            564  /*      0x234 */
+#define CURLY_B_max_fail_tb_p8            565  /*      0x235 */
+#define CURLY_B_max_fail_t8_pb            566  /*      0x236 */
+#define CURLY_B_max_fail_t8_p8            567  /*      0x237 */
+
+#define COMMIT_next                 142        /* 0x8e state for COMMIT */
+#define COMMIT_next_tb                 284     /*      0x11c */
+#define COMMIT_next_t8                 285     /*      0x11d */
+#define COMMIT_next_tb_pb                 568  /*      0x238 */
+#define COMMIT_next_tb_p8                 569  /*      0x239 */
+#define COMMIT_next_t8_pb                 570  /*      0x23a */
+#define COMMIT_next_t8_p8                 571  /*      0x23b */
+
+#define COMMIT_next_fail            143        /* 0x8f state for COMMIT */
+#define COMMIT_next_fail_tb            286     /*      0x11e */
+#define COMMIT_next_fail_t8            287     /*      0x11f */
+#define COMMIT_next_fail_tb_pb            572  /*      0x23c */
+#define COMMIT_next_fail_tb_p8            573  /*      0x23d */
+#define COMMIT_next_fail_t8_pb            574  /*      0x23e */
+#define COMMIT_next_fail_t8_p8            575  /*      0x23f */
+
+#define MARKPOINT_next              144        /* 0x90 state for MARKPOINT */
+#define MARKPOINT_next_tb              288     /*      0x120 */
+#define MARKPOINT_next_t8              289     /*      0x121 */
+#define MARKPOINT_next_tb_pb              576  /*      0x240 */
+#define MARKPOINT_next_tb_p8              577  /*      0x241 */
+#define MARKPOINT_next_t8_pb              578  /*      0x242 */
+#define MARKPOINT_next_t8_p8              579  /*      0x243 */
+
+#define MARKPOINT_next_fail         145        /* 0x91 state for MARKPOINT */
+#define MARKPOINT_next_fail_tb         290     /*      0x122 */
+#define MARKPOINT_next_fail_t8         291     /*      0x123 */
+#define MARKPOINT_next_fail_tb_pb         580  /*      0x244 */
+#define MARKPOINT_next_fail_tb_p8         581  /*      0x245 */
+#define MARKPOINT_next_fail_t8_pb         582  /*      0x246 */
+#define MARKPOINT_next_fail_t8_p8         583  /*      0x247 */
+
+#define SKIP_next                   146        /* 0x92 state for SKIP */
+#define SKIP_next_tb                   292     /*      0x124 */
+#define SKIP_next_t8                   293     /*      0x125 */
+#define SKIP_next_tb_pb                   584  /*      0x248 */
+#define SKIP_next_tb_p8                   585  /*      0x249 */
+#define SKIP_next_t8_pb                   586  /*      0x24a */
+#define SKIP_next_t8_p8                   587  /*      0x24b */
+
+#define SKIP_next_fail              147        /* 0x93 state for SKIP */
+#define SKIP_next_fail_tb              294     /*      0x126 */
+#define SKIP_next_fail_t8              295     /*      0x127 */
+#define SKIP_next_fail_tb_pb              588  /*      0x24c */
+#define SKIP_next_fail_tb_p8              589  /*      0x24d */
+#define SKIP_next_fail_t8_pb              590  /*      0x24e */
+#define SKIP_next_fail_t8_p8              591  /*      0x24f */
+
+#define CUTGROUP_next               148        /* 0x94 state for CUTGROUP */
+#define CUTGROUP_next_tb               296     /*      0x128 */
+#define CUTGROUP_next_t8               297     /*      0x129 */
+#define CUTGROUP_next_tb_pb               592  /*      0x250 */
+#define CUTGROUP_next_tb_p8               593  /*      0x251 */
+#define CUTGROUP_next_t8_pb               594  /*      0x252 */
+#define CUTGROUP_next_t8_p8               595  /*      0x253 */
+
+#define CUTGROUP_next_fail          149        /* 0x95 state for CUTGROUP */
+#define CUTGROUP_next_fail_tb          298     /*      0x12a */
+#define CUTGROUP_next_fail_t8          299     /*      0x12b */
+#define CUTGROUP_next_fail_tb_pb          596  /*      0x254 */
+#define CUTGROUP_next_fail_tb_p8          597  /*      0x255 */
+#define CUTGROUP_next_fail_t8_pb          598  /*      0x256 */
+#define CUTGROUP_next_fail_t8_p8          599  /*      0x257 */
+
+#define KEEPS_next                  150        /* 0x96 state for KEEPS */
+#define KEEPS_next_tb                  300     /*      0x12c */
+#define KEEPS_next_t8                  301     /*      0x12d */
+#define KEEPS_next_tb_pb                  600  /*      0x258 */
+#define KEEPS_next_tb_p8                  601  /*      0x259 */
+#define KEEPS_next_t8_pb                  602  /*      0x25a */
+#define KEEPS_next_t8_p8                  603  /*      0x25b */
+
+#define KEEPS_next_fail             151        /* 0x97 state for KEEPS */
+#define KEEPS_next_fail_tb             302     /*      0x12e */
+#define KEEPS_next_fail_t8             303     /*      0x12f */
+#define KEEPS_next_fail_tb_pb             604  /*      0x25c */
+#define KEEPS_next_fail_tb_p8             605  /*      0x25d */
+#define KEEPS_next_fail_t8_pb             606  /*      0x25e */
+#define KEEPS_next_fail_t8_p8             607  /*      0x25f */
+
+#define REF_next                    152        /* 0x98 state for REF */
+#define REF_next_tb                    304     /*      0x130 */
+#define REF_next_t8                    305     /*      0x131 */
+#define REF_next_tb_pb                    608  /*      0x260 */
+#define REF_next_tb_p8                    609  /*      0x261 */
+#define REF_next_t8_pb                    610  /*      0x262 */
+#define REF_next_t8_p8                    611  /*      0x263 */
+
+#define REF_next_fail               153        /* 0x99 state for REF */
+#define REF_next_fail_tb               306     /*      0x132 */
+#define REF_next_fail_t8               307     /*      0x133 */
+#define REF_next_fail_tb_pb               612  /*      0x264 */
+#define REF_next_fail_tb_p8               613  /*      0x265 */
+#define REF_next_fail_t8_pb               614  /*      0x266 */
+#define REF_next_fail_t8_p8               615  /*      0x267 */
+
+
+/* PL_regnode_name[] - Opcode/state names in string form, for debugging */
 
 #ifndef DOINIT
-EXTCONST char * PL_reg_name[];
+EXTCONST char * PL_regnode_name[];
 #else
-EXTCONST char * const PL_reg_name[] = {
+EXTCONST char * const PL_regnode_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 */
-       "NBOUND",                       /* 0x0b */
-       "NBOUNDL",                      /* 0x0c */
-       "GPOS",                         /* 0x0d */
-       "REG_ANY",                      /* 0x0e */
-       "SANY",                         /* 0x0f */
-       "CANY",                         /* 0x10 */
-       "ANYOF",                        /* 0x11 */
-       "ALNUM",                        /* 0x12 */
-       "ALNUML",                       /* 0x13 */
-       "NALNUM",                       /* 0x14 */
-       "NALNUML",                      /* 0x15 */
-       "SPACE",                        /* 0x16 */
-       "SPACEL",                       /* 0x17 */
-       "NSPACE",                       /* 0x18 */
-       "NSPACEL",                      /* 0x19 */
-       "DIGIT",                        /* 0x1a */
-       "DIGITL",                       /* 0x1b */
-       "NDIGIT",                       /* 0x1c */
-       "NDIGITL",                      /* 0x1d */
-       "CLUMP",                        /* 0x1e */
-       "BRANCH",                       /* 0x1f */
-       "BACK",                         /* 0x20 */
-       "EXACT",                        /* 0x21 */
-       "EXACTF",                       /* 0x22 */
-       "EXACTFL",                      /* 0x23 */
-       "EXACTFU",                      /* 0x24 */
-       "NOTHING",                      /* 0x25 */
-       "TAIL",                         /* 0x26 */
-       "STAR",                         /* 0x27 */
-       "PLUS",                         /* 0x28 */
-       "CURLY",                        /* 0x29 */
-       "CURLYN",                       /* 0x2a */
-       "CURLYM",                       /* 0x2b */
-       "CURLYX",                       /* 0x2c */
-       "WHILEM",                       /* 0x2d */
-       "OPEN",                         /* 0x2e */
-       "CLOSE",                        /* 0x2f */
-       "REF",                          /* 0x30 */
-       "REFF",                         /* 0x31 */
-       "REFFL",                        /* 0x32 */
-       "REFFU",                        /* 0x33 */
-       "NREF",                         /* 0x34 */
-       "NREFF",                        /* 0x35 */
-       "NREFFL",                       /* 0x36 */
-       "NREFFU",                       /* 0x37 */
-       "IFMATCH",                      /* 0x38 */
-       "UNLESSM",                      /* 0x39 */
-       "SUSPEND",                      /* 0x3a */
-       "IFTHEN",                       /* 0x3b */
-       "GROUPP",                       /* 0x3c */
-       "LONGJMP",                      /* 0x3d */
-       "BRANCHJ",                      /* 0x3e */
-       "EVAL",                         /* 0x3f */
-       "MINMOD",                       /* 0x40 */
-       "LOGICAL",                      /* 0x41 */
-       "RENUM",                        /* 0x42 */
-       "TRIE",                         /* 0x43 */
-       "TRIEC",                        /* 0x44 */
-       "AHOCORASICK",                  /* 0x45 */
-       "AHOCORASICKC",                 /* 0x46 */
-       "GOSUB",                        /* 0x47 */
-       "GOSTART",                      /* 0x48 */
-       "NGROUPP",                      /* 0x49 */
-       "INSUBP",                       /* 0x4a */
-       "DEFINEP",                      /* 0x4b */
-       "ENDLIKE",                      /* 0x4c */
-       "OPFAIL",                       /* 0x4d */
-       "ACCEPT",                       /* 0x4e */
-       "VERB",                         /* 0x4f */
-       "PRUNE",                        /* 0x50 */
-       "MARKPOINT",                    /* 0x51 */
-       "SKIP",                         /* 0x52 */
-       "COMMIT",                       /* 0x53 */
-       "CUTGROUP",                     /* 0x54 */
-       "KEEPS",                        /* 0x55 */
-       "LNBREAK",                      /* 0x56 */
-       "VERTWS",                       /* 0x57 */
-       "NVERTWS",                      /* 0x58 */
-       "HORIZWS",                      /* 0x59 */
-       "NHORIZWS",                     /* 0x5a */
-       "FOLDCHAR",                     /* 0x5b */
-       "OPTIMIZED",                    /* 0x5c */
-       "PSEUDO",                       /* 0x5d */
+       "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 */
+       "ANYOFHbbm",                    /* 0x1c */
+       "ANYOFM",                       /* 0x1d */
+       "NANYOFM",                      /* 0x1e */
+       "POSIXD",                       /* 0x1f */
+       "POSIXL",                       /* 0x20 */
+       "POSIXU",                       /* 0x21 */
+       "POSIXA",                       /* 0x22 */
+       "NPOSIXD",                      /* 0x23 */
+       "NPOSIXL",                      /* 0x24 */
+       "NPOSIXU",                      /* 0x25 */
+       "NPOSIXA",                      /* 0x26 */
+       "CLUMP",                        /* 0x27 */
+       "BRANCH",                       /* 0x28 */
+       "EXACT",                        /* 0x29 */
+       "LEXACT",                       /* 0x2a */
+       "EXACTL",                       /* 0x2b */
+       "EXACTF",                       /* 0x2c */
+       "EXACTFL",                      /* 0x2d */
+       "EXACTFU",                      /* 0x2e */
+       "EXACTFAA",                     /* 0x2f */
+       "EXACTFAA_NO_TRIE",             /* 0x30 */
+       "EXACTFUP",                     /* 0x31 */
+       "EXACTFLU8",                    /* 0x32 */
+       "EXACT_REQ8",                   /* 0x33 */
+       "LEXACT_REQ8",                  /* 0x34 */
+       "EXACTFU_REQ8",                 /* 0x35 */
+       "EXACTFU_S_EDGE",               /* 0x36 */
+       "LNBREAK",                      /* 0x37 */
+       "TRIE",                         /* 0x38 */
+       "TRIEC",                        /* 0x39 */
+       "AHOCORASICK",                  /* 0x3a */
+       "AHOCORASICKC",                 /* 0x3b */
+       "NOTHING",                      /* 0x3c */
+       "TAIL",                         /* 0x3d */
+       "STAR",                         /* 0x3e */
+       "PLUS",                         /* 0x3f */
+       "CURLY",                        /* 0x40 */
+       "CURLYN",                       /* 0x41 */
+       "CURLYM",                       /* 0x42 */
+       "CURLYX",                       /* 0x43 */
+       "WHILEM",                       /* 0x44 */
+       "OPEN",                         /* 0x45 */
+       "CLOSE",                        /* 0x46 */
+       "SROPEN",                       /* 0x47 */
+       "SRCLOSE",                      /* 0x48 */
+       "REF",                          /* 0x49 */
+       "REFF",                         /* 0x4a */
+       "REFFL",                        /* 0x4b */
+       "REFFU",                        /* 0x4c */
+       "REFFA",                        /* 0x4d */
+       "REFN",                         /* 0x4e */
+       "REFFN",                        /* 0x4f */
+       "REFFLN",                       /* 0x50 */
+       "REFFUN",                       /* 0x51 */
+       "REFFAN",                       /* 0x52 */
+       "LONGJMP",                      /* 0x53 */
+       "BRANCHJ",                      /* 0x54 */
+       "IFMATCH",                      /* 0x55 */
+       "UNLESSM",                      /* 0x56 */
+       "SUSPEND",                      /* 0x57 */
+       "IFTHEN",                       /* 0x58 */
+       "GROUPP",                       /* 0x59 */
+       "EVAL",                         /* 0x5a */
+       "MINMOD",                       /* 0x5b */
+       "LOGICAL",                      /* 0x5c */
+       "RENUM",                        /* 0x5d */
+       "GOSUB",                        /* 0x5e */
+       "GROUPPN",                      /* 0x5f */
+       "INSUBP",                       /* 0x60 */
+       "DEFINEP",                      /* 0x61 */
+       "ENDLIKE",                      /* 0x62 */
+       "OPFAIL",                       /* 0x63 */
+       "ACCEPT",                       /* 0x64 */
+       "VERB",                         /* 0x65 */
+       "PRUNE",                        /* 0x66 */
+       "MARKPOINT",                    /* 0x67 */
+       "SKIP",                         /* 0x68 */
+       "COMMIT",                       /* 0x69 */
+       "CUTGROUP",                     /* 0x6a */
+       "KEEPS",                        /* 0x6b */
+       "LOOKBEHIND_END",               /* 0x6c */
+       "OPTIMIZED",                    /* 0x6d */
+       "PSEUDO",                       /* 0x6e */
+       "REGEX_SET",                    /* 0x6f */
        /* ------------ 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 */
@@ -631,6 +1749,1096 @@ EXTCONST char * const PL_reg_name[] = {
        "CUTGROUP_next_fail",           /* REGNODE_MAX +0x26 */
        "KEEPS_next",                   /* REGNODE_MAX +0x27 */
        "KEEPS_next_fail",              /* REGNODE_MAX +0x28 */
+       "REF_next",                     /* REGNODE_MAX +0x29 */
+       "REF_next_fail",                /* REGNODE_MAX +0x2a */
+};
+#endif /* DOINIT */
+
+
+/* PL_regnode_info[] - Opcode/state names in string form, for debugging */
+
+#ifndef DOINIT
+EXTCONST struct regnode_meta PL_regnode_info[];
+#else
+EXTCONST struct regnode_meta PL_regnode_info[] = {
+    {
+        /* #0 op END */
+        .type = END,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #1 op SUCCEED */
+        .type = END,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #2 op SBOL */
+        .type = BOL,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #3 op MBOL */
+        .type = BOL,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #4 op SEOL */
+        .type = EOL,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #5 op MEOL */
+        .type = EOL,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #6 op EOS */
+        .type = EOL,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #7 op GPOS */
+        .type = GPOS,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #8 op BOUND */
+        .type = BOUND,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #9 op BOUNDL */
+        .type = BOUND,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #10 op BOUNDU */
+        .type = BOUND,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #11 op BOUNDA */
+        .type = BOUND,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #12 op NBOUND */
+        .type = NBOUND,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #13 op NBOUNDL */
+        .type = NBOUND,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #14 op NBOUNDU */
+        .type = NBOUND,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #15 op NBOUNDA */
+        .type = NBOUND,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #16 op REG_ANY */
+        .type = REG_ANY,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #17 op SANY */
+        .type = REG_ANY,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #18 op ANYOF */
+        .type = ANYOF,
+        .arg_len = EXTRA_SIZE(tregnode_ANYOF),
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #19 op ANYOFD */
+        .type = ANYOF,
+        .arg_len = EXTRA_SIZE(tregnode_ANYOFD),
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #20 op ANYOFL */
+        .type = ANYOF,
+        .arg_len = EXTRA_SIZE(tregnode_ANYOFL),
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #21 op ANYOFPOSIXL */
+        .type = ANYOF,
+        .arg_len = EXTRA_SIZE(tregnode_ANYOFPOSIXL),
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #22 op ANYOFH */
+        .type = ANYOFH,
+        .arg_len = EXTRA_SIZE(tregnode_ANYOFH),
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #23 op ANYOFHb */
+        .type = ANYOFH,
+        .arg_len = EXTRA_SIZE(tregnode_ANYOFHb),
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #24 op ANYOFHr */
+        .type = ANYOFH,
+        .arg_len = EXTRA_SIZE(tregnode_ANYOFHr),
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #25 op ANYOFHs */
+        .type = ANYOFH,
+        .arg_len = EXTRA_SIZE(tregnode_ANYOFHs),
+        .arg_len_varies = 1,
+        .off_by_arg = 0
+    },
+    {
+        /* #26 op ANYOFR */
+        .type = ANYOFR,
+        .arg_len = EXTRA_SIZE(tregnode_ANYOFR),
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #27 op ANYOFRb */
+        .type = ANYOFR,
+        .arg_len = EXTRA_SIZE(tregnode_ANYOFRb),
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #28 op ANYOFHbbm */
+        .type = ANYOFHbbm,
+        .arg_len = EXTRA_SIZE(tregnode_ANYOFHbbm),
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #29 op ANYOFM */
+        .type = ANYOFM,
+        .arg_len = EXTRA_SIZE(tregnode_ANYOFM),
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #30 op NANYOFM */
+        .type = ANYOFM,
+        .arg_len = EXTRA_SIZE(tregnode_NANYOFM),
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #31 op POSIXD */
+        .type = POSIXD,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #32 op POSIXL */
+        .type = POSIXD,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #33 op POSIXU */
+        .type = POSIXD,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #34 op POSIXA */
+        .type = POSIXD,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #35 op NPOSIXD */
+        .type = NPOSIXD,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #36 op NPOSIXL */
+        .type = NPOSIXD,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #37 op NPOSIXU */
+        .type = NPOSIXD,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #38 op NPOSIXA */
+        .type = NPOSIXD,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #39 op CLUMP */
+        .type = CLUMP,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #40 op BRANCH */
+        .type = BRANCH,
+        .arg_len = EXTRA_SIZE(tregnode_BRANCH),
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #41 op EXACT */
+        .type = EXACT,
+        .arg_len = 0,
+        .arg_len_varies = 1,
+        .off_by_arg = 0
+    },
+    {
+        /* #42 op LEXACT */
+        .type = EXACT,
+        .arg_len = EXTRA_SIZE(tregnode_LEXACT),
+        .arg_len_varies = 1,
+        .off_by_arg = 0
+    },
+    {
+        /* #43 op EXACTL */
+        .type = EXACT,
+        .arg_len = 0,
+        .arg_len_varies = 1,
+        .off_by_arg = 0
+    },
+    {
+        /* #44 op EXACTF */
+        .type = EXACT,
+        .arg_len = 0,
+        .arg_len_varies = 1,
+        .off_by_arg = 0
+    },
+    {
+        /* #45 op EXACTFL */
+        .type = EXACT,
+        .arg_len = 0,
+        .arg_len_varies = 1,
+        .off_by_arg = 0
+    },
+    {
+        /* #46 op EXACTFU */
+        .type = EXACT,
+        .arg_len = 0,
+        .arg_len_varies = 1,
+        .off_by_arg = 0
+    },
+    {
+        /* #47 op EXACTFAA */
+        .type = EXACT,
+        .arg_len = 0,
+        .arg_len_varies = 1,
+        .off_by_arg = 0
+    },
+    {
+        /* #48 op EXACTFAA_NO_TRIE */
+        .type = EXACT,
+        .arg_len = 0,
+        .arg_len_varies = 1,
+        .off_by_arg = 0
+    },
+    {
+        /* #49 op EXACTFUP */
+        .type = EXACT,
+        .arg_len = 0,
+        .arg_len_varies = 1,
+        .off_by_arg = 0
+    },
+    {
+        /* #50 op EXACTFLU8 */
+        .type = EXACT,
+        .arg_len = 0,
+        .arg_len_varies = 1,
+        .off_by_arg = 0
+    },
+    {
+        /* #51 op EXACT_REQ8 */
+        .type = EXACT,
+        .arg_len = 0,
+        .arg_len_varies = 1,
+        .off_by_arg = 0
+    },
+    {
+        /* #52 op LEXACT_REQ8 */
+        .type = EXACT,
+        .arg_len = EXTRA_SIZE(tregnode_LEXACT_REQ8),
+        .arg_len_varies = 1,
+        .off_by_arg = 0
+    },
+    {
+        /* #53 op EXACTFU_REQ8 */
+        .type = EXACT,
+        .arg_len = 0,
+        .arg_len_varies = 1,
+        .off_by_arg = 0
+    },
+    {
+        /* #54 op EXACTFU_S_EDGE */
+        .type = EXACT,
+        .arg_len = 0,
+        .arg_len_varies = 1,
+        .off_by_arg = 0
+    },
+    {
+        /* #55 op LNBREAK */
+        .type = LNBREAK,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #56 op TRIE */
+        .type = TRIE,
+        .arg_len = EXTRA_SIZE(tregnode_TRIE),
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #57 op TRIEC */
+        .type = TRIE,
+        .arg_len = EXTRA_SIZE(tregnode_TRIEC),
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #58 op AHOCORASICK */
+        .type = TRIE,
+        .arg_len = EXTRA_SIZE(tregnode_AHOCORASICK),
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #59 op AHOCORASICKC */
+        .type = TRIE,
+        .arg_len = EXTRA_SIZE(tregnode_AHOCORASICKC),
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #60 op NOTHING */
+        .type = NOTHING,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #61 op TAIL */
+        .type = NOTHING,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #62 op STAR */
+        .type = STAR,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #63 op PLUS */
+        .type = PLUS,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #64 op CURLY */
+        .type = CURLY,
+        .arg_len = EXTRA_SIZE(tregnode_CURLY),
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #65 op CURLYN */
+        .type = CURLY,
+        .arg_len = EXTRA_SIZE(tregnode_CURLYN),
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #66 op CURLYM */
+        .type = CURLY,
+        .arg_len = EXTRA_SIZE(tregnode_CURLYM),
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #67 op CURLYX */
+        .type = CURLY,
+        .arg_len = EXTRA_SIZE(tregnode_CURLYX),
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #68 op WHILEM */
+        .type = WHILEM,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #69 op OPEN */
+        .type = OPEN,
+        .arg_len = EXTRA_SIZE(tregnode_OPEN),
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #70 op CLOSE */
+        .type = CLOSE,
+        .arg_len = EXTRA_SIZE(tregnode_CLOSE),
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #71 op SROPEN */
+        .type = SROPEN,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #72 op SRCLOSE */
+        .type = SRCLOSE,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #73 op REF */
+        .type = REF,
+        .arg_len = EXTRA_SIZE(tregnode_REF),
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #74 op REFF */
+        .type = REF,
+        .arg_len = EXTRA_SIZE(tregnode_REFF),
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #75 op REFFL */
+        .type = REF,
+        .arg_len = EXTRA_SIZE(tregnode_REFFL),
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #76 op REFFU */
+        .type = REF,
+        .arg_len = EXTRA_SIZE(tregnode_REFFU),
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #77 op REFFA */
+        .type = REF,
+        .arg_len = EXTRA_SIZE(tregnode_REFFA),
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #78 op REFN */
+        .type = REF,
+        .arg_len = EXTRA_SIZE(tregnode_REFN),
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #79 op REFFN */
+        .type = REF,
+        .arg_len = EXTRA_SIZE(tregnode_REFFN),
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #80 op REFFLN */
+        .type = REF,
+        .arg_len = EXTRA_SIZE(tregnode_REFFLN),
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #81 op REFFUN */
+        .type = REF,
+        .arg_len = EXTRA_SIZE(tregnode_REFFUN),
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #82 op REFFAN */
+        .type = REF,
+        .arg_len = EXTRA_SIZE(tregnode_REFFAN),
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #83 op LONGJMP */
+        .type = LONGJMP,
+        .arg_len = EXTRA_SIZE(tregnode_LONGJMP),
+        .arg_len_varies = 0,
+        .off_by_arg = 1
+    },
+    {
+        /* #84 op BRANCHJ */
+        .type = BRANCHJ,
+        .arg_len = EXTRA_SIZE(tregnode_BRANCHJ),
+        .arg_len_varies = 0,
+        .off_by_arg = 1
+    },
+    {
+        /* #85 op IFMATCH */
+        .type = BRANCHJ,
+        .arg_len = EXTRA_SIZE(tregnode_IFMATCH),
+        .arg_len_varies = 0,
+        .off_by_arg = 1
+    },
+    {
+        /* #86 op UNLESSM */
+        .type = BRANCHJ,
+        .arg_len = EXTRA_SIZE(tregnode_UNLESSM),
+        .arg_len_varies = 0,
+        .off_by_arg = 1
+    },
+    {
+        /* #87 op SUSPEND */
+        .type = BRANCHJ,
+        .arg_len = EXTRA_SIZE(tregnode_SUSPEND),
+        .arg_len_varies = 0,
+        .off_by_arg = 1
+    },
+    {
+        /* #88 op IFTHEN */
+        .type = BRANCHJ,
+        .arg_len = EXTRA_SIZE(tregnode_IFTHEN),
+        .arg_len_varies = 0,
+        .off_by_arg = 1
+    },
+    {
+        /* #89 op GROUPP */
+        .type = GROUPP,
+        .arg_len = EXTRA_SIZE(tregnode_GROUPP),
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #90 op EVAL */
+        .type = EVAL,
+        .arg_len = EXTRA_SIZE(tregnode_EVAL),
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #91 op MINMOD */
+        .type = MINMOD,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #92 op LOGICAL */
+        .type = LOGICAL,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #93 op RENUM */
+        .type = BRANCHJ,
+        .arg_len = EXTRA_SIZE(tregnode_RENUM),
+        .arg_len_varies = 0,
+        .off_by_arg = 1
+    },
+    {
+        /* #94 op GOSUB */
+        .type = GOSUB,
+        .arg_len = EXTRA_SIZE(tregnode_GOSUB),
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #95 op GROUPPN */
+        .type = GROUPPN,
+        .arg_len = EXTRA_SIZE(tregnode_GROUPPN),
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #96 op INSUBP */
+        .type = INSUBP,
+        .arg_len = EXTRA_SIZE(tregnode_INSUBP),
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #97 op DEFINEP */
+        .type = DEFINEP,
+        .arg_len = EXTRA_SIZE(tregnode_DEFINEP),
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #98 op ENDLIKE */
+        .type = ENDLIKE,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #99 op OPFAIL */
+        .type = ENDLIKE,
+        .arg_len = EXTRA_SIZE(tregnode_OPFAIL),
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #100 op ACCEPT */
+        .type = ENDLIKE,
+        .arg_len = EXTRA_SIZE(tregnode_ACCEPT),
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #101 op VERB */
+        .type = VERB,
+        .arg_len = EXTRA_SIZE(tregnode_VERB),
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #102 op PRUNE */
+        .type = VERB,
+        .arg_len = EXTRA_SIZE(tregnode_PRUNE),
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #103 op MARKPOINT */
+        .type = VERB,
+        .arg_len = EXTRA_SIZE(tregnode_MARKPOINT),
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #104 op SKIP */
+        .type = VERB,
+        .arg_len = EXTRA_SIZE(tregnode_SKIP),
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #105 op COMMIT */
+        .type = VERB,
+        .arg_len = EXTRA_SIZE(tregnode_COMMIT),
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #106 op CUTGROUP */
+        .type = VERB,
+        .arg_len = EXTRA_SIZE(tregnode_CUTGROUP),
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #107 op KEEPS */
+        .type = KEEPS,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #108 op LOOKBEHIND_END */
+        .type = END,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #109 op OPTIMIZED */
+        .type = NOTHING,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #110 op PSEUDO */
+        .type = PSEUDO,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #111 op REGEX_SET */
+        .type = REGEX_SET,
+        .arg_len = EXTRA_SIZE(tregnode_REGEX_SET),
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #112 state TRIE_next */
+        .type = TRIE,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #113 state TRIE_next_fail */
+        .type = TRIE,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #114 state EVAL_B */
+        .type = EVAL,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #115 state EVAL_B_fail */
+        .type = EVAL,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #116 state EVAL_postponed_AB */
+        .type = EVAL,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #117 state EVAL_postponed_AB_fail */
+        .type = EVAL,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #118 state CURLYX_end */
+        .type = CURLYX,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #119 state CURLYX_end_fail */
+        .type = CURLYX,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #120 state WHILEM_A_pre */
+        .type = WHILEM,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #121 state WHILEM_A_pre_fail */
+        .type = WHILEM,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #122 state WHILEM_A_min */
+        .type = WHILEM,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #123 state WHILEM_A_min_fail */
+        .type = WHILEM,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #124 state WHILEM_A_max */
+        .type = WHILEM,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #125 state WHILEM_A_max_fail */
+        .type = WHILEM,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #126 state WHILEM_B_min */
+        .type = WHILEM,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #127 state WHILEM_B_min_fail */
+        .type = WHILEM,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #128 state WHILEM_B_max */
+        .type = WHILEM,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #129 state WHILEM_B_max_fail */
+        .type = WHILEM,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #130 state BRANCH_next */
+        .type = BRANCH,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #131 state BRANCH_next_fail */
+        .type = BRANCH,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #132 state CURLYM_A */
+        .type = CURLYM,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #133 state CURLYM_A_fail */
+        .type = CURLYM,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #134 state CURLYM_B */
+        .type = CURLYM,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #135 state CURLYM_B_fail */
+        .type = CURLYM,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #136 state IFMATCH_A */
+        .type = IFMATCH,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #137 state IFMATCH_A_fail */
+        .type = IFMATCH,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #138 state CURLY_B_min */
+        .type = CURLY,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #139 state CURLY_B_min_fail */
+        .type = CURLY,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #140 state CURLY_B_max */
+        .type = CURLY,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #141 state CURLY_B_max_fail */
+        .type = CURLY,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #142 state COMMIT_next */
+        .type = COMMIT,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #143 state COMMIT_next_fail */
+        .type = COMMIT,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #144 state MARKPOINT_next */
+        .type = MARKPOINT,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #145 state MARKPOINT_next_fail */
+        .type = MARKPOINT,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #146 state SKIP_next */
+        .type = SKIP,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #147 state SKIP_next_fail */
+        .type = SKIP,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #148 state CUTGROUP_next */
+        .type = CUTGROUP,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #149 state CUTGROUP_next_fail */
+        .type = CUTGROUP,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #150 state KEEPS_next */
+        .type = KEEPS,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #151 state KEEPS_next_fail */
+        .type = KEEPS,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #152 state REF_next */
+        .type = REF,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #153 state REF_next_fail */
+        .type = REF,
+        .arg_len = 0,
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    }
 };
 #endif /* DOINIT */
 
@@ -640,32 +2848,32 @@ EXTCONST char * const PL_reg_name[] = {
 EXTCONST char * PL_reg_extflags_name[];
 #else
 EXTCONST char * const PL_reg_extflags_name[] = {
-       /* Bits in extflags defined: 11111111111111111111111001111111 */
+       /* Bits in extflags defined: 11111111111111110000111111111111 */
        "MULTILINE",        /* 0x00000001 */
        "SINGLELINE",       /* 0x00000002 */
        "FOLD",             /* 0x00000004 */
        "EXTENDED",         /* 0x00000008 */
-       "KEEPCOPY",         /* 0x00000010 */
-       "LOCALE",           /* 0x00000020 */
-       "UNICODE",          /* 0x00000040 */
-       "UNUSED_BIT_7",     /* 0x00000080 */
-       "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 */
-       "SPLIT",            /* 0x01000000 */
+       "IS_ANCHORED",      /* 0x01000000 */
        "COPY_DONE",        /* 0x02000000 */
        "TAINTED_SEEN",     /* 0x04000000 */
        "TAINTED",          /* 0x08000000 */
@@ -676,6 +2884,38 @@ EXTCONST char * const PL_reg_extflags_name[] = {
 };
 #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",                       /* (1<< 0) - 0x00000001 - PREGf_SKIP */
+       "IMPLICIT",                   /* (1<< 1) - 0x00000002 - PREGf_IMPLICIT -  Converted .* to ^.*  */
+       "NAUGHTY",                    /* (1<< 2) - 0x00000004 - PREGf_NAUGHTY -  how exponential is this pattern?  */
+       "VERBARG_SEEN",               /* (1<< 3) - 0x00000008 - PREGf_VERBARG_SEEN */
+       "CUTGROUP_SEEN",              /* (1<< 4) - 0x00000010 - PREGf_CUTGROUP_SEEN */
+       "USE_RE_EVAL",                /* (1<< 5) - 0x00000020 - PREGf_USE_RE_EVAL -  compiled with "use re 'eval'"  */
+       "NOSCAN",                     /* (1<< 6) - 0x00000040 - PREGf_NOSCAN */
+       "",                           /* (1<< 7) - 0x00000080 - *UNUSED* */
+       "GPOS_SEEN",                  /* (1<< 8) - 0x00000100 - PREGf_GPOS_SEEN */
+       "GPOS_FLOAT",                 /* (1<< 9) - 0x00000200 - PREGf_GPOS_FLOAT */
+       "ANCH_MBOL",                  /* (1<<10) - 0x00000400 - PREGf_ANCH_MBOL */
+       "ANCH_SBOL",                  /* (1<<11) - 0x00000800 - PREGf_ANCH_SBOL */
+       "ANCH_GPOS",                  /* (1<<12) - 0x00001000 - PREGf_ANCH_GPOS */
+       "RECURSE_SEEN",               /* (1<<13) - 0x00002000 - PREGf_RECURSE_SEEN */
+       "PESSIMIZE_SEEN",             /* (1<<14) - 0x00004000 - PREGf_PESSIMIZE_SEEN */
+};
+#endif /* DOINIT */
+
+#ifdef DEBUGGING
+#  define REG_INTFLAGS_NAME_SIZE 15
+#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)))
 
@@ -683,9 +2923,9 @@ EXTCONST char * const PL_reg_extflags_name[] = {
 EXTCONST U8 PL_varies[] __attribute__deprecated__;
 #else
 EXTCONST U8 PL_varies[] __attribute__deprecated__ = {
-    CLUMP, BRANCH, BACK, STAR, PLUS, CURLY, CURLYN, CURLYM, CURLYX, WHILEM,
-    REF, REFF, REFFL, REFFU, NREF, NREFF, NREFFL, NREFFU, 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 */
@@ -694,7 +2934,7 @@ EXTCONST U8 PL_varies[] __attribute__deprecated__ = {
 EXTCONST U8 PL_varies_bitmask[];
 #else
 EXTCONST U8 PL_varies_bitmask[] = {
-    0x00, 0x00, 0x00, 0xC0, 0x81, 0x3F, 0xFF, 0x4C, 0x00, 0x00, 0x00, 0x00
+    0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0xC0, 0x1F, 0xFE, 0x97, 0x01, 0x00, 0x00
 };
 #endif /* DOINIT */
 
@@ -706,9 +2946,9 @@ EXTCONST U8 PL_varies_bitmask[] = {
 EXTCONST U8 PL_simple[] __attribute__deprecated__;
 #else
 EXTCONST U8 PL_simple[] __attribute__deprecated__ = {
-    REG_ANY, SANY, CANY, ANYOF, ALNUM, ALNUML, NALNUM, NALNUML, SPACE,
-    SPACEL, NSPACE, NSPACEL, DIGIT, NDIGIT, VERTWS, NVERTWS, HORIZWS,
-    NHORIZWS,
+    REG_ANY, SANY, ANYOF, ANYOFD, ANYOFL, ANYOFPOSIXL, ANYOFH, ANYOFHb,
+    ANYOFHr, ANYOFHs, ANYOFR, ANYOFRb, ANYOFHbbm, ANYOFM, NANYOFM, POSIXD,
+    POSIXL, POSIXU, POSIXA, NPOSIXD, NPOSIXL, NPOSIXU, NPOSIXA, REGEX_SET,
     0
 };
 #endif /* DOINIT */
@@ -717,8 +2957,24 @@ EXTCONST U8 PL_simple[] __attribute__deprecated__ = {
 EXTCONST U8 PL_simple_bitmask[];
 #else
 EXTCONST U8 PL_simple_bitmask[] = {
-    0x00, 0xC0, 0xFF, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07
+    0x00, 0x00, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80
 };
 #endif /* DOINIT */
 
-/* ex: set ro: */
+/* Is 'op', known to be of type EXACT, folding? */
+#define isEXACTFish(op) (__ASSERT_(REGNODE_TYPE(op) == EXACT) (PL_EXACTFish_bitmask & (1U << (op - EXACT))))
+
+/* Do only UTF-8 target strings match 'op', known to be of type EXACT? */
+#define isEXACT_REQ8(op) (__ASSERT_(REGNODE_TYPE(op) == EXACT) (PL_EXACT_REQ8_bitmask & (1U << (op - EXACT))))
+
+#ifndef DOINIT
+EXTCONST U32 PL_EXACTFish_bitmask;
+EXTCONST U32 PL_EXACT_REQ8_bitmask;
+#else
+EXTCONST U32 PL_EXACTFish_bitmask = 0x33F8;
+EXTCONST U32 PL_EXACT_REQ8_bitmask = 0x1E00;
+#endif /* DOINIT */
+
+#endif /* defined(PERL_CORE) || defined(PERL_EXT_RE_BUILD) */
+
+/* ex: set ro ft=c: */