Commit c1da680b25 for perl

commit c1da680b258303fa33d4dd204800ebee8b34b577
Author: Richard Leach <rich+perl@hyphen-dash-hyphen.info>
Date:   Sat Oct 3 23:30:24 2026 +0000

    Add NEXACTb regnode for single negated character (/[^x]/)

    These can be relevant to use cases such as:
    * Scanning for the end of a long, single character prefix
    * Matching characters that are not some kind of closing delimeter

    Specializing on a single character hopefully allows for better
    throughput than the general multi-char `ANYOFM` can manage.

    Matching against a string of 2000000 non-"A" bytes:

                   /\A[^A]+/    /^A[^A]+/
        Blead        4773/s       4762/s
        Patched     56216/s      54094/s

    To find possible starting candidate positions,`NEXACTb` will use
    `S_find_span_end` instead of `S_find_span_end_mask` (used by `NANYOFM`).
    In the worst case, performance of the two should be very similar, but
    in the best case, `S_find_span_end` could be noticeably faster.
    (See https://github.com/Perl/perl5/pull/24894)

diff --git a/pod/perlreguts.pod b/pod/perlreguts.pod
index e1fddbda3b..ddb315456c 100644
--- a/pod/perlreguts.pod
+++ b/pod/perlreguts.pod
@@ -302,6 +302,7 @@ ANYOFHbbm        none bbm   Like ANYOFHb, but only for 2-byte UTF-8
 ANYOFM           byte 1     Like ANYOF, but matches an invariant byte
                             as determined by the mask and arg
 NANYOFM          byte 1     complement of ANYOFM
+NEXACTb          byte 1     Match any byte except the nominated byte

 # POSIX Character Classes:
 POSIXD           none       Some [[:class:]] under /d; the FLAGS field
diff --git a/regcomp.c b/regcomp.c
index 0bd4cf8e04..a185274d63 100644
--- a/regcomp.c
+++ b/regcomp.c
@@ -12239,14 +12239,24 @@ S_optimize_regclass(pTHX_
             {
                 U8 ANYOFM_mask;

-                op = ANYOFM + inverted;
+                if (inverted && full_cp_count == 1) {
+                    /* Single excluded invariant byte -> NEXACTb.
+                     * This is common enough (searching for the first byte
+                     * after a long repeating prefix, searching for
+                     * "not a closing delimiter" that it's worth
+                     * specializing for. */
+                    op = NEXACTb;
+                    *ret = reg1node(pRExC_state, op, lowest_cp);
+                } else {
+                    op = ANYOFM + inverted;

-                /* We need to make the bits that differ be 0's */
-                ANYOFM_mask = ~ bits_differing; /* This goes into FLAGS */
+                    /* We need to make the bits that differ be 0's */
+                    ANYOFM_mask = ~ bits_differing; /* This goes into FLAGS */

-                /* The argument is the lowest code point */
-                *ret = reg1node(pRExC_state, op, lowest_cp);
-                FLAGS(REGNODE_p(*ret)) = ANYOFM_mask;
+                    /* The argument is the lowest code point */
+                    *ret = reg1node(pRExC_state, op, lowest_cp);
+                    FLAGS(REGNODE_p(*ret)) = ANYOFM_mask;
+                }
             }

           done_anyofm:
diff --git a/regcomp.sym b/regcomp.sym
index 021bafadc4..b468700c82 100644
--- a/regcomp.sym
+++ b/regcomp.sym
@@ -574,6 +574,26 @@ return {
           ],
       },
       #################################
+      {
+        "GROUP" => "NEXACTb",
+        "TYPE" => "NEXACTb",
+        "line" => __LINE__,
+        "ops" => [
+            {
+              "NAME" => "NEXACTb",
+              "TYPE" => "NEXACTb",
+              "attr" => {
+                "arg_spec" => "byte",
+                "simple"   => 1,
+              },
+              "desc" =>
+                "Match any byte except the nominated byte",
+            "line" => __LINE__,
+            "struct" => "regnode_1",
+          },
+        ],
+      },
+      #################################
       {
         "GROUP" => "POSIXD",
         "TYPE" => "POSIXD",
diff --git a/regcomp_debug.c b/regcomp_debug.c
index e243292f1f..24c6523826 100644
--- a/regcomp_debug.c
+++ b/regcomp_debug.c
@@ -1006,6 +1006,10 @@ Perl_regprop(pTHX_ const regexp *prog, SV *sv, const regnode *o, const regmatch_

         SvREFCNT_dec(cp_list);
     }
+    else if (op == NEXACTb) {
+        sv_catpvf(sv, "[%s%c%s]",
+                       PL_colors[0], (int) ARG1u(o), PL_colors[1]);
+    }
     else if (k == ANYOFHbbm) {
         SV * cp_list = get_ANYOFHbbm_contents(o);
         sv_catpvf(sv, "[%s", PL_colors[0]);
diff --git a/regcomp_study.c b/regcomp_study.c
index 99e3e2874d..d152e69c0a 100644
--- a/regcomp_study.c
+++ b/regcomp_study.c
@@ -3095,6 +3095,22 @@ Perl_study_chunk(pTHX_
                     break;
                   }

+                case NEXACTb:
+                  {
+                    SV* Nb_invlist = new_invlist_(2);
+                    Nb_invlist = add_cp_to_invlist(Nb_invlist,
+                                                   (U8) ARG1u(scan));
+                    if (flags & SCF_DO_STCLASS_OR) {
+                        ssc_union(data->start_class, Nb_invlist, true);
+                    }
+                    else if (flags & SCF_DO_STCLASS_AND) {
+                        ssc_intersection(data->start_class, Nb_invlist, true);
+                        ssc_clear_locale(data->start_class);
+                    }
+                    SvREFCNT_dec_NN(Nb_invlist);
+                    break;
+                  }
+
                 case NPOSIXL:
                     invert = 1;
                     /* FALLTHROUGH */
diff --git a/regexec.c b/regexec.c
index bbaedfe511..7a8bbae541 100644
--- a/regexec.c
+++ b/regexec.c
@@ -2407,8 +2407,20 @@ S_find_byclass(pTHX_ regexp * prog, const regnode *c, char *s,
       case NANYOFM_t8_p8: /* UTF-8ness does matter because can match UTF-8
                                   variants. */
         REXEC_FBC_UTF8_FIND_NEXT_SCAN(
-                        (char *) find_span_end_mask((U8 *) s, (U8 *) strend,
-                                                    (U8) ARG1u(c), FLAGS(c)));
+            (char *) find_span_end_mask((U8 *) s, (U8 *) strend,
+                                        (U8) ARG1u(c), FLAGS(c)));
+        break;
+
+      case NEXACTb_tb_pb:
+      case NEXACTb_tb_p8:
+        REXEC_FBC_NON_UTF8_FIND_NEXT_SCAN(
+           find_span_end((U8 *) s, (U8 *) strend, (U8) ARG1u(c)));
+        break;
+
+      case NEXACTb_t8_pb:
+      case NEXACTb_t8_p8:
+        REXEC_FBC_UTF8_CLASS_SCAN(
+           ! (UTF8SKIP(s) == 1 && (U8) *s == (U8) ARG1u(c)));
         break;

       /* These nodes all require at least one code point to be in UTF-8 to
@@ -7856,6 +7868,16 @@ S_regmatch(pTHX_ regmatch_info *reginfo, char *startpos, regnode *prog)
             goto increment_locinput;
             break;

+        case NEXACTb: /*  /[^x]/ : single excluded byte  */
+            if (   NEXTCHR_IS_EOS
+                || (U8) ARG1u(scan) == UCHARAT(locinput)
+                || locinput >= loceol)
+            {
+                sayNO;
+            }
+            goto increment_locinput;
+            break;
+
         case ANYOFH:
             if (   ! utf8_target
                 ||   NEXTCHR_IS_EOS
@@ -10839,6 +10861,27 @@ S_regrepeat(pTHX_ regexp *prog, char **startposp, const regnode *p,
                                          (U8) ARG1u(p), FLAGS(p));
         break;

+      case NEXACTb_t8:
+        {
+          const U8 nchar = (U8) ARG1u(p);
+          while (     hardcount < max
+                 &&   scan < this_eol
+                 &&  (UTF8SKIP(scan) != 1 || (U8) *scan != nchar))
+             {
+                 scan += UTF8SKIP(scan);
+                 hardcount++;
+             }
+        }
+        break;
+
+      case NEXACTb_tb:
+        {
+          char * found = (char *) memchr(scan, (U8) ARG1u(p),
+                                         this_eol - scan);
+          scan = found ? found : this_eol;
+        }
+        break;
+
       case ANYOFH_tb: /* ANYOFH only can match UTF-8 targets */
       case ANYOFHb_tb:
       case ANYOFHbbm_tb:
diff --git a/regnodes.h b/regnodes.h
index 82bc556355..741b0924a2 100644
--- a/regnodes.h
+++ b/regnodes.h
@@ -79,6 +79,7 @@ typedef struct regnode                           tregnode_NBOUND;
 typedef struct regnode                           tregnode_NBOUNDA;
 typedef struct regnode                           tregnode_NBOUNDL;
 typedef struct regnode                           tregnode_NBOUNDU;
+typedef struct regnode_1                         tregnode_NEXACTb;
 typedef struct regnode                           tregnode_NOTHING;
 typedef struct regnode                           tregnode_NPOSIXA;
 typedef struct regnode                           tregnode_NPOSIXD;
@@ -126,8 +127,8 @@ typedef struct regnode                           tregnode_WHILEM;

 /* Regops and State definitions */

-#define REGNODE_MAX           	110
-#define REGMATCH_STATE_MAX    	154
+#define REGNODE_MAX           	111
+#define REGMATCH_STATE_MAX    	155

 /* -- 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)))
@@ -489,8 +490,18 @@ typedef struct regnode                           tregnode_WHILEM;
 #define NANYOFM_t8_p8               ((NANYOFM) * 4 + 3)

 /* 0x20 :  32
+   NEXACTb - Match any byte except the nominated byte */
+#define NEXACTb                     (NANYOFM + 1)
+#define NEXACTb_tb                  ((NEXACTb) * 2)
+#define NEXACTb_t8                  ((NEXACTb) * 2 + 1)
+#define NEXACTb_tb_pb               ((NEXACTb) * 4)
+#define NEXACTb_tb_p8               ((NEXACTb) * 4 + 1)
+#define NEXACTb_t8_pb               ((NEXACTb) * 4 + 2)
+#define NEXACTb_t8_p8               ((NEXACTb) * 4 + 3)
+
+/* 0x21 :  33
    POSIXD - Some [[:class:]] under /d; the FLAGS field gives which one */
-#define POSIXD                      (NANYOFM + 1)
+#define POSIXD                      (NEXACTb + 1)
 #define POSIXD_tb                   ((POSIXD) * 2)
 #define POSIXD_t8                   ((POSIXD) * 2 + 1)
 #define POSIXD_tb_pb                ((POSIXD) * 4)
@@ -498,7 +509,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define POSIXD_t8_pb                ((POSIXD) * 4 + 2)
 #define POSIXD_t8_p8                ((POSIXD) * 4 + 3)

-/* 0x21 :  33
+/* 0x22 :  34
    POSIXL - Some [[:class:]] under /l; the FLAGS field gives which one */
 #define POSIXL                      (POSIXD + 1)
 #define POSIXL_tb                   ((POSIXL) * 2)
@@ -508,7 +519,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define POSIXL_t8_pb                ((POSIXL) * 4 + 2)
 #define POSIXL_t8_p8                ((POSIXL) * 4 + 3)

-/* 0x22 :  34
+/* 0x23 :  35
    POSIXU - Some [[:class:]] under /u; the FLAGS field gives which one */
 #define POSIXU                      (POSIXL + 1)
 #define POSIXU_tb                   ((POSIXU) * 2)
@@ -518,7 +529,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define POSIXU_t8_pb                ((POSIXU) * 4 + 2)
 #define POSIXU_t8_p8                ((POSIXU) * 4 + 3)

-/* 0x23 :  35
+/* 0x24 :  36
    POSIXA - Some [[:class:]] under /a; the FLAGS field gives which one */
 #define POSIXA                      (POSIXU + 1)
 #define POSIXA_tb                   ((POSIXA) * 2)
@@ -528,7 +539,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define POSIXA_t8_pb                ((POSIXA) * 4 + 2)
 #define POSIXA_t8_p8                ((POSIXA) * 4 + 3)

-/* 0x24 :  36
+/* 0x25 :  37
    NPOSIXD - complement of POSIXD, [[:^class:]] */
 #define NPOSIXD                     (POSIXA + 1)
 #define NPOSIXD_tb                  ((NPOSIXD) * 2)
@@ -538,7 +549,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define NPOSIXD_t8_pb               ((NPOSIXD) * 4 + 2)
 #define NPOSIXD_t8_p8               ((NPOSIXD) * 4 + 3)

-/* 0x25 :  37
+/* 0x26 :  38
    NPOSIXL - complement of POSIXL, [[:^class:]] */
 #define NPOSIXL                     (NPOSIXD + 1)
 #define NPOSIXL_tb                  ((NPOSIXL) * 2)
@@ -548,7 +559,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define NPOSIXL_t8_pb               ((NPOSIXL) * 4 + 2)
 #define NPOSIXL_t8_p8               ((NPOSIXL) * 4 + 3)

-/* 0x26 :  38
+/* 0x27 :  39
    NPOSIXU - complement of POSIXU, [[:^class:]] */
 #define NPOSIXU                     (NPOSIXL + 1)
 #define NPOSIXU_tb                  ((NPOSIXU) * 2)
@@ -558,7 +569,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define NPOSIXU_t8_pb               ((NPOSIXU) * 4 + 2)
 #define NPOSIXU_t8_p8               ((NPOSIXU) * 4 + 3)

-/* 0x27 :  39
+/* 0x28 :  40
    NPOSIXA - complement of POSIXA, [[:^class:]] */
 #define NPOSIXA                     (NPOSIXU + 1)
 #define NPOSIXA_tb                  ((NPOSIXA) * 2)
@@ -568,7 +579,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define NPOSIXA_t8_pb               ((NPOSIXA) * 4 + 2)
 #define NPOSIXA_t8_p8               ((NPOSIXA) * 4 + 3)

-/* 0x28 :  40
+/* 0x29 :  41
    CLUMP - Match any extended grapheme cluster sequence */
 #define CLUMP                       (NPOSIXA + 1)
 #define CLUMP_tb                    ((CLUMP) * 2)
@@ -578,7 +589,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define CLUMP_t8_pb                 ((CLUMP) * 4 + 2)
 #define CLUMP_t8_p8                 ((CLUMP) * 4 + 3)

-/* 0x29 :  41
+/* 0x2a :  42
    BRANCH - Match this alternative, or the next... */
 #define BRANCH                      (CLUMP + 1)
 #define BRANCH_tb                   ((BRANCH) * 2)
@@ -588,7 +599,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define BRANCH_t8_pb                ((BRANCH) * 4 + 2)
 #define BRANCH_t8_p8                ((BRANCH) * 4 + 3)

-/* 0x2a :  42
+/* 0x2b :  43
    EXACT - Match this string (flags field is the length). */
 #define EXACT                       (BRANCH + 1)
 #define EXACT_tb                    ((EXACT) * 2)
@@ -598,7 +609,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define EXACT_t8_pb                 ((EXACT) * 4 + 2)
 #define EXACT_t8_p8                 ((EXACT) * 4 + 3)

-/* 0x2b :  43
+/* 0x2c :  44
    LEXACT - Match this long string (preceded by length; flags unused). */
 #define LEXACT                      (EXACT + 1)
 #define LEXACT_tb                   ((LEXACT) * 2)
@@ -608,7 +619,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define LEXACT_t8_pb                ((LEXACT) * 4 + 2)
 #define LEXACT_t8_p8                ((LEXACT) * 4 + 3)

-/* 0x2c :  44
+/* 0x2d :  45
    EXACTL - Like EXACT, but /l is in effect (used so locale-related warnings
    can be checked for) */
 #define EXACTL                      (LEXACT + 1)
@@ -619,7 +630,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define EXACTL_t8_pb                ((EXACTL) * 4 + 2)
 #define EXACTL_t8_p8                ((EXACTL) * 4 + 3)

-/* 0x2d :  45
+/* 0x2e :  46
    EXACTF - Like EXACT, but match using /id rules; (string not UTF-8, ASCII
    folded; non-ASCII not) */
 #define EXACTF                      (EXACTL + 1)
@@ -630,7 +641,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define EXACTF_t8_pb                ((EXACTF) * 4 + 2)
 #define EXACTF_t8_p8                ((EXACTF) * 4 + 3)

-/* 0x2e :  46
+/* 0x2f :  47
    EXACTFL - Like EXACT, but match using /il rules; (string not likely to be
    folded) */
 #define EXACTFL                     (EXACTF + 1)
@@ -641,7 +652,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define EXACTFL_t8_pb               ((EXACTFL) * 4 + 2)
 #define EXACTFL_t8_p8               ((EXACTFL) * 4 + 3)

-/* 0x2f :  47
+/* 0x30 :  48
    EXACTFU - Like EXACT, but match using /iu rules; (string folded) */
 #define EXACTFU                     (EXACTFL + 1)
 #define EXACTFU_tb                  ((EXACTFU) * 2)
@@ -651,7 +662,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define EXACTFU_t8_pb               ((EXACTFU) * 4 + 2)
 #define EXACTFU_t8_p8               ((EXACTFU) * 4 + 3)

-/* 0x30 :  48
+/* 0x31 :  49
    EXACTFAA - 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) */
@@ -663,7 +674,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define EXACTFAA_t8_pb              ((EXACTFAA) * 4 + 2)
 #define EXACTFAA_t8_p8              ((EXACTFAA) * 4 + 3)

-/* 0x31 :  49
+/* 0x32 :  50
    EXACTFAA_NO_TRIE - Like EXACTFAA, (string not UTF-8, folded except: MICRO,
    SHARP S; folded length <= unfolded, not currently trie-able) */
 #define EXACTFAA_NO_TRIE            (EXACTFAA + 1)
@@ -674,7 +685,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define EXACTFAA_NO_TRIE_t8_pb      ((EXACTFAA_NO_TRIE) * 4 + 2)
 #define EXACTFAA_NO_TRIE_t8_p8      ((EXACTFAA_NO_TRIE) * 4 + 3)

-/* 0x32 :  50
+/* 0x33 :  51
    EXACTFUP - Like EXACT, but match using /iu rules; (string not UTF-8, folded
    except MICRO: hence Problematic) */
 #define EXACTFUP                    (EXACTFAA_NO_TRIE + 1)
@@ -685,7 +696,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define EXACTFUP_t8_pb              ((EXACTFUP) * 4 + 2)
 #define EXACTFUP_t8_p8              ((EXACTFUP) * 4 + 3)

-/* 0x33 :  51
+/* 0x34 :  52
    EXACTFLU8 - Like EXACTFU, but use /il, UTF-8, (string is folded, and
    everything in it is above 255 */
 #define EXACTFLU8                   (EXACTFUP + 1)
@@ -696,7 +707,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define EXACTFLU8_t8_pb             ((EXACTFLU8) * 4 + 2)
 #define EXACTFLU8_t8_p8             ((EXACTFLU8) * 4 + 3)

-/* 0x34 :  52
+/* 0x35 :  53
    EXACT_REQ8 - Like EXACT, but only UTF-8 encoded targets can match */
 #define EXACT_REQ8                  (EXACTFLU8 + 1)
 #define EXACT_REQ8_tb               ((EXACT_REQ8) * 2)
@@ -706,7 +717,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define EXACT_REQ8_t8_pb            ((EXACT_REQ8) * 4 + 2)
 #define EXACT_REQ8_t8_p8            ((EXACT_REQ8) * 4 + 3)

-/* 0x35 :  53
+/* 0x36 :  54
    LEXACT_REQ8 - Like LEXACT, but only UTF-8 encoded targets can match */
 #define LEXACT_REQ8                 (EXACT_REQ8 + 1)
 #define LEXACT_REQ8_tb              ((LEXACT_REQ8) * 2)
@@ -716,7 +727,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define LEXACT_REQ8_t8_pb           ((LEXACT_REQ8) * 4 + 2)
 #define LEXACT_REQ8_t8_p8           ((LEXACT_REQ8) * 4 + 3)

-/* 0x36 :  54
+/* 0x37 :  55
    EXACTFU_REQ8 - Like EXACTFU, but only UTF-8 encoded targets can match */
 #define EXACTFU_REQ8                (LEXACT_REQ8 + 1)
 #define EXACTFU_REQ8_tb             ((EXACTFU_REQ8) * 2)
@@ -726,7 +737,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define EXACTFU_REQ8_t8_pb          ((EXACTFU_REQ8) * 4 + 2)
 #define EXACTFU_REQ8_t8_p8          ((EXACTFU_REQ8) * 4 + 3)

-/* 0x37 :  55
+/* 0x38 :  56
    EXACTFU_S_EDGE - /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              (EXACTFU_REQ8 + 1)
@@ -737,7 +748,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define EXACTFU_S_EDGE_t8_pb        ((EXACTFU_S_EDGE) * 4 + 2)
 #define EXACTFU_S_EDGE_t8_p8        ((EXACTFU_S_EDGE) * 4 + 3)

-/* 0x38 :  56
+/* 0x39 :  57
    LNBREAK - generic newline pattern */
 #define LNBREAK                     (EXACTFU_S_EDGE + 1)
 #define LNBREAK_tb                  ((LNBREAK) * 2)
@@ -747,7 +758,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define LNBREAK_t8_pb               ((LNBREAK) * 4 + 2)
 #define LNBREAK_t8_p8               ((LNBREAK) * 4 + 3)

-/* 0x39 :  57
+/* 0x3a :  58
    TRIE - Match many EXACT(F[ALU]?)? at once. flags==type */
 #define TRIE                        (LNBREAK + 1)
 #define TRIE_tb                     ((TRIE) * 2)
@@ -757,7 +768,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define TRIE_t8_pb                  ((TRIE) * 4 + 2)
 #define TRIE_t8_p8                  ((TRIE) * 4 + 3)

-/* 0x3a :  58
+/* 0x3b :  59
    AHOCORASICK - Aho Corasick stclass. flags==type */
 #define AHOCORASICK                 (TRIE + 1)
 #define AHOCORASICK_tb              ((AHOCORASICK) * 2)
@@ -767,7 +778,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define AHOCORASICK_t8_pb           ((AHOCORASICK) * 4 + 2)
 #define AHOCORASICK_t8_p8           ((AHOCORASICK) * 4 + 3)

-/* 0x3b :  59
+/* 0x3c :  60
    LTRIE - Same as TRIE, but with longjump support */
 #define LTRIE                       (AHOCORASICK + 1)
 #define LTRIE_tb                    ((LTRIE) * 2)
@@ -777,7 +788,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define LTRIE_t8_pb                 ((LTRIE) * 4 + 2)
 #define LTRIE_t8_p8                 ((LTRIE) * 4 + 3)

-/* 0x3c :  60
+/* 0x3d :  61
    NOTHING - Match empty string. */
 #define NOTHING                     (LTRIE + 1)
 #define NOTHING_tb                  ((NOTHING) * 2)
@@ -787,7 +798,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define NOTHING_t8_pb               ((NOTHING) * 4 + 2)
 #define NOTHING_t8_p8               ((NOTHING) * 4 + 3)

-/* 0x3d :  61
+/* 0x3e :  62
    TAIL - Match empty string. Can jump here from outside. */
 #define TAIL                        (NOTHING + 1)
 #define TAIL_tb                     ((TAIL) * 2)
@@ -797,7 +808,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define TAIL_t8_pb                  ((TAIL) * 4 + 2)
 #define TAIL_t8_p8                  ((TAIL) * 4 + 3)

-/* 0x3e :  62
+/* 0x3f :  63
    OPTIMIZED - This is not really a node, but an optimized away piece of a
    "long" node.  To simplify debugging output, we mark it as if it were a node */
 #define OPTIMIZED                   (TAIL + 1)
@@ -808,7 +819,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define OPTIMIZED_t8_pb             ((OPTIMIZED) * 4 + 2)
 #define OPTIMIZED_t8_p8             ((OPTIMIZED) * 4 + 3)

-/* 0x3f :  63
+/* 0x40 :  64
    STAR - Match this (simple) thing 0 or more times: /A{0,}B/ where A is width
    1 char */
 #define STAR                        (OPTIMIZED + 1)
@@ -819,7 +830,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define STAR_t8_pb                  ((STAR) * 4 + 2)
 #define STAR_t8_p8                  ((STAR) * 4 + 3)

-/* 0x40 :  64
+/* 0x41 :  65
    PLUS - Match this (simple) thing 1 or more times: /A{1,}B/ where A is width
    1 char */
 #define PLUS                        (STAR + 1)
@@ -830,7 +841,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define PLUS_t8_pb                  ((PLUS) * 4 + 2)
 #define PLUS_t8_p8                  ((PLUS) * 4 + 3)

-/* 0x41 :  65
+/* 0x42 :  66
    CURLY - Match this (simple) thing {n,m} times: /A{m,n}B/ where A is width 1
    char */
 #define CURLY                       (PLUS + 1)
@@ -841,7 +852,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define CURLY_t8_pb                 ((CURLY) * 4 + 2)
 #define CURLY_t8_p8                 ((CURLY) * 4 + 3)

-/* 0x42 :  66
+/* 0x43 :  67
    CURLYN - Capture next-after-this simple thing: /(A){m,n}B/ where A is width
    1 char */
 #define CURLYN                      (CURLY + 1)
@@ -852,7 +863,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define CURLYN_t8_pb                ((CURLYN) * 4 + 2)
 #define CURLYN_t8_p8                ((CURLYN) * 4 + 3)

-/* 0x43 :  67
+/* 0x44 :  68
    CURLYM - Capture this medium-complex thing {n,m} times: /(A){m,n}B/ where A
    is fixed-length */
 #define CURLYM                      (CURLYN + 1)
@@ -863,7 +874,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define CURLYM_t8_pb                ((CURLYM) * 4 + 2)
 #define CURLYM_t8_p8                ((CURLYM) * 4 + 3)

-/* 0x44 :  68
+/* 0x45 :  69
    CURLYX - Match/Capture this complex thing {n,m} times. */
 #define CURLYX                      (CURLYM + 1)
 #define CURLYX_tb                   ((CURLYX) * 2)
@@ -873,7 +884,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define CURLYX_t8_pb                ((CURLYX) * 4 + 2)
 #define CURLYX_t8_p8                ((CURLYX) * 4 + 3)

-/* 0x45 :  69
+/* 0x46 :  70
    WHILEM - Do curly processing and see if rest matches. */
 #define WHILEM                      (CURLYX + 1)
 #define WHILEM_tb                   ((WHILEM) * 2)
@@ -883,7 +894,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define WHILEM_t8_pb                ((WHILEM) * 4 + 2)
 #define WHILEM_t8_p8                ((WHILEM) * 4 + 3)

-/* 0x46 :  70
+/* 0x47 :  71
    OPEN - Mark this point in input as start of #n. */
 #define OPEN                        (WHILEM + 1)
 #define OPEN_tb                     ((OPEN) * 2)
@@ -893,7 +904,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define OPEN_t8_pb                  ((OPEN) * 4 + 2)
 #define OPEN_t8_p8                  ((OPEN) * 4 + 3)

-/* 0x47 :  71
+/* 0x48 :  72
    CLOSE - Close corresponding OPEN of #n. */
 #define CLOSE                       (OPEN + 1)
 #define CLOSE_tb                    ((CLOSE) * 2)
@@ -903,7 +914,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define CLOSE_t8_pb                 ((CLOSE) * 4 + 2)
 #define CLOSE_t8_p8                 ((CLOSE) * 4 + 3)

-/* 0x48 :  72
+/* 0x49 :  73
    SROPEN - Start a script run */
 #define SROPEN                      (CLOSE + 1)
 #define SROPEN_tb                   ((SROPEN) * 2)
@@ -913,7 +924,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define SROPEN_t8_pb                ((SROPEN) * 4 + 2)
 #define SROPEN_t8_p8                ((SROPEN) * 4 + 3)

-/* 0x49 :  73
+/* 0x4a :  74
    SRCLOSE -  */
 #define SRCLOSE                     (SROPEN + 1)
 #define SRCLOSE_tb                  ((SRCLOSE) * 2)
@@ -923,7 +934,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define SRCLOSE_t8_pb               ((SRCLOSE) * 4 + 2)
 #define SRCLOSE_t8_p8               ((SRCLOSE) * 4 + 3)

-/* 0x4a :  74
+/* 0x4b :  75
    REF - Match some already matched string */
 #define REF                         (SRCLOSE + 1)
 #define REF_tb                      ((REF) * 2)
@@ -933,7 +944,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define REF_t8_pb                   ((REF) * 4 + 2)
 #define REF_t8_p8                   ((REF) * 4 + 3)

-/* 0x4b :  75
+/* 0x4c :  76
    REFF - Match already matched string, using /di rules. */
 #define REFF                        (REF + 1)
 #define REFF_tb                     ((REFF) * 2)
@@ -943,7 +954,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define REFF_t8_pb                  ((REFF) * 4 + 2)
 #define REFF_t8_p8                  ((REFF) * 4 + 3)

-/* 0x4c :  76
+/* 0x4d :  77
    REFFL - Match already matched string, using /li rules. */
 #define REFFL                       (REFF + 1)
 #define REFFL_tb                    ((REFFL) * 2)
@@ -953,7 +964,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define REFFL_t8_pb                 ((REFFL) * 4 + 2)
 #define REFFL_t8_p8                 ((REFFL) * 4 + 3)

-/* 0x4d :  77
+/* 0x4e :  78
    REFFU - Match already matched string, using /ui. */
 #define REFFU                       (REFFL + 1)
 #define REFFU_tb                    ((REFFU) * 2)
@@ -963,7 +974,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define REFFU_t8_pb                 ((REFFU) * 4 + 2)
 #define REFFU_t8_p8                 ((REFFU) * 4 + 3)

-/* 0x4e :  78
+/* 0x4f :  79
    REFFA - Match already matched string, using /aai rules. */
 #define REFFA                       (REFFU + 1)
 #define REFFA_tb                    ((REFFA) * 2)
@@ -973,7 +984,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define REFFA_t8_pb                 ((REFFA) * 4 + 2)
 #define REFFA_t8_p8                 ((REFFA) * 4 + 3)

-/* 0x4f :  79
+/* 0x50 :  80
    REFN - Match some already matched string */
 #define REFN                        (REFFA + 1)
 #define REFN_tb                     ((REFN) * 2)
@@ -983,7 +994,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define REFN_t8_pb                  ((REFN) * 4 + 2)
 #define REFN_t8_p8                  ((REFN) * 4 + 3)

-/* 0x50 :  80
+/* 0x51 :  81
    REFFN - Match already matched string, using /di rules. */
 #define REFFN                       (REFN + 1)
 #define REFFN_tb                    ((REFFN) * 2)
@@ -993,7 +1004,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define REFFN_t8_pb                 ((REFFN) * 4 + 2)
 #define REFFN_t8_p8                 ((REFFN) * 4 + 3)

-/* 0x51 :  81
+/* 0x52 :  82
    REFFLN - Match already matched string, using /li rules. */
 #define REFFLN                      (REFFN + 1)
 #define REFFLN_tb                   ((REFFLN) * 2)
@@ -1003,7 +1014,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define REFFLN_t8_pb                ((REFFLN) * 4 + 2)
 #define REFFLN_t8_p8                ((REFFLN) * 4 + 3)

-/* 0x52 :  82
+/* 0x53 :  83
    REFFUN - Match already matched string, using /ui rules. */
 #define REFFUN                      (REFFLN + 1)
 #define REFFUN_tb                   ((REFFUN) * 2)
@@ -1013,7 +1024,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define REFFUN_t8_pb                ((REFFUN) * 4 + 2)
 #define REFFUN_t8_p8                ((REFFUN) * 4 + 3)

-/* 0x53 :  83
+/* 0x54 :  84
    REFFAN - Match already matched string, using /aai rules. */
 #define REFFAN                      (REFFUN + 1)
 #define REFFAN_tb                   ((REFFAN) * 2)
@@ -1023,7 +1034,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define REFFAN_t8_pb                ((REFFAN) * 4 + 2)
 #define REFFAN_t8_p8                ((REFFAN) * 4 + 3)

-/* 0x54 :  84
+/* 0x55 :  85
    BRANCHJ - BRANCH with long offset. */
 #define BRANCHJ                     (REFFAN + 1)
 #define BRANCHJ_tb                  ((BRANCHJ) * 2)
@@ -1033,7 +1044,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define BRANCHJ_t8_pb               ((BRANCHJ) * 4 + 2)
 #define BRANCHJ_t8_p8               ((BRANCHJ) * 4 + 3)

-/* 0x55 :  85
+/* 0x56 :  86
    IFMATCH - Succeeds if the following matches; non-zero flags "f", next_off
    "o" means lookbehind assertion starting "f..(f-o)" characters before
    current */
@@ -1045,7 +1056,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define IFMATCH_t8_pb               ((IFMATCH) * 4 + 2)
 #define IFMATCH_t8_p8               ((IFMATCH) * 4 + 3)

-/* 0x56 :  86
+/* 0x57 :  87
    UNLESSM - Fails if the following matches; non-zero flags "f", next_off "o"
    means lookbehind assertion starting "f..(f-o)" characters before current */
 #define UNLESSM                     (IFMATCH + 1)
@@ -1056,7 +1067,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define UNLESSM_t8_pb               ((UNLESSM) * 4 + 2)
 #define UNLESSM_t8_p8               ((UNLESSM) * 4 + 3)

-/* 0x57 :  87
+/* 0x58 :  88
    SUSPEND - "Independent" sub-RE. */
 #define SUSPEND                     (UNLESSM + 1)
 #define SUSPEND_tb                  ((SUSPEND) * 2)
@@ -1066,7 +1077,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define SUSPEND_t8_pb               ((SUSPEND) * 4 + 2)
 #define SUSPEND_t8_p8               ((SUSPEND) * 4 + 3)

-/* 0x58 :  88
+/* 0x59 :  89
    IFTHEN - Switch, should be preceded by switcher. */
 #define IFTHEN                      (SUSPEND + 1)
 #define IFTHEN_tb                   ((IFTHEN) * 2)
@@ -1076,7 +1087,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define IFTHEN_t8_pb                ((IFTHEN) * 4 + 2)
 #define IFTHEN_t8_p8                ((IFTHEN) * 4 + 3)

-/* 0x59 :  89
+/* 0x5a :  90
    RENUM - Group with independently numbered parens. Not used yet. */
 #define RENUM                       (IFTHEN + 1)
 #define RENUM_tb                    ((RENUM) * 2)
@@ -1086,7 +1097,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define RENUM_t8_pb                 ((RENUM) * 4 + 2)
 #define RENUM_t8_p8                 ((RENUM) * 4 + 3)

-/* 0x5a :  90
+/* 0x5b :  91
    LONGJMP - Jump far away. */
 #define LONGJMP                     (RENUM + 1)
 #define LONGJMP_tb                  ((LONGJMP) * 2)
@@ -1096,7 +1107,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define LONGJMP_t8_pb               ((LONGJMP) * 4 + 2)
 #define LONGJMP_t8_p8               ((LONGJMP) * 4 + 3)

-/* 0x5b :  91
+/* 0x5c :  92
    MINMOD - Next operator is not greedy. */
 #define MINMOD                      (LONGJMP + 1)
 #define MINMOD_tb                   ((MINMOD) * 2)
@@ -1106,7 +1117,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define MINMOD_t8_pb                ((MINMOD) * 4 + 2)
 #define MINMOD_t8_p8                ((MINMOD) * 4 + 3)

-/* 0x5c :  92
+/* 0x5d :  93
    LOGICAL - Next opcode should set the flag only. */
 #define LOGICAL                     (MINMOD + 1)
 #define LOGICAL_tb                  ((LOGICAL) * 2)
@@ -1116,7 +1127,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define LOGICAL_t8_pb               ((LOGICAL) * 4 + 2)
 #define LOGICAL_t8_p8               ((LOGICAL) * 4 + 3)

-/* 0x5d :  93
+/* 0x5e :  94
    EVAL - Execute some Perl code. Used by other opcodes in some cases */
 #define EVAL                        (LOGICAL + 1)
 #define EVAL_tb                     ((EVAL) * 2)
@@ -1126,7 +1137,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define EVAL_t8_pb                  ((EVAL) * 4 + 2)
 #define EVAL_t8_p8                  ((EVAL) * 4 + 3)

-/* 0x5e :  94
+/* 0x5f :  95
    GOSUB - recurse to paren arg1 at (signed) ofs arg2 */
 #define GOSUB                       (EVAL + 1)
 #define GOSUB_tb                    ((GOSUB) * 2)
@@ -1136,7 +1147,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define GOSUB_t8_pb                 ((GOSUB) * 4 + 2)
 #define GOSUB_t8_p8                 ((GOSUB) * 4 + 3)

-/* 0x5f :  95
+/* 0x60 :  96
    GROUPP - Whether the group matched. */
 #define GROUPP                      (GOSUB + 1)
 #define GROUPP_tb                   ((GROUPP) * 2)
@@ -1146,7 +1157,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define GROUPP_t8_pb                ((GROUPP) * 4 + 2)
 #define GROUPP_t8_p8                ((GROUPP) * 4 + 3)

-/* 0x60 :  96
+/* 0x61 :  97
    GROUPPN - Whether the named group matched. */
 #define GROUPPN                     (GROUPP + 1)
 #define GROUPPN_tb                  ((GROUPPN) * 2)
@@ -1156,7 +1167,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define GROUPPN_t8_pb               ((GROUPPN) * 4 + 2)
 #define GROUPPN_t8_p8               ((GROUPPN) * 4 + 3)

-/* 0x61 :  97
+/* 0x62 :  98
    INSUBP - Whether we are in a specific recurse. */
 #define INSUBP                      (GROUPPN + 1)
 #define INSUBP_tb                   ((INSUBP) * 2)
@@ -1166,7 +1177,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define INSUBP_t8_pb                ((INSUBP) * 4 + 2)
 #define INSUBP_t8_p8                ((INSUBP) * 4 + 3)

-/* 0x62 :  98
+/* 0x63 :  99
    DEFINEP - Define regex subroutines. Contents never executed directly,
    disallows 'no' branch in conditional. */
 #define DEFINEP                     (INSUBP + 1)
@@ -1177,7 +1188,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define DEFINEP_t8_pb               ((DEFINEP) * 4 + 2)
 #define DEFINEP_t8_p8               ((DEFINEP) * 4 + 3)

-/* 0x63 :  99
+/* 0x64 : 100
    ENDLIKE - Used only for the type field of verbs */
 #define ENDLIKE                     (DEFINEP + 1)
 #define ENDLIKE_tb                  ((ENDLIKE) * 2)
@@ -1187,7 +1198,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define ENDLIKE_t8_pb               ((ENDLIKE) * 4 + 2)
 #define ENDLIKE_t8_p8               ((ENDLIKE) * 4 + 3)

-/* 0x64 : 100
+/* 0x65 : 101
    OPFAIL - Same as (?!), but with verb arg */
 #define OPFAIL                      (ENDLIKE + 1)
 #define OPFAIL_tb                   ((OPFAIL) * 2)
@@ -1197,7 +1208,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define OPFAIL_t8_pb                ((OPFAIL) * 4 + 2)
 #define OPFAIL_t8_p8                ((OPFAIL) * 4 + 3)

-/* 0x65 : 101
+/* 0x66 : 102
    ACCEPT - Accepts the current matched string, with verbar */
 #define ACCEPT                      (OPFAIL + 1)
 #define ACCEPT_tb                   ((ACCEPT) * 2)
@@ -1207,7 +1218,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define ACCEPT_t8_pb                ((ACCEPT) * 4 + 2)
 #define ACCEPT_t8_p8                ((ACCEPT) * 4 + 3)

-/* 0x66 : 102
+/* 0x67 : 103
    VERB - Used only for the type field of verbs */
 #define VERB                        (ACCEPT + 1)
 #define VERB_tb                     ((VERB) * 2)
@@ -1217,7 +1228,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define VERB_t8_pb                  ((VERB) * 4 + 2)
 #define VERB_t8_p8                  ((VERB) * 4 + 3)

-/* 0x67 : 103
+/* 0x68 : 104
    PRUNE - Pattern fails at this startpoint if no-backtracking through this */
 #define PRUNE                       (VERB + 1)
 #define PRUNE_tb                    ((PRUNE) * 2)
@@ -1227,7 +1238,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define PRUNE_t8_pb                 ((PRUNE) * 4 + 2)
 #define PRUNE_t8_p8                 ((PRUNE) * 4 + 3)

-/* 0x68 : 104
+/* 0x69 : 105
    MARKPOINT - Push the current location for rollback by cut. */
 #define MARKPOINT                   (PRUNE + 1)
 #define MARKPOINT_tb                ((MARKPOINT) * 2)
@@ -1237,7 +1248,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define MARKPOINT_t8_pb             ((MARKPOINT) * 4 + 2)
 #define MARKPOINT_t8_p8             ((MARKPOINT) * 4 + 3)

-/* 0x69 : 105
+/* 0x6a : 106
    SKIP - On failure skip forward (to the mark) before retrying */
 #define SKIP                        (MARKPOINT + 1)
 #define SKIP_tb                     ((SKIP) * 2)
@@ -1247,7 +1258,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define SKIP_t8_pb                  ((SKIP) * 4 + 2)
 #define SKIP_t8_p8                  ((SKIP) * 4 + 3)

-/* 0x6a : 106
+/* 0x6b : 107
    COMMIT - Pattern fails outright if backtracking through this */
 #define COMMIT                      (SKIP + 1)
 #define COMMIT_tb                   ((COMMIT) * 2)
@@ -1257,7 +1268,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define COMMIT_t8_pb                ((COMMIT) * 4 + 2)
 #define COMMIT_t8_p8                ((COMMIT) * 4 + 3)

-/* 0x6b : 107
+/* 0x6c : 108
    CUTGROUP - On failure go to the next alternation in the group */
 #define CUTGROUP                    (COMMIT + 1)
 #define CUTGROUP_tb                 ((CUTGROUP) * 2)
@@ -1267,7 +1278,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define CUTGROUP_t8_pb              ((CUTGROUP) * 4 + 2)
 #define CUTGROUP_t8_p8              ((CUTGROUP) * 4 + 3)

-/* 0x6c : 108
+/* 0x6d : 109
    KEEPS - $& begins here. */
 #define KEEPS                       (CUTGROUP + 1)
 #define KEEPS_tb                    ((KEEPS) * 2)
@@ -1277,7 +1288,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define KEEPS_t8_pb                 ((KEEPS) * 4 + 2)
 #define KEEPS_t8_p8                 ((KEEPS) * 4 + 3)

-/* 0x6d : 109
+/* 0x6e : 110
    PSEUDO - Pseudo opcode for internal use. */
 #define PSEUDO                      (KEEPS + 1)
 #define PSEUDO_tb                   ((PSEUDO) * 2)
@@ -1287,7 +1298,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define PSEUDO_t8_pb                ((PSEUDO) * 4 + 2)
 #define PSEUDO_t8_p8                ((PSEUDO) * 4 + 3)

-/* 0x6e : 110
+/* 0x6f : 111
    REGEX_SET - Regex set, temporary node used in pre-optimization compilation */
 #define REGEX_SET                   (PSEUDO + 1)
 #define REGEX_SET_tb                ((REGEX_SET) * 2)
@@ -1298,7 +1309,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define REGEX_SET_t8_p8             ((REGEX_SET) * 4 + 3)

 	/* ------------ States ------------- */
-/* 0x6f : 111
+/* 0x70 : 112
    TRIE_next - state for TRIE */
 #define TRIE_next                   (REGNODE_MAX + 1)
 #define TRIE_next_tb                ((TRIE_next) * 2)
@@ -1308,7 +1319,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define TRIE_next_t8_pb             ((TRIE_next) * 4 + 2)
 #define TRIE_next_t8_p8             ((TRIE_next) * 4 + 3)

-/* 0x70 : 112
+/* 0x71 : 113
    TRIE_next_fail - state for TRIE */
 #define TRIE_next_fail              (TRIE_next + 1)
 #define TRIE_next_fail_tb           ((TRIE_next_fail) * 2)
@@ -1318,7 +1329,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define TRIE_next_fail_t8_pb        ((TRIE_next_fail) * 4 + 2)
 #define TRIE_next_fail_t8_p8        ((TRIE_next_fail) * 4 + 3)

-/* 0x71 : 113
+/* 0x72 : 114
    EVAL_B - state for EVAL */
 #define EVAL_B                      (TRIE_next_fail + 1)
 #define EVAL_B_tb                   ((EVAL_B) * 2)
@@ -1328,7 +1339,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define EVAL_B_t8_pb                ((EVAL_B) * 4 + 2)
 #define EVAL_B_t8_p8                ((EVAL_B) * 4 + 3)

-/* 0x72 : 114
+/* 0x73 : 115
    EVAL_B_fail - state for EVAL */
 #define EVAL_B_fail                 (EVAL_B + 1)
 #define EVAL_B_fail_tb              ((EVAL_B_fail) * 2)
@@ -1338,7 +1349,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define EVAL_B_fail_t8_pb           ((EVAL_B_fail) * 4 + 2)
 #define EVAL_B_fail_t8_p8           ((EVAL_B_fail) * 4 + 3)

-/* 0x73 : 115
+/* 0x74 : 116
    EVAL_postponed_A - state for EVAL */
 #define EVAL_postponed_A            (EVAL_B_fail + 1)
 #define EVAL_postponed_A_tb         ((EVAL_postponed_A) * 2)
@@ -1348,7 +1359,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define EVAL_postponed_A_t8_pb      ((EVAL_postponed_A) * 4 + 2)
 #define EVAL_postponed_A_t8_p8      ((EVAL_postponed_A) * 4 + 3)

-/* 0x74 : 116
+/* 0x75 : 117
    EVAL_postponed_A_fail - state for EVAL */
 #define EVAL_postponed_A_fail       (EVAL_postponed_A + 1)
 #define EVAL_postponed_A_fail_tb    ((EVAL_postponed_A_fail) * 2)
@@ -1358,7 +1369,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define EVAL_postponed_A_fail_t8_pb ((EVAL_postponed_A_fail) * 4 + 2)
 #define EVAL_postponed_A_fail_t8_p8 ((EVAL_postponed_A_fail) * 4 + 3)

-/* 0x75 : 117
+/* 0x76 : 118
    EVAL_postponed_B - state for EVAL */
 #define EVAL_postponed_B            (EVAL_postponed_A_fail + 1)
 #define EVAL_postponed_B_tb         ((EVAL_postponed_B) * 2)
@@ -1368,7 +1379,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define EVAL_postponed_B_t8_pb      ((EVAL_postponed_B) * 4 + 2)
 #define EVAL_postponed_B_t8_p8      ((EVAL_postponed_B) * 4 + 3)

-/* 0x76 : 118
+/* 0x77 : 119
    EVAL_postponed_B_fail - state for EVAL */
 #define EVAL_postponed_B_fail       (EVAL_postponed_B + 1)
 #define EVAL_postponed_B_fail_tb    ((EVAL_postponed_B_fail) * 2)
@@ -1378,7 +1389,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define EVAL_postponed_B_fail_t8_pb ((EVAL_postponed_B_fail) * 4 + 2)
 #define EVAL_postponed_B_fail_t8_p8 ((EVAL_postponed_B_fail) * 4 + 3)

-/* 0x77 : 119
+/* 0x78 : 120
    CURLYX_end - state for CURLYX */
 #define CURLYX_end                  (EVAL_postponed_B_fail + 1)
 #define CURLYX_end_tb               ((CURLYX_end) * 2)
@@ -1388,7 +1399,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define CURLYX_end_t8_pb            ((CURLYX_end) * 4 + 2)
 #define CURLYX_end_t8_p8            ((CURLYX_end) * 4 + 3)

-/* 0x78 : 120
+/* 0x79 : 121
    CURLYX_end_fail - state for CURLYX */
 #define CURLYX_end_fail             (CURLYX_end + 1)
 #define CURLYX_end_fail_tb          ((CURLYX_end_fail) * 2)
@@ -1398,7 +1409,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define CURLYX_end_fail_t8_pb       ((CURLYX_end_fail) * 4 + 2)
 #define CURLYX_end_fail_t8_p8       ((CURLYX_end_fail) * 4 + 3)

-/* 0x79 : 121
+/* 0x7a : 122
    WHILEM_A_pre - state for WHILEM */
 #define WHILEM_A_pre                (CURLYX_end_fail + 1)
 #define WHILEM_A_pre_tb             ((WHILEM_A_pre) * 2)
@@ -1408,7 +1419,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define WHILEM_A_pre_t8_pb          ((WHILEM_A_pre) * 4 + 2)
 #define WHILEM_A_pre_t8_p8          ((WHILEM_A_pre) * 4 + 3)

-/* 0x7a : 122
+/* 0x7b : 123
    WHILEM_A_pre_fail - state for WHILEM */
 #define WHILEM_A_pre_fail           (WHILEM_A_pre + 1)
 #define WHILEM_A_pre_fail_tb        ((WHILEM_A_pre_fail) * 2)
@@ -1418,7 +1429,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define WHILEM_A_pre_fail_t8_pb     ((WHILEM_A_pre_fail) * 4 + 2)
 #define WHILEM_A_pre_fail_t8_p8     ((WHILEM_A_pre_fail) * 4 + 3)

-/* 0x7b : 123
+/* 0x7c : 124
    WHILEM_A_min - state for WHILEM */
 #define WHILEM_A_min                (WHILEM_A_pre_fail + 1)
 #define WHILEM_A_min_tb             ((WHILEM_A_min) * 2)
@@ -1428,7 +1439,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define WHILEM_A_min_t8_pb          ((WHILEM_A_min) * 4 + 2)
 #define WHILEM_A_min_t8_p8          ((WHILEM_A_min) * 4 + 3)

-/* 0x7c : 124
+/* 0x7d : 125
    WHILEM_A_min_fail - state for WHILEM */
 #define WHILEM_A_min_fail           (WHILEM_A_min + 1)
 #define WHILEM_A_min_fail_tb        ((WHILEM_A_min_fail) * 2)
@@ -1438,7 +1449,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define WHILEM_A_min_fail_t8_pb     ((WHILEM_A_min_fail) * 4 + 2)
 #define WHILEM_A_min_fail_t8_p8     ((WHILEM_A_min_fail) * 4 + 3)

-/* 0x7d : 125
+/* 0x7e : 126
    WHILEM_A_max - state for WHILEM */
 #define WHILEM_A_max                (WHILEM_A_min_fail + 1)
 #define WHILEM_A_max_tb             ((WHILEM_A_max) * 2)
@@ -1448,7 +1459,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define WHILEM_A_max_t8_pb          ((WHILEM_A_max) * 4 + 2)
 #define WHILEM_A_max_t8_p8          ((WHILEM_A_max) * 4 + 3)

-/* 0x7e : 126
+/* 0x7f : 127
    WHILEM_A_max_fail - state for WHILEM */
 #define WHILEM_A_max_fail           (WHILEM_A_max + 1)
 #define WHILEM_A_max_fail_tb        ((WHILEM_A_max_fail) * 2)
@@ -1458,7 +1469,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define WHILEM_A_max_fail_t8_pb     ((WHILEM_A_max_fail) * 4 + 2)
 #define WHILEM_A_max_fail_t8_p8     ((WHILEM_A_max_fail) * 4 + 3)

-/* 0x7f : 127
+/* 0x80 : 128
    WHILEM_B_min - state for WHILEM */
 #define WHILEM_B_min                (WHILEM_A_max_fail + 1)
 #define WHILEM_B_min_tb             ((WHILEM_B_min) * 2)
@@ -1468,7 +1479,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define WHILEM_B_min_t8_pb          ((WHILEM_B_min) * 4 + 2)
 #define WHILEM_B_min_t8_p8          ((WHILEM_B_min) * 4 + 3)

-/* 0x80 : 128
+/* 0x81 : 129
    WHILEM_B_min_fail - state for WHILEM */
 #define WHILEM_B_min_fail           (WHILEM_B_min + 1)
 #define WHILEM_B_min_fail_tb        ((WHILEM_B_min_fail) * 2)
@@ -1478,7 +1489,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define WHILEM_B_min_fail_t8_pb     ((WHILEM_B_min_fail) * 4 + 2)
 #define WHILEM_B_min_fail_t8_p8     ((WHILEM_B_min_fail) * 4 + 3)

-/* 0x81 : 129
+/* 0x82 : 130
    WHILEM_B_max - state for WHILEM */
 #define WHILEM_B_max                (WHILEM_B_min_fail + 1)
 #define WHILEM_B_max_tb             ((WHILEM_B_max) * 2)
@@ -1488,7 +1499,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define WHILEM_B_max_t8_pb          ((WHILEM_B_max) * 4 + 2)
 #define WHILEM_B_max_t8_p8          ((WHILEM_B_max) * 4 + 3)

-/* 0x82 : 130
+/* 0x83 : 131
    WHILEM_B_max_fail - state for WHILEM */
 #define WHILEM_B_max_fail           (WHILEM_B_max + 1)
 #define WHILEM_B_max_fail_tb        ((WHILEM_B_max_fail) * 2)
@@ -1498,7 +1509,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define WHILEM_B_max_fail_t8_pb     ((WHILEM_B_max_fail) * 4 + 2)
 #define WHILEM_B_max_fail_t8_p8     ((WHILEM_B_max_fail) * 4 + 3)

-/* 0x83 : 131
+/* 0x84 : 132
    BRANCH_next - state for BRANCH */
 #define BRANCH_next                 (WHILEM_B_max_fail + 1)
 #define BRANCH_next_tb              ((BRANCH_next) * 2)
@@ -1508,7 +1519,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define BRANCH_next_t8_pb           ((BRANCH_next) * 4 + 2)
 #define BRANCH_next_t8_p8           ((BRANCH_next) * 4 + 3)

-/* 0x84 : 132
+/* 0x85 : 133
    BRANCH_next_fail - state for BRANCH */
 #define BRANCH_next_fail            (BRANCH_next + 1)
 #define BRANCH_next_fail_tb         ((BRANCH_next_fail) * 2)
@@ -1518,7 +1529,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define BRANCH_next_fail_t8_pb      ((BRANCH_next_fail) * 4 + 2)
 #define BRANCH_next_fail_t8_p8      ((BRANCH_next_fail) * 4 + 3)

-/* 0x85 : 133
+/* 0x86 : 134
    CURLYM_A - state for CURLYM */
 #define CURLYM_A                    (BRANCH_next_fail + 1)
 #define CURLYM_A_tb                 ((CURLYM_A) * 2)
@@ -1528,7 +1539,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define CURLYM_A_t8_pb              ((CURLYM_A) * 4 + 2)
 #define CURLYM_A_t8_p8              ((CURLYM_A) * 4 + 3)

-/* 0x86 : 134
+/* 0x87 : 135
    CURLYM_A_fail - state for CURLYM */
 #define CURLYM_A_fail               (CURLYM_A + 1)
 #define CURLYM_A_fail_tb            ((CURLYM_A_fail) * 2)
@@ -1538,7 +1549,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define CURLYM_A_fail_t8_pb         ((CURLYM_A_fail) * 4 + 2)
 #define CURLYM_A_fail_t8_p8         ((CURLYM_A_fail) * 4 + 3)

-/* 0x87 : 135
+/* 0x88 : 136
    CURLYM_B - state for CURLYM */
 #define CURLYM_B                    (CURLYM_A_fail + 1)
 #define CURLYM_B_tb                 ((CURLYM_B) * 2)
@@ -1548,7 +1559,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define CURLYM_B_t8_pb              ((CURLYM_B) * 4 + 2)
 #define CURLYM_B_t8_p8              ((CURLYM_B) * 4 + 3)

-/* 0x88 : 136
+/* 0x89 : 137
    CURLYM_B_fail - state for CURLYM */
 #define CURLYM_B_fail               (CURLYM_B + 1)
 #define CURLYM_B_fail_tb            ((CURLYM_B_fail) * 2)
@@ -1558,7 +1569,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define CURLYM_B_fail_t8_pb         ((CURLYM_B_fail) * 4 + 2)
 #define CURLYM_B_fail_t8_p8         ((CURLYM_B_fail) * 4 + 3)

-/* 0x89 : 137
+/* 0x8a : 138
    IFMATCH_A - state for IFMATCH */
 #define IFMATCH_A                   (CURLYM_B_fail + 1)
 #define IFMATCH_A_tb                ((IFMATCH_A) * 2)
@@ -1568,7 +1579,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define IFMATCH_A_t8_pb             ((IFMATCH_A) * 4 + 2)
 #define IFMATCH_A_t8_p8             ((IFMATCH_A) * 4 + 3)

-/* 0x8a : 138
+/* 0x8b : 139
    IFMATCH_A_fail - state for IFMATCH */
 #define IFMATCH_A_fail              (IFMATCH_A + 1)
 #define IFMATCH_A_fail_tb           ((IFMATCH_A_fail) * 2)
@@ -1578,7 +1589,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define IFMATCH_A_fail_t8_pb        ((IFMATCH_A_fail) * 4 + 2)
 #define IFMATCH_A_fail_t8_p8        ((IFMATCH_A_fail) * 4 + 3)

-/* 0x8b : 139
+/* 0x8c : 140
    CURLY_B_min - state for CURLY */
 #define CURLY_B_min                 (IFMATCH_A_fail + 1)
 #define CURLY_B_min_tb              ((CURLY_B_min) * 2)
@@ -1588,7 +1599,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define CURLY_B_min_t8_pb           ((CURLY_B_min) * 4 + 2)
 #define CURLY_B_min_t8_p8           ((CURLY_B_min) * 4 + 3)

-/* 0x8c : 140
+/* 0x8d : 141
    CURLY_B_min_fail - state for CURLY */
 #define CURLY_B_min_fail            (CURLY_B_min + 1)
 #define CURLY_B_min_fail_tb         ((CURLY_B_min_fail) * 2)
@@ -1598,7 +1609,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define CURLY_B_min_fail_t8_pb      ((CURLY_B_min_fail) * 4 + 2)
 #define CURLY_B_min_fail_t8_p8      ((CURLY_B_min_fail) * 4 + 3)

-/* 0x8d : 141
+/* 0x8e : 142
    CURLY_B_max - state for CURLY */
 #define CURLY_B_max                 (CURLY_B_min_fail + 1)
 #define CURLY_B_max_tb              ((CURLY_B_max) * 2)
@@ -1608,7 +1619,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define CURLY_B_max_t8_pb           ((CURLY_B_max) * 4 + 2)
 #define CURLY_B_max_t8_p8           ((CURLY_B_max) * 4 + 3)

-/* 0x8e : 142
+/* 0x8f : 143
    CURLY_B_max_fail - state for CURLY */
 #define CURLY_B_max_fail            (CURLY_B_max + 1)
 #define CURLY_B_max_fail_tb         ((CURLY_B_max_fail) * 2)
@@ -1618,7 +1629,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define CURLY_B_max_fail_t8_pb      ((CURLY_B_max_fail) * 4 + 2)
 #define CURLY_B_max_fail_t8_p8      ((CURLY_B_max_fail) * 4 + 3)

-/* 0x8f : 143
+/* 0x90 : 144
    COMMIT_next - state for COMMIT */
 #define COMMIT_next                 (CURLY_B_max_fail + 1)
 #define COMMIT_next_tb              ((COMMIT_next) * 2)
@@ -1628,7 +1639,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define COMMIT_next_t8_pb           ((COMMIT_next) * 4 + 2)
 #define COMMIT_next_t8_p8           ((COMMIT_next) * 4 + 3)

-/* 0x90 : 144
+/* 0x91 : 145
    COMMIT_next_fail - state for COMMIT */
 #define COMMIT_next_fail            (COMMIT_next + 1)
 #define COMMIT_next_fail_tb         ((COMMIT_next_fail) * 2)
@@ -1638,7 +1649,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define COMMIT_next_fail_t8_pb      ((COMMIT_next_fail) * 4 + 2)
 #define COMMIT_next_fail_t8_p8      ((COMMIT_next_fail) * 4 + 3)

-/* 0x91 : 145
+/* 0x92 : 146
    MARKPOINT_next - state for MARKPOINT */
 #define MARKPOINT_next              (COMMIT_next_fail + 1)
 #define MARKPOINT_next_tb           ((MARKPOINT_next) * 2)
@@ -1648,7 +1659,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define MARKPOINT_next_t8_pb        ((MARKPOINT_next) * 4 + 2)
 #define MARKPOINT_next_t8_p8        ((MARKPOINT_next) * 4 + 3)

-/* 0x92 : 146
+/* 0x93 : 147
    MARKPOINT_next_fail - state for MARKPOINT */
 #define MARKPOINT_next_fail         (MARKPOINT_next + 1)
 #define MARKPOINT_next_fail_tb      ((MARKPOINT_next_fail) * 2)
@@ -1658,7 +1669,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define MARKPOINT_next_fail_t8_pb   ((MARKPOINT_next_fail) * 4 + 2)
 #define MARKPOINT_next_fail_t8_p8   ((MARKPOINT_next_fail) * 4 + 3)

-/* 0x93 : 147
+/* 0x94 : 148
    SKIP_next - state for SKIP */
 #define SKIP_next                   (MARKPOINT_next_fail + 1)
 #define SKIP_next_tb                ((SKIP_next) * 2)
@@ -1668,7 +1679,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define SKIP_next_t8_pb             ((SKIP_next) * 4 + 2)
 #define SKIP_next_t8_p8             ((SKIP_next) * 4 + 3)

-/* 0x94 : 148
+/* 0x95 : 149
    SKIP_next_fail - state for SKIP */
 #define SKIP_next_fail              (SKIP_next + 1)
 #define SKIP_next_fail_tb           ((SKIP_next_fail) * 2)
@@ -1678,7 +1689,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define SKIP_next_fail_t8_pb        ((SKIP_next_fail) * 4 + 2)
 #define SKIP_next_fail_t8_p8        ((SKIP_next_fail) * 4 + 3)

-/* 0x95 : 149
+/* 0x96 : 150
    CUTGROUP_next - state for CUTGROUP */
 #define CUTGROUP_next               (SKIP_next_fail + 1)
 #define CUTGROUP_next_tb            ((CUTGROUP_next) * 2)
@@ -1688,7 +1699,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define CUTGROUP_next_t8_pb         ((CUTGROUP_next) * 4 + 2)
 #define CUTGROUP_next_t8_p8         ((CUTGROUP_next) * 4 + 3)

-/* 0x96 : 150
+/* 0x97 : 151
    CUTGROUP_next_fail - state for CUTGROUP */
 #define CUTGROUP_next_fail          (CUTGROUP_next + 1)
 #define CUTGROUP_next_fail_tb       ((CUTGROUP_next_fail) * 2)
@@ -1698,7 +1709,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define CUTGROUP_next_fail_t8_pb    ((CUTGROUP_next_fail) * 4 + 2)
 #define CUTGROUP_next_fail_t8_p8    ((CUTGROUP_next_fail) * 4 + 3)

-/* 0x97 : 151
+/* 0x98 : 152
    KEEPS_next - state for KEEPS */
 #define KEEPS_next                  (CUTGROUP_next_fail + 1)
 #define KEEPS_next_tb               ((KEEPS_next) * 2)
@@ -1708,7 +1719,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define KEEPS_next_t8_pb            ((KEEPS_next) * 4 + 2)
 #define KEEPS_next_t8_p8            ((KEEPS_next) * 4 + 3)

-/* 0x98 : 152
+/* 0x99 : 153
    KEEPS_next_fail - state for KEEPS */
 #define KEEPS_next_fail             (KEEPS_next + 1)
 #define KEEPS_next_fail_tb          ((KEEPS_next_fail) * 2)
@@ -1718,7 +1729,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define KEEPS_next_fail_t8_pb       ((KEEPS_next_fail) * 4 + 2)
 #define KEEPS_next_fail_t8_p8       ((KEEPS_next_fail) * 4 + 3)

-/* 0x99 : 153
+/* 0x9a : 154
    REF_next - state for REF */
 #define REF_next                    (KEEPS_next_fail + 1)
 #define REF_next_tb                 ((REF_next) * 2)
@@ -1728,7 +1739,7 @@ typedef struct regnode                           tregnode_WHILEM;
 #define REF_next_t8_pb              ((REF_next) * 4 + 2)
 #define REF_next_t8_p8              ((REF_next) * 4 + 3)

-/* 0x9a : 154
+/* 0x9b : 155
    REF_next_fail - state for REF */
 #define REF_next_fail               (REF_next + 1)
 #define REF_next_fail_tb            ((REF_next_fail) * 2)
@@ -1774,85 +1785,86 @@ EXTCONST char * const PL_regnode_name[]  INIT( {
 	"ANYOFHbbm",             	/* 0x1d */
 	"ANYOFM",                	/* 0x1e */
 	"NANYOFM",               	/* 0x1f */
-	"POSIXD",                	/* 0x20 */
-	"POSIXL",                	/* 0x21 */
-	"POSIXU",                	/* 0x22 */
-	"POSIXA",                	/* 0x23 */
-	"NPOSIXD",               	/* 0x24 */
-	"NPOSIXL",               	/* 0x25 */
-	"NPOSIXU",               	/* 0x26 */
-	"NPOSIXA",               	/* 0x27 */
-	"CLUMP",                 	/* 0x28 */
-	"BRANCH",                	/* 0x29 */
-	"EXACT",                 	/* 0x2a */
-	"LEXACT",                	/* 0x2b */
-	"EXACTL",                	/* 0x2c */
-	"EXACTF",                	/* 0x2d */
-	"EXACTFL",               	/* 0x2e */
-	"EXACTFU",               	/* 0x2f */
-	"EXACTFAA",              	/* 0x30 */
-	"EXACTFAA_NO_TRIE",      	/* 0x31 */
-	"EXACTFUP",              	/* 0x32 */
-	"EXACTFLU8",             	/* 0x33 */
-	"EXACT_REQ8",            	/* 0x34 */
-	"LEXACT_REQ8",           	/* 0x35 */
-	"EXACTFU_REQ8",          	/* 0x36 */
-	"EXACTFU_S_EDGE",        	/* 0x37 */
-	"LNBREAK",               	/* 0x38 */
-	"TRIE",                  	/* 0x39 */
-	"AHOCORASICK",           	/* 0x3a */
-	"LTRIE",                 	/* 0x3b */
-	"NOTHING",               	/* 0x3c */
-	"TAIL",                  	/* 0x3d */
-	"OPTIMIZED",             	/* 0x3e */
-	"STAR",                  	/* 0x3f */
-	"PLUS",                  	/* 0x40 */
-	"CURLY",                 	/* 0x41 */
-	"CURLYN",                	/* 0x42 */
-	"CURLYM",                	/* 0x43 */
-	"CURLYX",                	/* 0x44 */
-	"WHILEM",                	/* 0x45 */
-	"OPEN",                  	/* 0x46 */
-	"CLOSE",                 	/* 0x47 */
-	"SROPEN",                	/* 0x48 */
-	"SRCLOSE",               	/* 0x49 */
-	"REF",                   	/* 0x4a */
-	"REFF",                  	/* 0x4b */
-	"REFFL",                 	/* 0x4c */
-	"REFFU",                 	/* 0x4d */
-	"REFFA",                 	/* 0x4e */
-	"REFN",                  	/* 0x4f */
-	"REFFN",                 	/* 0x50 */
-	"REFFLN",                	/* 0x51 */
-	"REFFUN",                	/* 0x52 */
-	"REFFAN",                	/* 0x53 */
-	"BRANCHJ",               	/* 0x54 */
-	"IFMATCH",               	/* 0x55 */
-	"UNLESSM",               	/* 0x56 */
-	"SUSPEND",               	/* 0x57 */
-	"IFTHEN",                	/* 0x58 */
-	"RENUM",                 	/* 0x59 */
-	"LONGJMP",               	/* 0x5a */
-	"MINMOD",                	/* 0x5b */
-	"LOGICAL",               	/* 0x5c */
-	"EVAL",                  	/* 0x5d */
-	"GOSUB",                 	/* 0x5e */
-	"GROUPP",                	/* 0x5f */
-	"GROUPPN",               	/* 0x60 */
-	"INSUBP",                	/* 0x61 */
-	"DEFINEP",               	/* 0x62 */
-	"ENDLIKE",               	/* 0x63 */
-	"OPFAIL",                	/* 0x64 */
-	"ACCEPT",                	/* 0x65 */
-	"VERB",                  	/* 0x66 */
-	"PRUNE",                 	/* 0x67 */
-	"MARKPOINT",             	/* 0x68 */
-	"SKIP",                  	/* 0x69 */
-	"COMMIT",                	/* 0x6a */
-	"CUTGROUP",              	/* 0x6b */
-	"KEEPS",                 	/* 0x6c */
-	"PSEUDO",                	/* 0x6d */
-	"REGEX_SET",             	/* 0x6e */
+	"NEXACTb",               	/* 0x20 */
+	"POSIXD",                	/* 0x21 */
+	"POSIXL",                	/* 0x22 */
+	"POSIXU",                	/* 0x23 */
+	"POSIXA",                	/* 0x24 */
+	"NPOSIXD",               	/* 0x25 */
+	"NPOSIXL",               	/* 0x26 */
+	"NPOSIXU",               	/* 0x27 */
+	"NPOSIXA",               	/* 0x28 */
+	"CLUMP",                 	/* 0x29 */
+	"BRANCH",                	/* 0x2a */
+	"EXACT",                 	/* 0x2b */
+	"LEXACT",                	/* 0x2c */
+	"EXACTL",                	/* 0x2d */
+	"EXACTF",                	/* 0x2e */
+	"EXACTFL",               	/* 0x2f */
+	"EXACTFU",               	/* 0x30 */
+	"EXACTFAA",              	/* 0x31 */
+	"EXACTFAA_NO_TRIE",      	/* 0x32 */
+	"EXACTFUP",              	/* 0x33 */
+	"EXACTFLU8",             	/* 0x34 */
+	"EXACT_REQ8",            	/* 0x35 */
+	"LEXACT_REQ8",           	/* 0x36 */
+	"EXACTFU_REQ8",          	/* 0x37 */
+	"EXACTFU_S_EDGE",        	/* 0x38 */
+	"LNBREAK",               	/* 0x39 */
+	"TRIE",                  	/* 0x3a */
+	"AHOCORASICK",           	/* 0x3b */
+	"LTRIE",                 	/* 0x3c */
+	"NOTHING",               	/* 0x3d */
+	"TAIL",                  	/* 0x3e */
+	"OPTIMIZED",             	/* 0x3f */
+	"STAR",                  	/* 0x40 */
+	"PLUS",                  	/* 0x41 */
+	"CURLY",                 	/* 0x42 */
+	"CURLYN",                	/* 0x43 */
+	"CURLYM",                	/* 0x44 */
+	"CURLYX",                	/* 0x45 */
+	"WHILEM",                	/* 0x46 */
+	"OPEN",                  	/* 0x47 */
+	"CLOSE",                 	/* 0x48 */
+	"SROPEN",                	/* 0x49 */
+	"SRCLOSE",               	/* 0x4a */
+	"REF",                   	/* 0x4b */
+	"REFF",                  	/* 0x4c */
+	"REFFL",                 	/* 0x4d */
+	"REFFU",                 	/* 0x4e */
+	"REFFA",                 	/* 0x4f */
+	"REFN",                  	/* 0x50 */
+	"REFFN",                 	/* 0x51 */
+	"REFFLN",                	/* 0x52 */
+	"REFFUN",                	/* 0x53 */
+	"REFFAN",                	/* 0x54 */
+	"BRANCHJ",               	/* 0x55 */
+	"IFMATCH",               	/* 0x56 */
+	"UNLESSM",               	/* 0x57 */
+	"SUSPEND",               	/* 0x58 */
+	"IFTHEN",                	/* 0x59 */
+	"RENUM",                 	/* 0x5a */
+	"LONGJMP",               	/* 0x5b */
+	"MINMOD",                	/* 0x5c */
+	"LOGICAL",               	/* 0x5d */
+	"EVAL",                  	/* 0x5e */
+	"GOSUB",                 	/* 0x5f */
+	"GROUPP",                	/* 0x60 */
+	"GROUPPN",               	/* 0x61 */
+	"INSUBP",                	/* 0x62 */
+	"DEFINEP",               	/* 0x63 */
+	"ENDLIKE",               	/* 0x64 */
+	"OPFAIL",                	/* 0x65 */
+	"ACCEPT",                	/* 0x66 */
+	"VERB",                  	/* 0x67 */
+	"PRUNE",                 	/* 0x68 */
+	"MARKPOINT",             	/* 0x69 */
+	"SKIP",                  	/* 0x6a */
+	"COMMIT",                	/* 0x6b */
+	"CUTGROUP",              	/* 0x6c */
+	"KEEPS",                 	/* 0x6d */
+	"PSEUDO",                	/* 0x6e */
+	"REGEX_SET",             	/* 0x6f */
 	/* ------------ States ------------- */
 	"TRIE_next",             	/* REGNODE_MAX +0x01 */
 	"TRIE_next_fail",        	/* REGNODE_MAX +0x02 */
@@ -2129,861 +2141,868 @@ EXTCONST struct regnode_meta PL_regnode_info[]  INIT( {
         .off_by_arg = 0
     },
     {
-        /* #32 op POSIXD */
+        /* #32 op NEXACTb */
+        .type = NEXACTb,
+        .arg_len = EXTRA_SIZE(tregnode_NEXACTb),
+        .arg_len_varies = 0,
+        .off_by_arg = 0
+    },
+    {
+        /* #33 op POSIXD */
         .type = POSIXD,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #33 op POSIXL */
+        /* #34 op POSIXL */
         .type = POSIXD,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #34 op POSIXU */
+        /* #35 op POSIXU */
         .type = POSIXD,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #35 op POSIXA */
+        /* #36 op POSIXA */
         .type = POSIXD,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #36 op NPOSIXD */
+        /* #37 op NPOSIXD */
         .type = NPOSIXD,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #37 op NPOSIXL */
+        /* #38 op NPOSIXL */
         .type = NPOSIXD,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #38 op NPOSIXU */
+        /* #39 op NPOSIXU */
         .type = NPOSIXD,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #39 op NPOSIXA */
+        /* #40 op NPOSIXA */
         .type = NPOSIXD,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #40 op CLUMP */
+        /* #41 op CLUMP */
         .type = CLUMP,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #41 op BRANCH */
+        /* #42 op BRANCH */
         .type = BRANCH,
         .arg_len = EXTRA_SIZE(tregnode_BRANCH),
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #42 op EXACT */
+        /* #43 op EXACT */
         .type = EXACT,
         .arg_len = 0,
         .arg_len_varies = 1,
         .off_by_arg = 0
     },
     {
-        /* #43 op LEXACT */
+        /* #44 op LEXACT */
         .type = EXACT,
         .arg_len = EXTRA_SIZE(tregnode_LEXACT),
         .arg_len_varies = 1,
         .off_by_arg = 0
     },
     {
-        /* #44 op EXACTL */
+        /* #45 op EXACTL */
         .type = EXACT,
         .arg_len = 0,
         .arg_len_varies = 1,
         .off_by_arg = 0
     },
     {
-        /* #45 op EXACTF */
+        /* #46 op EXACTF */
         .type = EXACT,
         .arg_len = 0,
         .arg_len_varies = 1,
         .off_by_arg = 0
     },
     {
-        /* #46 op EXACTFL */
+        /* #47 op EXACTFL */
         .type = EXACT,
         .arg_len = 0,
         .arg_len_varies = 1,
         .off_by_arg = 0
     },
     {
-        /* #47 op EXACTFU */
+        /* #48 op EXACTFU */
         .type = EXACT,
         .arg_len = 0,
         .arg_len_varies = 1,
         .off_by_arg = 0
     },
     {
-        /* #48 op EXACTFAA */
+        /* #49 op EXACTFAA */
         .type = EXACT,
         .arg_len = 0,
         .arg_len_varies = 1,
         .off_by_arg = 0
     },
     {
-        /* #49 op EXACTFAA_NO_TRIE */
+        /* #50 op EXACTFAA_NO_TRIE */
         .type = EXACT,
         .arg_len = 0,
         .arg_len_varies = 1,
         .off_by_arg = 0
     },
     {
-        /* #50 op EXACTFUP */
+        /* #51 op EXACTFUP */
         .type = EXACT,
         .arg_len = 0,
         .arg_len_varies = 1,
         .off_by_arg = 0
     },
     {
-        /* #51 op EXACTFLU8 */
+        /* #52 op EXACTFLU8 */
         .type = EXACT,
         .arg_len = 0,
         .arg_len_varies = 1,
         .off_by_arg = 0
     },
     {
-        /* #52 op EXACT_REQ8 */
+        /* #53 op EXACT_REQ8 */
         .type = EXACT,
         .arg_len = 0,
         .arg_len_varies = 1,
         .off_by_arg = 0
     },
     {
-        /* #53 op LEXACT_REQ8 */
+        /* #54 op LEXACT_REQ8 */
         .type = EXACT,
         .arg_len = EXTRA_SIZE(tregnode_LEXACT_REQ8),
         .arg_len_varies = 1,
         .off_by_arg = 0
     },
     {
-        /* #54 op EXACTFU_REQ8 */
+        /* #55 op EXACTFU_REQ8 */
         .type = EXACT,
         .arg_len = 0,
         .arg_len_varies = 1,
         .off_by_arg = 0
     },
     {
-        /* #55 op EXACTFU_S_EDGE */
+        /* #56 op EXACTFU_S_EDGE */
         .type = EXACT,
         .arg_len = 0,
         .arg_len_varies = 1,
         .off_by_arg = 0
     },
     {
-        /* #56 op LNBREAK */
+        /* #57 op LNBREAK */
         .type = LNBREAK,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #57 op TRIE */
+        /* #58 op TRIE */
         .type = TRIE,
         .arg_len = EXTRA_SIZE(tregnode_TRIE),
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #58 op AHOCORASICK */
+        /* #59 op AHOCORASICK */
         .type = TRIE,
         .arg_len = EXTRA_SIZE(tregnode_AHOCORASICK),
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #59 op LTRIE */
+        /* #60 op LTRIE */
         .type = TRIE,
         .arg_len = EXTRA_SIZE(tregnode_LTRIE),
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #60 op NOTHING */
+        /* #61 op NOTHING */
         .type = NOTHING,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #61 op TAIL */
+        /* #62 op TAIL */
         .type = NOTHING,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #62 op OPTIMIZED */
+        /* #63 op OPTIMIZED */
         .type = NOTHING,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #63 op STAR */
+        /* #64 op STAR */
         .type = STAR,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #64 op PLUS */
+        /* #65 op PLUS */
         .type = PLUS,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #65 op CURLY */
+        /* #66 op CURLY */
         .type = CURLY,
         .arg_len = EXTRA_SIZE(tregnode_CURLY),
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #66 op CURLYN */
+        /* #67 op CURLYN */
         .type = CURLY,
         .arg_len = EXTRA_SIZE(tregnode_CURLYN),
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #67 op CURLYM */
+        /* #68 op CURLYM */
         .type = CURLY,
         .arg_len = EXTRA_SIZE(tregnode_CURLYM),
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #68 op CURLYX */
+        /* #69 op CURLYX */
         .type = CURLY,
         .arg_len = EXTRA_SIZE(tregnode_CURLYX),
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #69 op WHILEM */
+        /* #70 op WHILEM */
         .type = WHILEM,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #70 op OPEN */
+        /* #71 op OPEN */
         .type = OPEN,
         .arg_len = EXTRA_SIZE(tregnode_OPEN),
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #71 op CLOSE */
+        /* #72 op CLOSE */
         .type = CLOSE,
         .arg_len = EXTRA_SIZE(tregnode_CLOSE),
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #72 op SROPEN */
+        /* #73 op SROPEN */
         .type = SROPEN,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #73 op SRCLOSE */
+        /* #74 op SRCLOSE */
         .type = SRCLOSE,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #74 op REF */
+        /* #75 op REF */
         .type = REF,
         .arg_len = EXTRA_SIZE(tregnode_REF),
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #75 op REFF */
+        /* #76 op REFF */
         .type = REF,
         .arg_len = EXTRA_SIZE(tregnode_REFF),
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #76 op REFFL */
+        /* #77 op REFFL */
         .type = REF,
         .arg_len = EXTRA_SIZE(tregnode_REFFL),
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #77 op REFFU */
+        /* #78 op REFFU */
         .type = REF,
         .arg_len = EXTRA_SIZE(tregnode_REFFU),
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #78 op REFFA */
+        /* #79 op REFFA */
         .type = REF,
         .arg_len = EXTRA_SIZE(tregnode_REFFA),
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #79 op REFN */
+        /* #80 op REFN */
         .type = REF,
         .arg_len = EXTRA_SIZE(tregnode_REFN),
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #80 op REFFN */
+        /* #81 op REFFN */
         .type = REF,
         .arg_len = EXTRA_SIZE(tregnode_REFFN),
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #81 op REFFLN */
+        /* #82 op REFFLN */
         .type = REF,
         .arg_len = EXTRA_SIZE(tregnode_REFFLN),
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #82 op REFFUN */
+        /* #83 op REFFUN */
         .type = REF,
         .arg_len = EXTRA_SIZE(tregnode_REFFUN),
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #83 op REFFAN */
+        /* #84 op REFFAN */
         .type = REF,
         .arg_len = EXTRA_SIZE(tregnode_REFFAN),
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #84 op BRANCHJ */
+        /* #85 op BRANCHJ */
         .type = BRANCHJ,
         .arg_len = EXTRA_SIZE(tregnode_BRANCHJ),
         .arg_len_varies = 0,
         .off_by_arg = 1
     },
     {
-        /* #85 op IFMATCH */
+        /* #86 op IFMATCH */
         .type = BRANCHJ,
         .arg_len = EXTRA_SIZE(tregnode_IFMATCH),
         .arg_len_varies = 0,
         .off_by_arg = 1
     },
     {
-        /* #86 op UNLESSM */
+        /* #87 op UNLESSM */
         .type = BRANCHJ,
         .arg_len = EXTRA_SIZE(tregnode_UNLESSM),
         .arg_len_varies = 0,
         .off_by_arg = 1
     },
     {
-        /* #87 op SUSPEND */
+        /* #88 op SUSPEND */
         .type = BRANCHJ,
         .arg_len = EXTRA_SIZE(tregnode_SUSPEND),
         .arg_len_varies = 0,
         .off_by_arg = 1
     },
     {
-        /* #88 op IFTHEN */
+        /* #89 op IFTHEN */
         .type = BRANCHJ,
         .arg_len = EXTRA_SIZE(tregnode_IFTHEN),
         .arg_len_varies = 0,
         .off_by_arg = 1
     },
     {
-        /* #89 op RENUM */
+        /* #90 op RENUM */
         .type = BRANCHJ,
         .arg_len = EXTRA_SIZE(tregnode_RENUM),
         .arg_len_varies = 0,
         .off_by_arg = 1
     },
     {
-        /* #90 op LONGJMP */
+        /* #91 op LONGJMP */
         .type = LONGJMP,
         .arg_len = EXTRA_SIZE(tregnode_LONGJMP),
         .arg_len_varies = 0,
         .off_by_arg = 1
     },
     {
-        /* #91 op MINMOD */
+        /* #92 op MINMOD */
         .type = MINMOD,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #92 op LOGICAL */
+        /* #93 op LOGICAL */
         .type = LOGICAL,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #93 op EVAL */
+        /* #94 op EVAL */
         .type = EVAL,
         .arg_len = EXTRA_SIZE(tregnode_EVAL),
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #94 op GOSUB */
+        /* #95 op GOSUB */
         .type = GOSUB,
         .arg_len = EXTRA_SIZE(tregnode_GOSUB),
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #95 op GROUPP */
+        /* #96 op GROUPP */
         .type = GROUPP,
         .arg_len = EXTRA_SIZE(tregnode_GROUPP),
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #96 op GROUPPN */
+        /* #97 op GROUPPN */
         .type = GROUPPN,
         .arg_len = EXTRA_SIZE(tregnode_GROUPPN),
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #97 op INSUBP */
+        /* #98 op INSUBP */
         .type = INSUBP,
         .arg_len = EXTRA_SIZE(tregnode_INSUBP),
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #98 op DEFINEP */
+        /* #99 op DEFINEP */
         .type = DEFINEP,
         .arg_len = EXTRA_SIZE(tregnode_DEFINEP),
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #99 op ENDLIKE */
+        /* #100 op ENDLIKE */
         .type = ENDLIKE,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #100 op OPFAIL */
+        /* #101 op OPFAIL */
         .type = ENDLIKE,
         .arg_len = EXTRA_SIZE(tregnode_OPFAIL),
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #101 op ACCEPT */
+        /* #102 op ACCEPT */
         .type = ENDLIKE,
         .arg_len = EXTRA_SIZE(tregnode_ACCEPT),
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #102 op VERB */
+        /* #103 op VERB */
         .type = VERB,
         .arg_len = EXTRA_SIZE(tregnode_VERB),
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #103 op PRUNE */
+        /* #104 op PRUNE */
         .type = VERB,
         .arg_len = EXTRA_SIZE(tregnode_PRUNE),
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #104 op MARKPOINT */
+        /* #105 op MARKPOINT */
         .type = VERB,
         .arg_len = EXTRA_SIZE(tregnode_MARKPOINT),
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #105 op SKIP */
+        /* #106 op SKIP */
         .type = VERB,
         .arg_len = EXTRA_SIZE(tregnode_SKIP),
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #106 op COMMIT */
+        /* #107 op COMMIT */
         .type = VERB,
         .arg_len = EXTRA_SIZE(tregnode_COMMIT),
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #107 op CUTGROUP */
+        /* #108 op CUTGROUP */
         .type = VERB,
         .arg_len = EXTRA_SIZE(tregnode_CUTGROUP),
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #108 op KEEPS */
+        /* #109 op KEEPS */
         .type = KEEPS,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #109 op PSEUDO */
+        /* #110 op PSEUDO */
         .type = PSEUDO,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #110 op REGEX_SET */
+        /* #111 op REGEX_SET */
         .type = REGEX_SET,
         .arg_len = EXTRA_SIZE(tregnode_REGEX_SET),
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #111 state TRIE_next */
+        /* #112 state TRIE_next */
         .type = TRIE,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #112 state TRIE_next_fail */
+        /* #113 state TRIE_next_fail */
         .type = TRIE,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #113 state EVAL_B */
+        /* #114 state EVAL_B */
         .type = EVAL,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #114 state EVAL_B_fail */
+        /* #115 state EVAL_B_fail */
         .type = EVAL,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #115 state EVAL_postponed_A */
+        /* #116 state EVAL_postponed_A */
         .type = EVAL,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #116 state EVAL_postponed_A_fail */
+        /* #117 state EVAL_postponed_A_fail */
         .type = EVAL,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #117 state EVAL_postponed_B */
+        /* #118 state EVAL_postponed_B */
         .type = EVAL,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #118 state EVAL_postponed_B_fail */
+        /* #119 state EVAL_postponed_B_fail */
         .type = EVAL,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #119 state CURLYX_end */
+        /* #120 state CURLYX_end */
         .type = CURLYX,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #120 state CURLYX_end_fail */
+        /* #121 state CURLYX_end_fail */
         .type = CURLYX,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #121 state WHILEM_A_pre */
+        /* #122 state WHILEM_A_pre */
         .type = WHILEM,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #122 state WHILEM_A_pre_fail */
+        /* #123 state WHILEM_A_pre_fail */
         .type = WHILEM,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #123 state WHILEM_A_min */
+        /* #124 state WHILEM_A_min */
         .type = WHILEM,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #124 state WHILEM_A_min_fail */
+        /* #125 state WHILEM_A_min_fail */
         .type = WHILEM,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #125 state WHILEM_A_max */
+        /* #126 state WHILEM_A_max */
         .type = WHILEM,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #126 state WHILEM_A_max_fail */
+        /* #127 state WHILEM_A_max_fail */
         .type = WHILEM,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #127 state WHILEM_B_min */
+        /* #128 state WHILEM_B_min */
         .type = WHILEM,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #128 state WHILEM_B_min_fail */
+        /* #129 state WHILEM_B_min_fail */
         .type = WHILEM,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #129 state WHILEM_B_max */
+        /* #130 state WHILEM_B_max */
         .type = WHILEM,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #130 state WHILEM_B_max_fail */
+        /* #131 state WHILEM_B_max_fail */
         .type = WHILEM,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #131 state BRANCH_next */
+        /* #132 state BRANCH_next */
         .type = BRANCH,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #132 state BRANCH_next_fail */
+        /* #133 state BRANCH_next_fail */
         .type = BRANCH,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #133 state CURLYM_A */
+        /* #134 state CURLYM_A */
         .type = CURLYM,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #134 state CURLYM_A_fail */
+        /* #135 state CURLYM_A_fail */
         .type = CURLYM,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #135 state CURLYM_B */
+        /* #136 state CURLYM_B */
         .type = CURLYM,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #136 state CURLYM_B_fail */
+        /* #137 state CURLYM_B_fail */
         .type = CURLYM,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #137 state IFMATCH_A */
+        /* #138 state IFMATCH_A */
         .type = IFMATCH,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #138 state IFMATCH_A_fail */
+        /* #139 state IFMATCH_A_fail */
         .type = IFMATCH,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #139 state CURLY_B_min */
+        /* #140 state CURLY_B_min */
         .type = CURLY,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #140 state CURLY_B_min_fail */
+        /* #141 state CURLY_B_min_fail */
         .type = CURLY,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #141 state CURLY_B_max */
+        /* #142 state CURLY_B_max */
         .type = CURLY,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #142 state CURLY_B_max_fail */
+        /* #143 state CURLY_B_max_fail */
         .type = CURLY,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #143 state COMMIT_next */
+        /* #144 state COMMIT_next */
         .type = COMMIT,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #144 state COMMIT_next_fail */
+        /* #145 state COMMIT_next_fail */
         .type = COMMIT,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #145 state MARKPOINT_next */
+        /* #146 state MARKPOINT_next */
         .type = MARKPOINT,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #146 state MARKPOINT_next_fail */
+        /* #147 state MARKPOINT_next_fail */
         .type = MARKPOINT,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #147 state SKIP_next */
+        /* #148 state SKIP_next */
         .type = SKIP,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #148 state SKIP_next_fail */
+        /* #149 state SKIP_next_fail */
         .type = SKIP,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #149 state CUTGROUP_next */
+        /* #150 state CUTGROUP_next */
         .type = CUTGROUP,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #150 state CUTGROUP_next_fail */
+        /* #151 state CUTGROUP_next_fail */
         .type = CUTGROUP,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #151 state KEEPS_next */
+        /* #152 state KEEPS_next */
         .type = KEEPS,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #152 state KEEPS_next_fail */
+        /* #153 state KEEPS_next_fail */
         .type = KEEPS,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #153 state REF_next */
+        /* #154 state REF_next */
         .type = REF,
         .arg_len = 0,
         .arg_len_varies = 0,
         .off_by_arg = 0
     },
     {
-        /* #154 state REF_next_fail */
+        /* #155 state REF_next_fail */
         .type = REF,
         .arg_len = 0,
         .arg_len_varies = 0,
@@ -3066,8 +3085,8 @@ INIT({ CLUMP, BRANCH, STAR, PLUS, CURLY, CURLYN, CURLYM, CURLYX, WHILEM, REF,
     BRANCHJ, SUSPEND, IFTHEN,
     0 });

-/* varies: 0000000000000000000000000000000000000000000000110000000010000000001111111111110010011111000000010000000000000000 */
-EXTCONST U8 PL_varies_bitmask[] INIT({ 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x80, 0x3F, 0xFC, 0x9F, 0x01, 0x00, 0x00 });
+/* varies: 0000000000000000000000000000000000000000000001100000000000000000011111111111100000111111000000110000000000000000 */
+EXTCONST U8 PL_varies_bitmask[] INIT({ 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x7F, 0xF8, 0x3F, 0x03, 0x00, 0x00 });

 /* The following always have a length of 1. U8 we can do strchr() on it. */
 /* (Note that length 1 means "one character" under UTF8, not "one octet".) */
@@ -3075,12 +3094,13 @@ EXTCONST U8 PL_varies_bitmask[] INIT({ 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00,

 EXTCONST U8 PL_simple[] __attribute__deprecated__
 INIT({ 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,
+    ANYOFHr, ANYOFHs, ANYOFR, ANYOFRb, ANYOFHbbm, ANYOFM, NANYOFM, NEXACTb,
+    POSIXD, POSIXL, POSIXU, POSIXA, NPOSIXD, NPOSIXL, NPOSIXU, NPOSIXA,
+    REGEX_SET,
     0 });

-/* simple: 0000000000000000111111101111111111111111000000000000000000000000000000000000000000000000000000000000000001000000 */
-EXTCONST U8 PL_simple_bitmask[] INIT({ 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40 });
+/* simple: 0000000000000000111111101111111111111111000000010000000000000000000000000000000000000000000000000000000010000000 */
+EXTCONST U8 PL_simple_bitmask[] INIT({ 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80 });

 /* Is 'op', known to be of type EXACT, folding? */
 #define isEXACTFish(op) (assert(REGNODE_TYPE(op) == EXACT), (PL_EXACTFish_bitmask & (1U << (op - EXACT))))
diff --git a/t/re/anyof.t b/t/re/anyof.t
index 1f42e1353c..751e946ffc 100644
--- a/t/re/anyof.t
+++ b/t/re/anyof.t
@@ -159,7 +159,7 @@ my @tests = (

     'ebcdic_ok_below_this_marker',

-    '(?i:[^:])' => 'NANYOFM[:]',
+    '(?i:[^:])' => 'NEXACTb[:]',

     '[^\n]' => 'REG_ANY',