From 6dee5e6b86cbdbd86719636ad33a5aced48764fe Mon Sep 17 00:00:00 2001 From: David Mitchell Date: Tue, 25 Nov 2025 14:06:33 +0000 Subject: [PATCH] regex engine: split EVAL_postponed_AB state (This commit makes no practical changes in behaviour except for debugging output.) Currently, one of the regex engine stack states is EVAL_postponed_AB. When executing something like /(??{'A'})B/ where A and represent general subpatterns, the engine executes the eval code, which returns the string 'A', which is compiled into a subpattern. Then the engine pushes an EVAL_postponed_AB state and runs the subpattern until it reaches an END op. Then it pushes *another* EVAL_postponed_AB state and runs the B part of the pattern until the final END. Then before returning success, it pops EVAL_postponed_AB off the stack (twice), executing any cleanup required. Similarly during failure, the EVAL_postponed_AB_fail action will be executed once or twice (depending on whether it failed during A or B). This commit splits that state into two, EVAL_postponed_A EVAL_postponed_B The first is pushed before running A, the second before running B. The actions currently remain the same and share the same code; i.e. this commit just does the equivalent of: - case EVAL_postponed_AB: + case EVAL_postponed_A: + case EVAL_postponed_B: ... cleanup code .... But it makes the code easier to understand, makes debugging output clearer, and will allow in future for the cleanup behaviours to differ between A and B. This commit also fixes up a few debugging messages and code comments which were still referring to 'EVAL_AB', which was renamed to EVAL_postponed_AB some years ago. --- regcomp.sym | 2 +- regexec.c | 20 +- regnodes.h | 792 +++++++++++++++++++++++++++------------------------- 3 files changed, 425 insertions(+), 389 deletions(-) diff --git a/regcomp.sym b/regcomp.sym index 33218d6ff097..98a0766ffe77 100644 --- a/regcomp.sym +++ b/regcomp.sym @@ -332,7 +332,7 @@ REGEX_SET REGEX_SET, depth p S ; Regex set, temporary node used in pre-optimi # # TRIE next:FAIL -EVAL B,postponed_AB:FAIL +EVAL B,postponed_A,postponed_B:FAIL CURLYX end:FAIL WHILEM A_pre,A_min,A_max,B_min,B_max:FAIL BRANCH next:FAIL diff --git a/regexec.c b/regexec.c index 64cce573e765..e52c48513d2a 100644 --- a/regexec.c +++ b/regexec.c @@ -6671,7 +6671,7 @@ S_regmatch(pTHX_ regmatch_info *reginfo, char *startpos, regnode *prog) /* mark_state piggy backs on the yes_state logic so that when we unwind the stack on success we can update the mark_state as we go */ regmatch_state *mark_state = NULL; /* last mark state we have seen */ - regmatch_state *cur_eval = NULL; /* most recent EVAL_AB state */ + regmatch_state *cur_eval = NULL; /* most recent EVAL_postponed_A state */ struct regmatch_state *cur_curlyx = NULL; /* most recent curlyx */ U32 state_num; bool no_final = 0; /* prevent failure from backtracking? */ @@ -8719,15 +8719,18 @@ S_regmatch(pTHX_ regmatch_info *reginfo, char *startpos, regnode *prog) ST.prev_eval = cur_eval; cur_eval = st; /* now continue from first node in postoned RE */ - PUSH_YES_STATE_GOTO(EVAL_postponed_AB, startpoint, locinput, + PUSH_YES_STATE_GOTO(EVAL_postponed_A, startpoint, locinput, loceol, script_run_begin); NOT_REACHED; /* NOTREACHED */ } - case EVAL_postponed_AB: /* cleanup after a successful (??{A})B */ + case EVAL_postponed_A: /* cleanup the A part after a + successful (??{A})B */ + case EVAL_postponed_B: /* cleanup the B part after a + successful (??{A})B */ /* note: this is called twice; first after popping B, then A */ DEBUG_STACK_r({ - Perl_re_exec_indentf( aTHX_ "EVAL_AB cur_eval = %p prev_eval = %p\n", + Perl_re_exec_indentf( aTHX_ "EVAL_postponed_A/B cur_eval = %p prev_eval = %p\n", depth, cur_eval, ST.prev_eval); }); @@ -8744,7 +8747,7 @@ S_regmatch(pTHX_ regmatch_info *reginfo, char *startpos, regnode *prog) rex->recurse_locinput[CUR_EVAL.close_paren - 1] = VAL; \ } - SET_RECURSE_LOCINPUT("EVAL_AB[before]", CUR_EVAL.prev_recurse_locinput); + SET_RECURSE_LOCINPUT("EVAL_postponed_A/B[before]", CUR_EVAL.prev_recurse_locinput); rex_sv = ST.prev_rex; is_utf8_pat = reginfo->is_utf8_pat = cBOOL(RX_UTF8(rex_sv)); @@ -8771,7 +8774,7 @@ S_regmatch(pTHX_ regmatch_info *reginfo, char *startpos, regnode *prog) if ( nochange_depth ) nochange_depth--; - SET_RECURSE_LOCINPUT("EVAL_AB[after]", cur_eval->locinput); + SET_RECURSE_LOCINPUT("EVAL_postponed_A/B[after]", cur_eval->locinput); sayYES; @@ -8780,7 +8783,8 @@ S_regmatch(pTHX_ regmatch_info *reginfo, char *startpos, regnode *prog) regcppop(rex, &maxopenparen); sayNO; - case EVAL_postponed_AB_fail: /* unsuccessfully ran A or B in (??{A})B */ + case EVAL_postponed_A_fail: /* unsuccessfully ran A in (??{A})B */ + case EVAL_postponed_B_fail: /* unsuccessfully ran B in (??{A})B */ /* note: this is called twice; first after popping B, then A */ DEBUG_STACK_r({ Perl_re_exec_indentf( aTHX_ "EVAL_AB_fail cur_eval = %p prev_eval = %p\n", @@ -9902,7 +9906,7 @@ NULL SET_RECURSE_LOCINPUT("FAKE-END[after]", cur_eval->locinput); - PUSH_YES_STATE_GOTO(EVAL_postponed_AB, /* match B */ + PUSH_YES_STATE_GOTO(EVAL_postponed_B, /* match B */ st->u.eval.prev_eval->u.eval.B, locinput, loceol, script_run_begin); } diff --git a/regnodes.h b/regnodes.h index e186d2c2823f..438e78772af0 100644 --- a/regnodes.h +++ b/regnodes.h @@ -128,7 +128,7 @@ typedef struct regnode tregnode_WHILEM; /* Regops and State definitions */ #define REGNODE_MAX 111 -#define REGMATCH_STATE_MAX 153 +#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))) @@ -1285,309 +1285,325 @@ typedef struct regnode tregnode_WHILEM; #define EVAL_B_fail_t8_pb 462 /* 0x1ce */ #define EVAL_B_fail_t8_p8 463 /* 0x1cf */ -#define EVAL_postponed_AB 116 /* 0x74 state for EVAL */ -#define EVAL_postponed_AB_tb 232 /* 0x0e8 */ -#define EVAL_postponed_AB_t8 233 /* 0x0e9 */ -#define EVAL_postponed_AB_tb_pb 464 /* 0x1d0 */ -#define EVAL_postponed_AB_tb_p8 465 /* 0x1d1 */ -#define EVAL_postponed_AB_t8_pb 466 /* 0x1d2 */ -#define EVAL_postponed_AB_t8_p8 467 /* 0x1d3 */ - -#define EVAL_postponed_AB_fail 117 /* 0x75 state for EVAL */ -#define EVAL_postponed_AB_fail_tb 234 /* 0x0ea */ -#define EVAL_postponed_AB_fail_t8 235 /* 0x0eb */ -#define EVAL_postponed_AB_fail_tb_pb 468 /* 0x1d4 */ -#define EVAL_postponed_AB_fail_tb_p8 469 /* 0x1d5 */ -#define EVAL_postponed_AB_fail_t8_pb 470 /* 0x1d6 */ -#define EVAL_postponed_AB_fail_t8_p8 471 /* 0x1d7 */ - -#define CURLYX_end 118 /* 0x76 state for CURLYX */ -#define CURLYX_end_tb 236 /* 0x0ec */ -#define CURLYX_end_t8 237 /* 0x0ed */ -#define CURLYX_end_tb_pb 472 /* 0x1d8 */ -#define CURLYX_end_tb_p8 473 /* 0x1d9 */ -#define CURLYX_end_t8_pb 474 /* 0x1da */ -#define CURLYX_end_t8_p8 475 /* 0x1db */ - -#define CURLYX_end_fail 119 /* 0x77 state for CURLYX */ -#define CURLYX_end_fail_tb 238 /* 0x0ee */ -#define CURLYX_end_fail_t8 239 /* 0x0ef */ -#define CURLYX_end_fail_tb_pb 476 /* 0x1dc */ -#define CURLYX_end_fail_tb_p8 477 /* 0x1dd */ -#define CURLYX_end_fail_t8_pb 478 /* 0x1de */ -#define CURLYX_end_fail_t8_p8 479 /* 0x1df */ - -#define WHILEM_A_pre 120 /* 0x78 state for WHILEM */ -#define WHILEM_A_pre_tb 240 /* 0x0f0 */ -#define WHILEM_A_pre_t8 241 /* 0x0f1 */ -#define WHILEM_A_pre_tb_pb 480 /* 0x1e0 */ -#define WHILEM_A_pre_tb_p8 481 /* 0x1e1 */ -#define WHILEM_A_pre_t8_pb 482 /* 0x1e2 */ -#define WHILEM_A_pre_t8_p8 483 /* 0x1e3 */ - -#define WHILEM_A_pre_fail 121 /* 0x79 state for WHILEM */ -#define WHILEM_A_pre_fail_tb 242 /* 0x0f2 */ -#define WHILEM_A_pre_fail_t8 243 /* 0x0f3 */ -#define WHILEM_A_pre_fail_tb_pb 484 /* 0x1e4 */ -#define WHILEM_A_pre_fail_tb_p8 485 /* 0x1e5 */ -#define WHILEM_A_pre_fail_t8_pb 486 /* 0x1e6 */ -#define WHILEM_A_pre_fail_t8_p8 487 /* 0x1e7 */ - -#define WHILEM_A_min 122 /* 0x7a state for WHILEM */ -#define WHILEM_A_min_tb 244 /* 0x0f4 */ -#define WHILEM_A_min_t8 245 /* 0x0f5 */ -#define WHILEM_A_min_tb_pb 488 /* 0x1e8 */ -#define WHILEM_A_min_tb_p8 489 /* 0x1e9 */ -#define WHILEM_A_min_t8_pb 490 /* 0x1ea */ -#define WHILEM_A_min_t8_p8 491 /* 0x1eb */ - -#define WHILEM_A_min_fail 123 /* 0x7b state for WHILEM */ -#define WHILEM_A_min_fail_tb 246 /* 0x0f6 */ -#define WHILEM_A_min_fail_t8 247 /* 0x0f7 */ -#define WHILEM_A_min_fail_tb_pb 492 /* 0x1ec */ -#define WHILEM_A_min_fail_tb_p8 493 /* 0x1ed */ -#define WHILEM_A_min_fail_t8_pb 494 /* 0x1ee */ -#define WHILEM_A_min_fail_t8_p8 495 /* 0x1ef */ - -#define WHILEM_A_max 124 /* 0x7c state for WHILEM */ -#define WHILEM_A_max_tb 248 /* 0x0f8 */ -#define WHILEM_A_max_t8 249 /* 0x0f9 */ -#define WHILEM_A_max_tb_pb 496 /* 0x1f0 */ -#define WHILEM_A_max_tb_p8 497 /* 0x1f1 */ -#define WHILEM_A_max_t8_pb 498 /* 0x1f2 */ -#define WHILEM_A_max_t8_p8 499 /* 0x1f3 */ - -#define WHILEM_A_max_fail 125 /* 0x7d state for WHILEM */ -#define WHILEM_A_max_fail_tb 250 /* 0x0fa */ -#define WHILEM_A_max_fail_t8 251 /* 0x0fb */ -#define WHILEM_A_max_fail_tb_pb 500 /* 0x1f4 */ -#define WHILEM_A_max_fail_tb_p8 501 /* 0x1f5 */ -#define WHILEM_A_max_fail_t8_pb 502 /* 0x1f6 */ -#define WHILEM_A_max_fail_t8_p8 503 /* 0x1f7 */ - -#define WHILEM_B_min 126 /* 0x7e state for WHILEM */ -#define WHILEM_B_min_tb 252 /* 0x0fc */ -#define WHILEM_B_min_t8 253 /* 0x0fd */ -#define WHILEM_B_min_tb_pb 504 /* 0x1f8 */ -#define WHILEM_B_min_tb_p8 505 /* 0x1f9 */ -#define WHILEM_B_min_t8_pb 506 /* 0x1fa */ -#define WHILEM_B_min_t8_p8 507 /* 0x1fb */ - -#define WHILEM_B_min_fail 127 /* 0x7f state for WHILEM */ -#define WHILEM_B_min_fail_tb 254 /* 0x0fe */ -#define WHILEM_B_min_fail_t8 255 /* 0x0ff */ -#define WHILEM_B_min_fail_tb_pb 508 /* 0x1fc */ -#define WHILEM_B_min_fail_tb_p8 509 /* 0x1fd */ -#define WHILEM_B_min_fail_t8_pb 510 /* 0x1fe */ -#define WHILEM_B_min_fail_t8_p8 511 /* 0x1ff */ - -#define WHILEM_B_max 128 /* 0x80 state for WHILEM */ -#define WHILEM_B_max_tb 256 /* 0x100 */ -#define WHILEM_B_max_t8 257 /* 0x101 */ -#define WHILEM_B_max_tb_pb 512 /* 0x200 */ -#define WHILEM_B_max_tb_p8 513 /* 0x201 */ -#define WHILEM_B_max_t8_pb 514 /* 0x202 */ -#define WHILEM_B_max_t8_p8 515 /* 0x203 */ - -#define WHILEM_B_max_fail 129 /* 0x81 state for WHILEM */ -#define WHILEM_B_max_fail_tb 258 /* 0x102 */ -#define WHILEM_B_max_fail_t8 259 /* 0x103 */ -#define WHILEM_B_max_fail_tb_pb 516 /* 0x204 */ -#define WHILEM_B_max_fail_tb_p8 517 /* 0x205 */ -#define WHILEM_B_max_fail_t8_pb 518 /* 0x206 */ -#define WHILEM_B_max_fail_t8_p8 519 /* 0x207 */ - -#define BRANCH_next 130 /* 0x82 state for BRANCH */ -#define BRANCH_next_tb 260 /* 0x104 */ -#define BRANCH_next_t8 261 /* 0x105 */ -#define BRANCH_next_tb_pb 520 /* 0x208 */ -#define BRANCH_next_tb_p8 521 /* 0x209 */ -#define BRANCH_next_t8_pb 522 /* 0x20a */ -#define BRANCH_next_t8_p8 523 /* 0x20b */ - -#define BRANCH_next_fail 131 /* 0x83 state for BRANCH */ -#define BRANCH_next_fail_tb 262 /* 0x106 */ -#define BRANCH_next_fail_t8 263 /* 0x107 */ -#define BRANCH_next_fail_tb_pb 524 /* 0x20c */ -#define BRANCH_next_fail_tb_p8 525 /* 0x20d */ -#define BRANCH_next_fail_t8_pb 526 /* 0x20e */ -#define BRANCH_next_fail_t8_p8 527 /* 0x20f */ - -#define CURLYM_A 132 /* 0x84 state for CURLYM */ -#define CURLYM_A_tb 264 /* 0x108 */ -#define CURLYM_A_t8 265 /* 0x109 */ -#define CURLYM_A_tb_pb 528 /* 0x210 */ -#define CURLYM_A_tb_p8 529 /* 0x211 */ -#define CURLYM_A_t8_pb 530 /* 0x212 */ -#define CURLYM_A_t8_p8 531 /* 0x213 */ - -#define CURLYM_A_fail 133 /* 0x85 state for CURLYM */ -#define CURLYM_A_fail_tb 266 /* 0x10a */ -#define CURLYM_A_fail_t8 267 /* 0x10b */ -#define CURLYM_A_fail_tb_pb 532 /* 0x214 */ -#define CURLYM_A_fail_tb_p8 533 /* 0x215 */ -#define CURLYM_A_fail_t8_pb 534 /* 0x216 */ -#define CURLYM_A_fail_t8_p8 535 /* 0x217 */ - -#define CURLYM_B 134 /* 0x86 state for CURLYM */ -#define CURLYM_B_tb 268 /* 0x10c */ -#define CURLYM_B_t8 269 /* 0x10d */ -#define CURLYM_B_tb_pb 536 /* 0x218 */ -#define CURLYM_B_tb_p8 537 /* 0x219 */ -#define CURLYM_B_t8_pb 538 /* 0x21a */ -#define CURLYM_B_t8_p8 539 /* 0x21b */ - -#define CURLYM_B_fail 135 /* 0x87 state for CURLYM */ -#define CURLYM_B_fail_tb 270 /* 0x10e */ -#define CURLYM_B_fail_t8 271 /* 0x10f */ -#define CURLYM_B_fail_tb_pb 540 /* 0x21c */ -#define CURLYM_B_fail_tb_p8 541 /* 0x21d */ -#define CURLYM_B_fail_t8_pb 542 /* 0x21e */ -#define CURLYM_B_fail_t8_p8 543 /* 0x21f */ - -#define IFMATCH_A 136 /* 0x88 state for IFMATCH */ -#define IFMATCH_A_tb 272 /* 0x110 */ -#define IFMATCH_A_t8 273 /* 0x111 */ -#define IFMATCH_A_tb_pb 544 /* 0x220 */ -#define IFMATCH_A_tb_p8 545 /* 0x221 */ -#define IFMATCH_A_t8_pb 546 /* 0x222 */ -#define IFMATCH_A_t8_p8 547 /* 0x223 */ - -#define IFMATCH_A_fail 137 /* 0x89 state for IFMATCH */ -#define IFMATCH_A_fail_tb 274 /* 0x112 */ -#define IFMATCH_A_fail_t8 275 /* 0x113 */ -#define IFMATCH_A_fail_tb_pb 548 /* 0x224 */ -#define IFMATCH_A_fail_tb_p8 549 /* 0x225 */ -#define IFMATCH_A_fail_t8_pb 550 /* 0x226 */ -#define IFMATCH_A_fail_t8_p8 551 /* 0x227 */ - -#define CURLY_B_min 138 /* 0x8a state for CURLY */ -#define CURLY_B_min_tb 276 /* 0x114 */ -#define CURLY_B_min_t8 277 /* 0x115 */ -#define CURLY_B_min_tb_pb 552 /* 0x228 */ -#define CURLY_B_min_tb_p8 553 /* 0x229 */ -#define CURLY_B_min_t8_pb 554 /* 0x22a */ -#define CURLY_B_min_t8_p8 555 /* 0x22b */ - -#define CURLY_B_min_fail 139 /* 0x8b state for CURLY */ -#define CURLY_B_min_fail_tb 278 /* 0x116 */ -#define CURLY_B_min_fail_t8 279 /* 0x117 */ -#define CURLY_B_min_fail_tb_pb 556 /* 0x22c */ -#define CURLY_B_min_fail_tb_p8 557 /* 0x22d */ -#define CURLY_B_min_fail_t8_pb 558 /* 0x22e */ -#define CURLY_B_min_fail_t8_p8 559 /* 0x22f */ - -#define CURLY_B_max 140 /* 0x8c state for CURLY */ -#define CURLY_B_max_tb 280 /* 0x118 */ -#define CURLY_B_max_t8 281 /* 0x119 */ -#define CURLY_B_max_tb_pb 560 /* 0x230 */ -#define CURLY_B_max_tb_p8 561 /* 0x231 */ -#define CURLY_B_max_t8_pb 562 /* 0x232 */ -#define CURLY_B_max_t8_p8 563 /* 0x233 */ - -#define CURLY_B_max_fail 141 /* 0x8d state for CURLY */ -#define CURLY_B_max_fail_tb 282 /* 0x11a */ -#define CURLY_B_max_fail_t8 283 /* 0x11b */ -#define CURLY_B_max_fail_tb_pb 564 /* 0x234 */ -#define CURLY_B_max_fail_tb_p8 565 /* 0x235 */ -#define CURLY_B_max_fail_t8_pb 566 /* 0x236 */ -#define CURLY_B_max_fail_t8_p8 567 /* 0x237 */ - -#define COMMIT_next 142 /* 0x8e state for COMMIT */ -#define COMMIT_next_tb 284 /* 0x11c */ -#define COMMIT_next_t8 285 /* 0x11d */ -#define COMMIT_next_tb_pb 568 /* 0x238 */ -#define COMMIT_next_tb_p8 569 /* 0x239 */ -#define COMMIT_next_t8_pb 570 /* 0x23a */ -#define COMMIT_next_t8_p8 571 /* 0x23b */ - -#define COMMIT_next_fail 143 /* 0x8f state for COMMIT */ -#define COMMIT_next_fail_tb 286 /* 0x11e */ -#define COMMIT_next_fail_t8 287 /* 0x11f */ -#define COMMIT_next_fail_tb_pb 572 /* 0x23c */ -#define COMMIT_next_fail_tb_p8 573 /* 0x23d */ -#define COMMIT_next_fail_t8_pb 574 /* 0x23e */ -#define COMMIT_next_fail_t8_p8 575 /* 0x23f */ - -#define MARKPOINT_next 144 /* 0x90 state for MARKPOINT */ -#define MARKPOINT_next_tb 288 /* 0x120 */ -#define MARKPOINT_next_t8 289 /* 0x121 */ -#define MARKPOINT_next_tb_pb 576 /* 0x240 */ -#define MARKPOINT_next_tb_p8 577 /* 0x241 */ -#define MARKPOINT_next_t8_pb 578 /* 0x242 */ -#define MARKPOINT_next_t8_p8 579 /* 0x243 */ - -#define MARKPOINT_next_fail 145 /* 0x91 state for MARKPOINT */ -#define MARKPOINT_next_fail_tb 290 /* 0x122 */ -#define MARKPOINT_next_fail_t8 291 /* 0x123 */ -#define MARKPOINT_next_fail_tb_pb 580 /* 0x244 */ -#define MARKPOINT_next_fail_tb_p8 581 /* 0x245 */ -#define MARKPOINT_next_fail_t8_pb 582 /* 0x246 */ -#define MARKPOINT_next_fail_t8_p8 583 /* 0x247 */ - -#define SKIP_next 146 /* 0x92 state for SKIP */ -#define SKIP_next_tb 292 /* 0x124 */ -#define SKIP_next_t8 293 /* 0x125 */ -#define SKIP_next_tb_pb 584 /* 0x248 */ -#define SKIP_next_tb_p8 585 /* 0x249 */ -#define SKIP_next_t8_pb 586 /* 0x24a */ -#define SKIP_next_t8_p8 587 /* 0x24b */ - -#define SKIP_next_fail 147 /* 0x93 state for SKIP */ -#define SKIP_next_fail_tb 294 /* 0x126 */ -#define SKIP_next_fail_t8 295 /* 0x127 */ -#define SKIP_next_fail_tb_pb 588 /* 0x24c */ -#define SKIP_next_fail_tb_p8 589 /* 0x24d */ -#define SKIP_next_fail_t8_pb 590 /* 0x24e */ -#define SKIP_next_fail_t8_p8 591 /* 0x24f */ - -#define CUTGROUP_next 148 /* 0x94 state for CUTGROUP */ -#define CUTGROUP_next_tb 296 /* 0x128 */ -#define CUTGROUP_next_t8 297 /* 0x129 */ -#define CUTGROUP_next_tb_pb 592 /* 0x250 */ -#define CUTGROUP_next_tb_p8 593 /* 0x251 */ -#define CUTGROUP_next_t8_pb 594 /* 0x252 */ -#define CUTGROUP_next_t8_p8 595 /* 0x253 */ - -#define CUTGROUP_next_fail 149 /* 0x95 state for CUTGROUP */ -#define CUTGROUP_next_fail_tb 298 /* 0x12a */ -#define CUTGROUP_next_fail_t8 299 /* 0x12b */ -#define CUTGROUP_next_fail_tb_pb 596 /* 0x254 */ -#define CUTGROUP_next_fail_tb_p8 597 /* 0x255 */ -#define CUTGROUP_next_fail_t8_pb 598 /* 0x256 */ -#define CUTGROUP_next_fail_t8_p8 599 /* 0x257 */ - -#define KEEPS_next 150 /* 0x96 state for KEEPS */ -#define KEEPS_next_tb 300 /* 0x12c */ -#define KEEPS_next_t8 301 /* 0x12d */ -#define KEEPS_next_tb_pb 600 /* 0x258 */ -#define KEEPS_next_tb_p8 601 /* 0x259 */ -#define KEEPS_next_t8_pb 602 /* 0x25a */ -#define KEEPS_next_t8_p8 603 /* 0x25b */ - -#define KEEPS_next_fail 151 /* 0x97 state for KEEPS */ -#define KEEPS_next_fail_tb 302 /* 0x12e */ -#define KEEPS_next_fail_t8 303 /* 0x12f */ -#define KEEPS_next_fail_tb_pb 604 /* 0x25c */ -#define KEEPS_next_fail_tb_p8 605 /* 0x25d */ -#define KEEPS_next_fail_t8_pb 606 /* 0x25e */ -#define KEEPS_next_fail_t8_p8 607 /* 0x25f */ - -#define REF_next 152 /* 0x98 state for REF */ -#define REF_next_tb 304 /* 0x130 */ -#define REF_next_t8 305 /* 0x131 */ -#define REF_next_tb_pb 608 /* 0x260 */ -#define REF_next_tb_p8 609 /* 0x261 */ -#define REF_next_t8_pb 610 /* 0x262 */ -#define REF_next_t8_p8 611 /* 0x263 */ - -#define REF_next_fail 153 /* 0x99 state for REF */ -#define REF_next_fail_tb 306 /* 0x132 */ -#define REF_next_fail_t8 307 /* 0x133 */ -#define REF_next_fail_tb_pb 612 /* 0x264 */ -#define REF_next_fail_tb_p8 613 /* 0x265 */ -#define REF_next_fail_t8_pb 614 /* 0x266 */ -#define REF_next_fail_t8_p8 615 /* 0x267 */ +#define EVAL_postponed_A 116 /* 0x74 state for EVAL */ +#define EVAL_postponed_A_tb 232 /* 0x0e8 */ +#define EVAL_postponed_A_t8 233 /* 0x0e9 */ +#define EVAL_postponed_A_tb_pb 464 /* 0x1d0 */ +#define EVAL_postponed_A_tb_p8 465 /* 0x1d1 */ +#define EVAL_postponed_A_t8_pb 466 /* 0x1d2 */ +#define EVAL_postponed_A_t8_p8 467 /* 0x1d3 */ + +#define EVAL_postponed_A_fail 117 /* 0x75 state for EVAL */ +#define EVAL_postponed_A_fail_tb 234 /* 0x0ea */ +#define EVAL_postponed_A_fail_t8 235 /* 0x0eb */ +#define EVAL_postponed_A_fail_tb_pb 468 /* 0x1d4 */ +#define EVAL_postponed_A_fail_tb_p8 469 /* 0x1d5 */ +#define EVAL_postponed_A_fail_t8_pb 470 /* 0x1d6 */ +#define EVAL_postponed_A_fail_t8_p8 471 /* 0x1d7 */ + +#define EVAL_postponed_B 118 /* 0x76 state for EVAL */ +#define EVAL_postponed_B_tb 236 /* 0x0ec */ +#define EVAL_postponed_B_t8 237 /* 0x0ed */ +#define EVAL_postponed_B_tb_pb 472 /* 0x1d8 */ +#define EVAL_postponed_B_tb_p8 473 /* 0x1d9 */ +#define EVAL_postponed_B_t8_pb 474 /* 0x1da */ +#define EVAL_postponed_B_t8_p8 475 /* 0x1db */ + +#define EVAL_postponed_B_fail 119 /* 0x77 state for EVAL */ +#define EVAL_postponed_B_fail_tb 238 /* 0x0ee */ +#define EVAL_postponed_B_fail_t8 239 /* 0x0ef */ +#define EVAL_postponed_B_fail_tb_pb 476 /* 0x1dc */ +#define EVAL_postponed_B_fail_tb_p8 477 /* 0x1dd */ +#define EVAL_postponed_B_fail_t8_pb 478 /* 0x1de */ +#define EVAL_postponed_B_fail_t8_p8 479 /* 0x1df */ + +#define CURLYX_end 120 /* 0x78 state for CURLYX */ +#define CURLYX_end_tb 240 /* 0x0f0 */ +#define CURLYX_end_t8 241 /* 0x0f1 */ +#define CURLYX_end_tb_pb 480 /* 0x1e0 */ +#define CURLYX_end_tb_p8 481 /* 0x1e1 */ +#define CURLYX_end_t8_pb 482 /* 0x1e2 */ +#define CURLYX_end_t8_p8 483 /* 0x1e3 */ + +#define CURLYX_end_fail 121 /* 0x79 state for CURLYX */ +#define CURLYX_end_fail_tb 242 /* 0x0f2 */ +#define CURLYX_end_fail_t8 243 /* 0x0f3 */ +#define CURLYX_end_fail_tb_pb 484 /* 0x1e4 */ +#define CURLYX_end_fail_tb_p8 485 /* 0x1e5 */ +#define CURLYX_end_fail_t8_pb 486 /* 0x1e6 */ +#define CURLYX_end_fail_t8_p8 487 /* 0x1e7 */ + +#define WHILEM_A_pre 122 /* 0x7a state for WHILEM */ +#define WHILEM_A_pre_tb 244 /* 0x0f4 */ +#define WHILEM_A_pre_t8 245 /* 0x0f5 */ +#define WHILEM_A_pre_tb_pb 488 /* 0x1e8 */ +#define WHILEM_A_pre_tb_p8 489 /* 0x1e9 */ +#define WHILEM_A_pre_t8_pb 490 /* 0x1ea */ +#define WHILEM_A_pre_t8_p8 491 /* 0x1eb */ + +#define WHILEM_A_pre_fail 123 /* 0x7b state for WHILEM */ +#define WHILEM_A_pre_fail_tb 246 /* 0x0f6 */ +#define WHILEM_A_pre_fail_t8 247 /* 0x0f7 */ +#define WHILEM_A_pre_fail_tb_pb 492 /* 0x1ec */ +#define WHILEM_A_pre_fail_tb_p8 493 /* 0x1ed */ +#define WHILEM_A_pre_fail_t8_pb 494 /* 0x1ee */ +#define WHILEM_A_pre_fail_t8_p8 495 /* 0x1ef */ + +#define WHILEM_A_min 124 /* 0x7c state for WHILEM */ +#define WHILEM_A_min_tb 248 /* 0x0f8 */ +#define WHILEM_A_min_t8 249 /* 0x0f9 */ +#define WHILEM_A_min_tb_pb 496 /* 0x1f0 */ +#define WHILEM_A_min_tb_p8 497 /* 0x1f1 */ +#define WHILEM_A_min_t8_pb 498 /* 0x1f2 */ +#define WHILEM_A_min_t8_p8 499 /* 0x1f3 */ + +#define WHILEM_A_min_fail 125 /* 0x7d state for WHILEM */ +#define WHILEM_A_min_fail_tb 250 /* 0x0fa */ +#define WHILEM_A_min_fail_t8 251 /* 0x0fb */ +#define WHILEM_A_min_fail_tb_pb 500 /* 0x1f4 */ +#define WHILEM_A_min_fail_tb_p8 501 /* 0x1f5 */ +#define WHILEM_A_min_fail_t8_pb 502 /* 0x1f6 */ +#define WHILEM_A_min_fail_t8_p8 503 /* 0x1f7 */ + +#define WHILEM_A_max 126 /* 0x7e state for WHILEM */ +#define WHILEM_A_max_tb 252 /* 0x0fc */ +#define WHILEM_A_max_t8 253 /* 0x0fd */ +#define WHILEM_A_max_tb_pb 504 /* 0x1f8 */ +#define WHILEM_A_max_tb_p8 505 /* 0x1f9 */ +#define WHILEM_A_max_t8_pb 506 /* 0x1fa */ +#define WHILEM_A_max_t8_p8 507 /* 0x1fb */ + +#define WHILEM_A_max_fail 127 /* 0x7f state for WHILEM */ +#define WHILEM_A_max_fail_tb 254 /* 0x0fe */ +#define WHILEM_A_max_fail_t8 255 /* 0x0ff */ +#define WHILEM_A_max_fail_tb_pb 508 /* 0x1fc */ +#define WHILEM_A_max_fail_tb_p8 509 /* 0x1fd */ +#define WHILEM_A_max_fail_t8_pb 510 /* 0x1fe */ +#define WHILEM_A_max_fail_t8_p8 511 /* 0x1ff */ + +#define WHILEM_B_min 128 /* 0x80 state for WHILEM */ +#define WHILEM_B_min_tb 256 /* 0x100 */ +#define WHILEM_B_min_t8 257 /* 0x101 */ +#define WHILEM_B_min_tb_pb 512 /* 0x200 */ +#define WHILEM_B_min_tb_p8 513 /* 0x201 */ +#define WHILEM_B_min_t8_pb 514 /* 0x202 */ +#define WHILEM_B_min_t8_p8 515 /* 0x203 */ + +#define WHILEM_B_min_fail 129 /* 0x81 state for WHILEM */ +#define WHILEM_B_min_fail_tb 258 /* 0x102 */ +#define WHILEM_B_min_fail_t8 259 /* 0x103 */ +#define WHILEM_B_min_fail_tb_pb 516 /* 0x204 */ +#define WHILEM_B_min_fail_tb_p8 517 /* 0x205 */ +#define WHILEM_B_min_fail_t8_pb 518 /* 0x206 */ +#define WHILEM_B_min_fail_t8_p8 519 /* 0x207 */ + +#define WHILEM_B_max 130 /* 0x82 state for WHILEM */ +#define WHILEM_B_max_tb 260 /* 0x104 */ +#define WHILEM_B_max_t8 261 /* 0x105 */ +#define WHILEM_B_max_tb_pb 520 /* 0x208 */ +#define WHILEM_B_max_tb_p8 521 /* 0x209 */ +#define WHILEM_B_max_t8_pb 522 /* 0x20a */ +#define WHILEM_B_max_t8_p8 523 /* 0x20b */ + +#define WHILEM_B_max_fail 131 /* 0x83 state for WHILEM */ +#define WHILEM_B_max_fail_tb 262 /* 0x106 */ +#define WHILEM_B_max_fail_t8 263 /* 0x107 */ +#define WHILEM_B_max_fail_tb_pb 524 /* 0x20c */ +#define WHILEM_B_max_fail_tb_p8 525 /* 0x20d */ +#define WHILEM_B_max_fail_t8_pb 526 /* 0x20e */ +#define WHILEM_B_max_fail_t8_p8 527 /* 0x20f */ + +#define BRANCH_next 132 /* 0x84 state for BRANCH */ +#define BRANCH_next_tb 264 /* 0x108 */ +#define BRANCH_next_t8 265 /* 0x109 */ +#define BRANCH_next_tb_pb 528 /* 0x210 */ +#define BRANCH_next_tb_p8 529 /* 0x211 */ +#define BRANCH_next_t8_pb 530 /* 0x212 */ +#define BRANCH_next_t8_p8 531 /* 0x213 */ + +#define BRANCH_next_fail 133 /* 0x85 state for BRANCH */ +#define BRANCH_next_fail_tb 266 /* 0x10a */ +#define BRANCH_next_fail_t8 267 /* 0x10b */ +#define BRANCH_next_fail_tb_pb 532 /* 0x214 */ +#define BRANCH_next_fail_tb_p8 533 /* 0x215 */ +#define BRANCH_next_fail_t8_pb 534 /* 0x216 */ +#define BRANCH_next_fail_t8_p8 535 /* 0x217 */ + +#define CURLYM_A 134 /* 0x86 state for CURLYM */ +#define CURLYM_A_tb 268 /* 0x10c */ +#define CURLYM_A_t8 269 /* 0x10d */ +#define CURLYM_A_tb_pb 536 /* 0x218 */ +#define CURLYM_A_tb_p8 537 /* 0x219 */ +#define CURLYM_A_t8_pb 538 /* 0x21a */ +#define CURLYM_A_t8_p8 539 /* 0x21b */ + +#define CURLYM_A_fail 135 /* 0x87 state for CURLYM */ +#define CURLYM_A_fail_tb 270 /* 0x10e */ +#define CURLYM_A_fail_t8 271 /* 0x10f */ +#define CURLYM_A_fail_tb_pb 540 /* 0x21c */ +#define CURLYM_A_fail_tb_p8 541 /* 0x21d */ +#define CURLYM_A_fail_t8_pb 542 /* 0x21e */ +#define CURLYM_A_fail_t8_p8 543 /* 0x21f */ + +#define CURLYM_B 136 /* 0x88 state for CURLYM */ +#define CURLYM_B_tb 272 /* 0x110 */ +#define CURLYM_B_t8 273 /* 0x111 */ +#define CURLYM_B_tb_pb 544 /* 0x220 */ +#define CURLYM_B_tb_p8 545 /* 0x221 */ +#define CURLYM_B_t8_pb 546 /* 0x222 */ +#define CURLYM_B_t8_p8 547 /* 0x223 */ + +#define CURLYM_B_fail 137 /* 0x89 state for CURLYM */ +#define CURLYM_B_fail_tb 274 /* 0x112 */ +#define CURLYM_B_fail_t8 275 /* 0x113 */ +#define CURLYM_B_fail_tb_pb 548 /* 0x224 */ +#define CURLYM_B_fail_tb_p8 549 /* 0x225 */ +#define CURLYM_B_fail_t8_pb 550 /* 0x226 */ +#define CURLYM_B_fail_t8_p8 551 /* 0x227 */ + +#define IFMATCH_A 138 /* 0x8a state for IFMATCH */ +#define IFMATCH_A_tb 276 /* 0x114 */ +#define IFMATCH_A_t8 277 /* 0x115 */ +#define IFMATCH_A_tb_pb 552 /* 0x228 */ +#define IFMATCH_A_tb_p8 553 /* 0x229 */ +#define IFMATCH_A_t8_pb 554 /* 0x22a */ +#define IFMATCH_A_t8_p8 555 /* 0x22b */ + +#define IFMATCH_A_fail 139 /* 0x8b state for IFMATCH */ +#define IFMATCH_A_fail_tb 278 /* 0x116 */ +#define IFMATCH_A_fail_t8 279 /* 0x117 */ +#define IFMATCH_A_fail_tb_pb 556 /* 0x22c */ +#define IFMATCH_A_fail_tb_p8 557 /* 0x22d */ +#define IFMATCH_A_fail_t8_pb 558 /* 0x22e */ +#define IFMATCH_A_fail_t8_p8 559 /* 0x22f */ + +#define CURLY_B_min 140 /* 0x8c state for CURLY */ +#define CURLY_B_min_tb 280 /* 0x118 */ +#define CURLY_B_min_t8 281 /* 0x119 */ +#define CURLY_B_min_tb_pb 560 /* 0x230 */ +#define CURLY_B_min_tb_p8 561 /* 0x231 */ +#define CURLY_B_min_t8_pb 562 /* 0x232 */ +#define CURLY_B_min_t8_p8 563 /* 0x233 */ + +#define CURLY_B_min_fail 141 /* 0x8d state for CURLY */ +#define CURLY_B_min_fail_tb 282 /* 0x11a */ +#define CURLY_B_min_fail_t8 283 /* 0x11b */ +#define CURLY_B_min_fail_tb_pb 564 /* 0x234 */ +#define CURLY_B_min_fail_tb_p8 565 /* 0x235 */ +#define CURLY_B_min_fail_t8_pb 566 /* 0x236 */ +#define CURLY_B_min_fail_t8_p8 567 /* 0x237 */ + +#define CURLY_B_max 142 /* 0x8e state for CURLY */ +#define CURLY_B_max_tb 284 /* 0x11c */ +#define CURLY_B_max_t8 285 /* 0x11d */ +#define CURLY_B_max_tb_pb 568 /* 0x238 */ +#define CURLY_B_max_tb_p8 569 /* 0x239 */ +#define CURLY_B_max_t8_pb 570 /* 0x23a */ +#define CURLY_B_max_t8_p8 571 /* 0x23b */ + +#define CURLY_B_max_fail 143 /* 0x8f state for CURLY */ +#define CURLY_B_max_fail_tb 286 /* 0x11e */ +#define CURLY_B_max_fail_t8 287 /* 0x11f */ +#define CURLY_B_max_fail_tb_pb 572 /* 0x23c */ +#define CURLY_B_max_fail_tb_p8 573 /* 0x23d */ +#define CURLY_B_max_fail_t8_pb 574 /* 0x23e */ +#define CURLY_B_max_fail_t8_p8 575 /* 0x23f */ + +#define COMMIT_next 144 /* 0x90 state for COMMIT */ +#define COMMIT_next_tb 288 /* 0x120 */ +#define COMMIT_next_t8 289 /* 0x121 */ +#define COMMIT_next_tb_pb 576 /* 0x240 */ +#define COMMIT_next_tb_p8 577 /* 0x241 */ +#define COMMIT_next_t8_pb 578 /* 0x242 */ +#define COMMIT_next_t8_p8 579 /* 0x243 */ + +#define COMMIT_next_fail 145 /* 0x91 state for COMMIT */ +#define COMMIT_next_fail_tb 290 /* 0x122 */ +#define COMMIT_next_fail_t8 291 /* 0x123 */ +#define COMMIT_next_fail_tb_pb 580 /* 0x244 */ +#define COMMIT_next_fail_tb_p8 581 /* 0x245 */ +#define COMMIT_next_fail_t8_pb 582 /* 0x246 */ +#define COMMIT_next_fail_t8_p8 583 /* 0x247 */ + +#define MARKPOINT_next 146 /* 0x92 state for MARKPOINT */ +#define MARKPOINT_next_tb 292 /* 0x124 */ +#define MARKPOINT_next_t8 293 /* 0x125 */ +#define MARKPOINT_next_tb_pb 584 /* 0x248 */ +#define MARKPOINT_next_tb_p8 585 /* 0x249 */ +#define MARKPOINT_next_t8_pb 586 /* 0x24a */ +#define MARKPOINT_next_t8_p8 587 /* 0x24b */ + +#define MARKPOINT_next_fail 147 /* 0x93 state for MARKPOINT */ +#define MARKPOINT_next_fail_tb 294 /* 0x126 */ +#define MARKPOINT_next_fail_t8 295 /* 0x127 */ +#define MARKPOINT_next_fail_tb_pb 588 /* 0x24c */ +#define MARKPOINT_next_fail_tb_p8 589 /* 0x24d */ +#define MARKPOINT_next_fail_t8_pb 590 /* 0x24e */ +#define MARKPOINT_next_fail_t8_p8 591 /* 0x24f */ + +#define SKIP_next 148 /* 0x94 state for SKIP */ +#define SKIP_next_tb 296 /* 0x128 */ +#define SKIP_next_t8 297 /* 0x129 */ +#define SKIP_next_tb_pb 592 /* 0x250 */ +#define SKIP_next_tb_p8 593 /* 0x251 */ +#define SKIP_next_t8_pb 594 /* 0x252 */ +#define SKIP_next_t8_p8 595 /* 0x253 */ + +#define SKIP_next_fail 149 /* 0x95 state for SKIP */ +#define SKIP_next_fail_tb 298 /* 0x12a */ +#define SKIP_next_fail_t8 299 /* 0x12b */ +#define SKIP_next_fail_tb_pb 596 /* 0x254 */ +#define SKIP_next_fail_tb_p8 597 /* 0x255 */ +#define SKIP_next_fail_t8_pb 598 /* 0x256 */ +#define SKIP_next_fail_t8_p8 599 /* 0x257 */ + +#define CUTGROUP_next 150 /* 0x96 state for CUTGROUP */ +#define CUTGROUP_next_tb 300 /* 0x12c */ +#define CUTGROUP_next_t8 301 /* 0x12d */ +#define CUTGROUP_next_tb_pb 600 /* 0x258 */ +#define CUTGROUP_next_tb_p8 601 /* 0x259 */ +#define CUTGROUP_next_t8_pb 602 /* 0x25a */ +#define CUTGROUP_next_t8_p8 603 /* 0x25b */ + +#define CUTGROUP_next_fail 151 /* 0x97 state for CUTGROUP */ +#define CUTGROUP_next_fail_tb 302 /* 0x12e */ +#define CUTGROUP_next_fail_t8 303 /* 0x12f */ +#define CUTGROUP_next_fail_tb_pb 604 /* 0x25c */ +#define CUTGROUP_next_fail_tb_p8 605 /* 0x25d */ +#define CUTGROUP_next_fail_t8_pb 606 /* 0x25e */ +#define CUTGROUP_next_fail_t8_p8 607 /* 0x25f */ + +#define KEEPS_next 152 /* 0x98 state for KEEPS */ +#define KEEPS_next_tb 304 /* 0x130 */ +#define KEEPS_next_t8 305 /* 0x131 */ +#define KEEPS_next_tb_pb 608 /* 0x260 */ +#define KEEPS_next_tb_p8 609 /* 0x261 */ +#define KEEPS_next_t8_pb 610 /* 0x262 */ +#define KEEPS_next_t8_p8 611 /* 0x263 */ + +#define KEEPS_next_fail 153 /* 0x99 state for KEEPS */ +#define KEEPS_next_fail_tb 306 /* 0x132 */ +#define KEEPS_next_fail_t8 307 /* 0x133 */ +#define KEEPS_next_fail_tb_pb 612 /* 0x264 */ +#define KEEPS_next_fail_tb_p8 613 /* 0x265 */ +#define KEEPS_next_fail_t8_pb 614 /* 0x266 */ +#define KEEPS_next_fail_t8_p8 615 /* 0x267 */ + +#define REF_next 154 /* 0x9a state for REF */ +#define REF_next_tb 308 /* 0x134 */ +#define REF_next_t8 309 /* 0x135 */ +#define REF_next_tb_pb 616 /* 0x268 */ +#define REF_next_tb_p8 617 /* 0x269 */ +#define REF_next_t8_pb 618 /* 0x26a */ +#define REF_next_t8_p8 619 /* 0x26b */ + +#define REF_next_fail 155 /* 0x9b state for REF */ +#define REF_next_fail_tb 310 /* 0x136 */ +#define REF_next_fail_t8 311 /* 0x137 */ +#define REF_next_fail_tb_pb 620 /* 0x26c */ +#define REF_next_fail_tb_p8 621 /* 0x26d */ +#define REF_next_fail_t8_pb 622 /* 0x26e */ +#define REF_next_fail_t8_p8 623 /* 0x26f */ /* PL_regnode_name[] - Opcode/state names in string form, for debugging */ @@ -1710,44 +1726,46 @@ EXTCONST char * const PL_regnode_name[] INIT( { "TRIE_next_fail", /* REGNODE_MAX +0x02 */ "EVAL_B", /* REGNODE_MAX +0x03 */ "EVAL_B_fail", /* REGNODE_MAX +0x04 */ - "EVAL_postponed_AB", /* REGNODE_MAX +0x05 */ - "EVAL_postponed_AB_fail", /* REGNODE_MAX +0x06 */ - "CURLYX_end", /* REGNODE_MAX +0x07 */ - "CURLYX_end_fail", /* REGNODE_MAX +0x08 */ - "WHILEM_A_pre", /* REGNODE_MAX +0x09 */ - "WHILEM_A_pre_fail", /* REGNODE_MAX +0x0a */ - "WHILEM_A_min", /* REGNODE_MAX +0x0b */ - "WHILEM_A_min_fail", /* REGNODE_MAX +0x0c */ - "WHILEM_A_max", /* REGNODE_MAX +0x0d */ - "WHILEM_A_max_fail", /* REGNODE_MAX +0x0e */ - "WHILEM_B_min", /* REGNODE_MAX +0x0f */ - "WHILEM_B_min_fail", /* REGNODE_MAX +0x10 */ - "WHILEM_B_max", /* REGNODE_MAX +0x11 */ - "WHILEM_B_max_fail", /* REGNODE_MAX +0x12 */ - "BRANCH_next", /* REGNODE_MAX +0x13 */ - "BRANCH_next_fail", /* REGNODE_MAX +0x14 */ - "CURLYM_A", /* REGNODE_MAX +0x15 */ - "CURLYM_A_fail", /* REGNODE_MAX +0x16 */ - "CURLYM_B", /* REGNODE_MAX +0x17 */ - "CURLYM_B_fail", /* REGNODE_MAX +0x18 */ - "IFMATCH_A", /* REGNODE_MAX +0x19 */ - "IFMATCH_A_fail", /* REGNODE_MAX +0x1a */ - "CURLY_B_min", /* REGNODE_MAX +0x1b */ - "CURLY_B_min_fail", /* REGNODE_MAX +0x1c */ - "CURLY_B_max", /* REGNODE_MAX +0x1d */ - "CURLY_B_max_fail", /* REGNODE_MAX +0x1e */ - "COMMIT_next", /* REGNODE_MAX +0x1f */ - "COMMIT_next_fail", /* REGNODE_MAX +0x20 */ - "MARKPOINT_next", /* REGNODE_MAX +0x21 */ - "MARKPOINT_next_fail", /* REGNODE_MAX +0x22 */ - "SKIP_next", /* REGNODE_MAX +0x23 */ - "SKIP_next_fail", /* REGNODE_MAX +0x24 */ - "CUTGROUP_next", /* REGNODE_MAX +0x25 */ - "CUTGROUP_next_fail", /* REGNODE_MAX +0x26 */ - "KEEPS_next", /* REGNODE_MAX +0x27 */ - "KEEPS_next_fail", /* REGNODE_MAX +0x28 */ - "REF_next", /* REGNODE_MAX +0x29 */ - "REF_next_fail", /* REGNODE_MAX +0x2a */ + "EVAL_postponed_A", /* REGNODE_MAX +0x05 */ + "EVAL_postponed_A_fail", /* REGNODE_MAX +0x06 */ + "EVAL_postponed_B", /* REGNODE_MAX +0x07 */ + "EVAL_postponed_B_fail", /* REGNODE_MAX +0x08 */ + "CURLYX_end", /* REGNODE_MAX +0x09 */ + "CURLYX_end_fail", /* REGNODE_MAX +0x0a */ + "WHILEM_A_pre", /* REGNODE_MAX +0x0b */ + "WHILEM_A_pre_fail", /* REGNODE_MAX +0x0c */ + "WHILEM_A_min", /* REGNODE_MAX +0x0d */ + "WHILEM_A_min_fail", /* REGNODE_MAX +0x0e */ + "WHILEM_A_max", /* REGNODE_MAX +0x0f */ + "WHILEM_A_max_fail", /* REGNODE_MAX +0x10 */ + "WHILEM_B_min", /* REGNODE_MAX +0x11 */ + "WHILEM_B_min_fail", /* REGNODE_MAX +0x12 */ + "WHILEM_B_max", /* REGNODE_MAX +0x13 */ + "WHILEM_B_max_fail", /* REGNODE_MAX +0x14 */ + "BRANCH_next", /* REGNODE_MAX +0x15 */ + "BRANCH_next_fail", /* REGNODE_MAX +0x16 */ + "CURLYM_A", /* REGNODE_MAX +0x17 */ + "CURLYM_A_fail", /* REGNODE_MAX +0x18 */ + "CURLYM_B", /* REGNODE_MAX +0x19 */ + "CURLYM_B_fail", /* REGNODE_MAX +0x1a */ + "IFMATCH_A", /* REGNODE_MAX +0x1b */ + "IFMATCH_A_fail", /* REGNODE_MAX +0x1c */ + "CURLY_B_min", /* REGNODE_MAX +0x1d */ + "CURLY_B_min_fail", /* REGNODE_MAX +0x1e */ + "CURLY_B_max", /* REGNODE_MAX +0x1f */ + "CURLY_B_max_fail", /* REGNODE_MAX +0x20 */ + "COMMIT_next", /* REGNODE_MAX +0x21 */ + "COMMIT_next_fail", /* REGNODE_MAX +0x22 */ + "MARKPOINT_next", /* REGNODE_MAX +0x23 */ + "MARKPOINT_next_fail", /* REGNODE_MAX +0x24 */ + "SKIP_next", /* REGNODE_MAX +0x25 */ + "SKIP_next_fail", /* REGNODE_MAX +0x26 */ + "CUTGROUP_next", /* REGNODE_MAX +0x27 */ + "CUTGROUP_next_fail", /* REGNODE_MAX +0x28 */ + "KEEPS_next", /* REGNODE_MAX +0x29 */ + "KEEPS_next_fail", /* REGNODE_MAX +0x2a */ + "REF_next", /* REGNODE_MAX +0x2b */ + "REF_next_fail", /* REGNODE_MAX +0x2c */ }); @@ -2567,266 +2585,280 @@ EXTCONST struct regnode_meta PL_regnode_info[] INIT( { .off_by_arg = 0 }, { - /* #116 state EVAL_postponed_AB */ + /* #116 state EVAL_postponed_A */ .type = EVAL, .arg_len = 0, .arg_len_varies = 0, .off_by_arg = 0 }, { - /* #117 state EVAL_postponed_AB_fail */ + /* #117 state EVAL_postponed_A_fail */ .type = EVAL, .arg_len = 0, .arg_len_varies = 0, .off_by_arg = 0 }, { - /* #118 state CURLYX_end */ + /* #118 state EVAL_postponed_B */ + .type = EVAL, + .arg_len = 0, + .arg_len_varies = 0, + .off_by_arg = 0 + }, + { + /* #119 state EVAL_postponed_B_fail */ + .type = EVAL, + .arg_len = 0, + .arg_len_varies = 0, + .off_by_arg = 0 + }, + { + /* #120 state CURLYX_end */ .type = CURLYX, .arg_len = 0, .arg_len_varies = 0, .off_by_arg = 0 }, { - /* #119 state CURLYX_end_fail */ + /* #121 state CURLYX_end_fail */ .type = CURLYX, .arg_len = 0, .arg_len_varies = 0, .off_by_arg = 0 }, { - /* #120 state WHILEM_A_pre */ + /* #122 state WHILEM_A_pre */ .type = WHILEM, .arg_len = 0, .arg_len_varies = 0, .off_by_arg = 0 }, { - /* #121 state WHILEM_A_pre_fail */ + /* #123 state WHILEM_A_pre_fail */ .type = WHILEM, .arg_len = 0, .arg_len_varies = 0, .off_by_arg = 0 }, { - /* #122 state WHILEM_A_min */ + /* #124 state WHILEM_A_min */ .type = WHILEM, .arg_len = 0, .arg_len_varies = 0, .off_by_arg = 0 }, { - /* #123 state WHILEM_A_min_fail */ + /* #125 state WHILEM_A_min_fail */ .type = WHILEM, .arg_len = 0, .arg_len_varies = 0, .off_by_arg = 0 }, { - /* #124 state WHILEM_A_max */ + /* #126 state WHILEM_A_max */ .type = WHILEM, .arg_len = 0, .arg_len_varies = 0, .off_by_arg = 0 }, { - /* #125 state WHILEM_A_max_fail */ + /* #127 state WHILEM_A_max_fail */ .type = WHILEM, .arg_len = 0, .arg_len_varies = 0, .off_by_arg = 0 }, { - /* #126 state WHILEM_B_min */ + /* #128 state WHILEM_B_min */ .type = WHILEM, .arg_len = 0, .arg_len_varies = 0, .off_by_arg = 0 }, { - /* #127 state WHILEM_B_min_fail */ + /* #129 state WHILEM_B_min_fail */ .type = WHILEM, .arg_len = 0, .arg_len_varies = 0, .off_by_arg = 0 }, { - /* #128 state WHILEM_B_max */ + /* #130 state WHILEM_B_max */ .type = WHILEM, .arg_len = 0, .arg_len_varies = 0, .off_by_arg = 0 }, { - /* #129 state WHILEM_B_max_fail */ + /* #131 state WHILEM_B_max_fail */ .type = WHILEM, .arg_len = 0, .arg_len_varies = 0, .off_by_arg = 0 }, { - /* #130 state BRANCH_next */ + /* #132 state BRANCH_next */ .type = BRANCH, .arg_len = 0, .arg_len_varies = 0, .off_by_arg = 0 }, { - /* #131 state BRANCH_next_fail */ + /* #133 state BRANCH_next_fail */ .type = BRANCH, .arg_len = 0, .arg_len_varies = 0, .off_by_arg = 0 }, { - /* #132 state CURLYM_A */ + /* #134 state CURLYM_A */ .type = CURLYM, .arg_len = 0, .arg_len_varies = 0, .off_by_arg = 0 }, { - /* #133 state CURLYM_A_fail */ + /* #135 state CURLYM_A_fail */ .type = CURLYM, .arg_len = 0, .arg_len_varies = 0, .off_by_arg = 0 }, { - /* #134 state CURLYM_B */ + /* #136 state CURLYM_B */ .type = CURLYM, .arg_len = 0, .arg_len_varies = 0, .off_by_arg = 0 }, { - /* #135 state CURLYM_B_fail */ + /* #137 state CURLYM_B_fail */ .type = CURLYM, .arg_len = 0, .arg_len_varies = 0, .off_by_arg = 0 }, { - /* #136 state IFMATCH_A */ + /* #138 state IFMATCH_A */ .type = IFMATCH, .arg_len = 0, .arg_len_varies = 0, .off_by_arg = 0 }, { - /* #137 state IFMATCH_A_fail */ + /* #139 state IFMATCH_A_fail */ .type = IFMATCH, .arg_len = 0, .arg_len_varies = 0, .off_by_arg = 0 }, { - /* #138 state CURLY_B_min */ + /* #140 state CURLY_B_min */ .type = CURLY, .arg_len = 0, .arg_len_varies = 0, .off_by_arg = 0 }, { - /* #139 state CURLY_B_min_fail */ + /* #141 state CURLY_B_min_fail */ .type = CURLY, .arg_len = 0, .arg_len_varies = 0, .off_by_arg = 0 }, { - /* #140 state CURLY_B_max */ + /* #142 state CURLY_B_max */ .type = CURLY, .arg_len = 0, .arg_len_varies = 0, .off_by_arg = 0 }, { - /* #141 state CURLY_B_max_fail */ + /* #143 state CURLY_B_max_fail */ .type = CURLY, .arg_len = 0, .arg_len_varies = 0, .off_by_arg = 0 }, { - /* #142 state COMMIT_next */ + /* #144 state COMMIT_next */ .type = COMMIT, .arg_len = 0, .arg_len_varies = 0, .off_by_arg = 0 }, { - /* #143 state COMMIT_next_fail */ + /* #145 state COMMIT_next_fail */ .type = COMMIT, .arg_len = 0, .arg_len_varies = 0, .off_by_arg = 0 }, { - /* #144 state MARKPOINT_next */ + /* #146 state MARKPOINT_next */ .type = MARKPOINT, .arg_len = 0, .arg_len_varies = 0, .off_by_arg = 0 }, { - /* #145 state MARKPOINT_next_fail */ + /* #147 state MARKPOINT_next_fail */ .type = MARKPOINT, .arg_len = 0, .arg_len_varies = 0, .off_by_arg = 0 }, { - /* #146 state SKIP_next */ + /* #148 state SKIP_next */ .type = SKIP, .arg_len = 0, .arg_len_varies = 0, .off_by_arg = 0 }, { - /* #147 state SKIP_next_fail */ + /* #149 state SKIP_next_fail */ .type = SKIP, .arg_len = 0, .arg_len_varies = 0, .off_by_arg = 0 }, { - /* #148 state CUTGROUP_next */ + /* #150 state CUTGROUP_next */ .type = CUTGROUP, .arg_len = 0, .arg_len_varies = 0, .off_by_arg = 0 }, { - /* #149 state CUTGROUP_next_fail */ + /* #151 state CUTGROUP_next_fail */ .type = CUTGROUP, .arg_len = 0, .arg_len_varies = 0, .off_by_arg = 0 }, { - /* #150 state KEEPS_next */ + /* #152 state KEEPS_next */ .type = KEEPS, .arg_len = 0, .arg_len_varies = 0, .off_by_arg = 0 }, { - /* #151 state KEEPS_next_fail */ + /* #153 state KEEPS_next_fail */ .type = KEEPS, .arg_len = 0, .arg_len_varies = 0, .off_by_arg = 0 }, { - /* #152 state REF_next */ + /* #154 state REF_next */ .type = REF, .arg_len = 0, .arg_len_varies = 0, .off_by_arg = 0 }, { - /* #153 state REF_next_fail */ + /* #155 state REF_next_fail */ .type = REF, .arg_len = 0, .arg_len_varies = 0,