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',