X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/81714fb9c03d91d66b66cab6e899e81bf64a2ca7..f0cb210418521d8c2f9524d01cb9e27e0a1fd67f:/regnodes.h diff --git a/regnodes.h b/regnodes.h index 3030e04..79de061 100644 --- a/regnodes.h +++ b/regnodes.h @@ -6,8 +6,8 @@ /* Regops and State definitions */ -#define REGNODE_MAX 71 -#define REGMATCH_STATE_MAX 101 +#define REGNODE_MAX 90 +#define REGMATCH_STATE_MAX 130 #define END 0 /* 0000 End of program. */ #define SUCCEED 1 /* 0x01 Return from a subroutine, basically. */ @@ -50,8 +50,8 @@ #define STAR 38 /* 0x26 Match this (simple) thing 0 or more times. */ #define PLUS 39 /* 0x27 Match this (simple) thing 1 or more times. */ #define CURLY 40 /* 0x28 Match this simple thing {n,m} times. */ -#define CURLYN 41 /* 0x29 Match next-after-this simple thing */ -#define CURLYM 42 /* 0x2a Match this medium-complex thing {n,m} times. */ +#define CURLYN 41 /* 0x29 Capture next-after-this simple thing */ +#define CURLYM 42 /* 0x2a Capture this medium-complex thing {n,m} times. */ #define CURLYX 43 /* 0x2b Match this complex thing {n,m} times. */ #define WHILEM 44 /* 0x2c Do curly processing and see if rest matches. */ #define OPEN 45 /* 0x2d Mark this point in input as start of */ @@ -74,46 +74,73 @@ #define TRIEC 62 /* 0x3e Same as TRIE, but with embedded charclass data */ #define AHOCORASICK 63 /* 0x3f Aho Corasick stclass. flags==type */ #define AHOCORASICKC 64 /* 0x40 Same as AHOCORASICK, but with embedded charclass data */ -#define RECURSE 65 /* 0x41 recurse to paren arg1 at (signed) ofs arg2 */ -#define SRECURSE 66 /* 0x42 recurse to start of pattern */ +#define GOSUB 65 /* 0x41 recurse to paren arg1 at (signed) ofs arg2 */ +#define GOSTART 66 /* 0x42 recurse to start of pattern */ #define NREF 67 /* 0x43 Match some already matched string */ #define NREFF 68 /* 0x44 Match already matched string, folded */ #define NREFFL 69 /* 0x45 Match already matched string, folded in loc. */ -#define OPTIMIZED 70 /* 0x46 Placeholder for dump. */ -#define PSEUDO 71 /* 0x47 Pseudo opcode for internal use. */ - +#define NGROUPP 70 /* 0x46 Whether the group matched. */ +#define INSUBP 71 /* 0x47 Whether we are in a specific recurse. */ +#define DEFINEP 72 /* 0x48 Never execute directly. */ +#define ENDLIKE 73 /* 0x49 Used only for the type field of verbs */ +#define OPFAIL 74 /* 0x4a Same as (?!) */ +#define ACCEPT 75 /* 0x4b Accepts the current matched string. */ +#define VERB 76 /* 0x4c no-sv 1 Used only for the type field of verbs */ +#define PRUNE 77 /* 0x4d Pattern fails at this startpoint if no-backtracking through this */ +#define MARKPOINT 78 /* 0x4e Push the current location for rollback by cut. */ +#define SKIP 79 /* 0x4f On failure skip forward (to the mark) before retrying */ +#define COMMIT 80 /* 0x50 Pattern fails outright if backtracking through this */ +#define CUTGROUP 81 /* 0x51 On failure go to the next alternation in the group */ +#define KEEPS 82 /* 0x52 $& begins here. */ +#define LNBREAK 83 /* 0x53 generic newline pattern */ +#define VERTWS 84 /* 0x54 vertical whitespace (Perl 6) */ +#define NVERTWS 85 /* 0x55 not vertical whitespace (Perl 6) */ +#define HORIZWS 86 /* 0x56 horizontal whitespace (Perl 6) */ +#define NHORIZWS 87 /* 0x57 not horizontal whitespace (Perl 6) */ +#define FOLDCHAR 88 /* 0x58 codepoint with tricky case folding properties. */ +#define OPTIMIZED 89 /* 0x59 Placeholder for dump. */ +#define PSEUDO 90 /* 0x5a Pseudo opcode for internal use. */ /* ------------ States ------------- */ - -#define TRIE_next 72 /* 0x48 Regmatch state for TRIE */ -#define TRIE_next_fail 73 /* 0x49 Regmatch state for TRIE */ -#define EVAL_AB 74 /* 0x4a Regmatch state for EVAL */ -#define EVAL_AB_fail 75 /* 0x4b Regmatch state for EVAL */ -#define CURLYX_end 76 /* 0x4c Regmatch state for CURLYX */ -#define CURLYX_end_fail 77 /* 0x4d Regmatch state for CURLYX */ -#define WHILEM_A_pre 78 /* 0x4e Regmatch state for WHILEM */ -#define WHILEM_A_pre_fail 79 /* 0x4f Regmatch state for WHILEM */ -#define WHILEM_A_min 80 /* 0x50 Regmatch state for WHILEM */ -#define WHILEM_A_min_fail 81 /* 0x51 Regmatch state for WHILEM */ -#define WHILEM_A_max 82 /* 0x52 Regmatch state for WHILEM */ -#define WHILEM_A_max_fail 83 /* 0x53 Regmatch state for WHILEM */ -#define WHILEM_B_min 84 /* 0x54 Regmatch state for WHILEM */ -#define WHILEM_B_min_fail 85 /* 0x55 Regmatch state for WHILEM */ -#define WHILEM_B_max 86 /* 0x56 Regmatch state for WHILEM */ -#define WHILEM_B_max_fail 87 /* 0x57 Regmatch state for WHILEM */ -#define BRANCH_next 88 /* 0x58 Regmatch state for BRANCH */ -#define BRANCH_next_fail 89 /* 0x59 Regmatch state for BRANCH */ -#define CURLYM_A 90 /* 0x5a Regmatch state for CURLYM */ -#define CURLYM_A_fail 91 /* 0x5b Regmatch state for CURLYM */ -#define CURLYM_B 92 /* 0x5c Regmatch state for CURLYM */ -#define CURLYM_B_fail 93 /* 0x5d Regmatch state for CURLYM */ -#define IFMATCH_A 94 /* 0x5e Regmatch state for IFMATCH */ -#define IFMATCH_A_fail 95 /* 0x5f Regmatch state for IFMATCH */ -#define CURLY_B_min_known 96 /* 0x60 Regmatch state for CURLY */ -#define CURLY_B_min_known_fail 97 /* 0x61 Regmatch state for CURLY */ -#define CURLY_B_min 98 /* 0x62 Regmatch state for CURLY */ -#define CURLY_B_min_fail 99 /* 0x63 Regmatch state for CURLY */ -#define CURLY_B_max 100 /* 0x64 Regmatch state for CURLY */ -#define CURLY_B_max_fail 101 /* 0x65 Regmatch state for CURLY */ +#define TRIE_next (REGNODE_MAX + 1) /* state for TRIE */ +#define TRIE_next_fail (REGNODE_MAX + 2) /* state for TRIE */ +#define EVAL_AB (REGNODE_MAX + 3) /* state for EVAL */ +#define EVAL_AB_fail (REGNODE_MAX + 4) /* state for EVAL */ +#define CURLYX_end (REGNODE_MAX + 5) /* state for CURLYX */ +#define CURLYX_end_fail (REGNODE_MAX + 6) /* state for CURLYX */ +#define WHILEM_A_pre (REGNODE_MAX + 7) /* state for WHILEM */ +#define WHILEM_A_pre_fail (REGNODE_MAX + 8) /* state for WHILEM */ +#define WHILEM_A_min (REGNODE_MAX + 9) /* state for WHILEM */ +#define WHILEM_A_min_fail (REGNODE_MAX + 10) /* state for WHILEM */ +#define WHILEM_A_max (REGNODE_MAX + 11) /* state for WHILEM */ +#define WHILEM_A_max_fail (REGNODE_MAX + 12) /* state for WHILEM */ +#define WHILEM_B_min (REGNODE_MAX + 13) /* state for WHILEM */ +#define WHILEM_B_min_fail (REGNODE_MAX + 14) /* state for WHILEM */ +#define WHILEM_B_max (REGNODE_MAX + 15) /* state for WHILEM */ +#define WHILEM_B_max_fail (REGNODE_MAX + 16) /* state for WHILEM */ +#define BRANCH_next (REGNODE_MAX + 17) /* state for BRANCH */ +#define BRANCH_next_fail (REGNODE_MAX + 18) /* state for BRANCH */ +#define CURLYM_A (REGNODE_MAX + 19) /* state for CURLYM */ +#define CURLYM_A_fail (REGNODE_MAX + 20) /* state for CURLYM */ +#define CURLYM_B (REGNODE_MAX + 21) /* state for CURLYM */ +#define CURLYM_B_fail (REGNODE_MAX + 22) /* state for CURLYM */ +#define IFMATCH_A (REGNODE_MAX + 23) /* state for IFMATCH */ +#define IFMATCH_A_fail (REGNODE_MAX + 24) /* state for IFMATCH */ +#define CURLY_B_min_known (REGNODE_MAX + 25) /* state for CURLY */ +#define CURLY_B_min_known_fail (REGNODE_MAX + 26) /* state for CURLY */ +#define CURLY_B_min (REGNODE_MAX + 27) /* state for CURLY */ +#define CURLY_B_min_fail (REGNODE_MAX + 28) /* state for CURLY */ +#define CURLY_B_max (REGNODE_MAX + 29) /* state for CURLY */ +#define CURLY_B_max_fail (REGNODE_MAX + 30) /* state for CURLY */ +#define COMMIT_next (REGNODE_MAX + 31) /* state for COMMIT */ +#define COMMIT_next_fail (REGNODE_MAX + 32) /* state for COMMIT */ +#define MARKPOINT_next (REGNODE_MAX + 33) /* state for MARKPOINT */ +#define MARKPOINT_next_fail (REGNODE_MAX + 34) /* state for MARKPOINT */ +#define SKIP_next (REGNODE_MAX + 35) /* state for SKIP */ +#define SKIP_next_fail (REGNODE_MAX + 36) /* state for SKIP */ +#define CUTGROUP_next (REGNODE_MAX + 37) /* state for CUTGROUP */ +#define CUTGROUP_next_fail (REGNODE_MAX + 38) /* state for CUTGROUP */ +#define KEEPS_next (REGNODE_MAX + 39) /* state for KEEPS */ +#define KEEPS_next_fail (REGNODE_MAX + 40) /* state for KEEPS */ /* PL_regkind[] What type of regop or state is this. */ @@ -121,109 +148,138 @@ EXTCONST U8 PL_regkind[]; #else EXTCONST U8 PL_regkind[] = { - END, /* END */ - END, /* SUCCEED */ - BOL, /* BOL */ - BOL, /* MBOL */ - BOL, /* SBOL */ - EOL, /* EOS */ - EOL, /* EOL */ - EOL, /* MEOL */ - EOL, /* SEOL */ - BOUND, /* BOUND */ - BOUND, /* BOUNDL */ - NBOUND, /* NBOUND */ - NBOUND, /* NBOUNDL */ - GPOS, /* GPOS */ - REG_ANY, /* REG_ANY */ - REG_ANY, /* SANY */ - REG_ANY, /* CANY */ - ANYOF, /* ANYOF */ - ALNUM, /* ALNUM */ - ALNUM, /* ALNUML */ - NALNUM, /* NALNUM */ - NALNUM, /* NALNUML */ - SPACE, /* SPACE */ - SPACE, /* SPACEL */ - NSPACE, /* NSPACE */ - NSPACE, /* NSPACEL */ - DIGIT, /* DIGIT */ - DIGIT, /* DIGITL */ - NDIGIT, /* NDIGIT */ - NDIGIT, /* NDIGITL */ - CLUMP, /* CLUMP */ - BRANCH, /* BRANCH */ - BACK, /* BACK */ - EXACT, /* EXACT */ - EXACT, /* EXACTF */ - EXACT, /* EXACTFL */ - NOTHING, /* NOTHING */ - NOTHING, /* TAIL */ - STAR, /* STAR */ - PLUS, /* PLUS */ - CURLY, /* CURLY */ - CURLY, /* CURLYN */ - CURLY, /* CURLYM */ - CURLY, /* CURLYX */ - WHILEM, /* WHILEM */ - OPEN, /* OPEN */ - CLOSE, /* CLOSE */ - REF, /* REF */ - REF, /* REFF */ - REF, /* REFFL */ - BRANCHJ, /* IFMATCH */ - BRANCHJ, /* UNLESSM */ - BRANCHJ, /* SUSPEND */ - BRANCHJ, /* IFTHEN */ - GROUPP, /* GROUPP */ - LONGJMP, /* LONGJMP */ - BRANCHJ, /* BRANCHJ */ - EVAL, /* EVAL */ - MINMOD, /* MINMOD */ - LOGICAL, /* LOGICAL */ - BRANCHJ, /* RENUM */ - TRIE, /* TRIE */ - TRIE, /* TRIEC */ - TRIE, /* AHOCORASICK */ - TRIE, /* AHOCORASICKC */ - RECURSE, /* RECURSE */ - RECURSE, /* SRECURSE */ - NREF, /* NREF */ - NREF, /* NREFF */ - NREF, /* NREFFL */ - NOTHING, /* OPTIMIZED */ - PSEUDO, /* PSEUDO */ + END, /* END */ + END, /* SUCCEED */ + BOL, /* BOL */ + BOL, /* MBOL */ + BOL, /* SBOL */ + EOL, /* EOS */ + EOL, /* EOL */ + EOL, /* MEOL */ + EOL, /* SEOL */ + BOUND, /* BOUND */ + BOUND, /* BOUNDL */ + NBOUND, /* NBOUND */ + NBOUND, /* NBOUNDL */ + GPOS, /* GPOS */ + REG_ANY, /* REG_ANY */ + REG_ANY, /* SANY */ + REG_ANY, /* CANY */ + ANYOF, /* ANYOF */ + ALNUM, /* ALNUM */ + ALNUM, /* ALNUML */ + NALNUM, /* NALNUM */ + NALNUM, /* NALNUML */ + SPACE, /* SPACE */ + SPACE, /* SPACEL */ + NSPACE, /* NSPACE */ + NSPACE, /* NSPACEL */ + DIGIT, /* DIGIT */ + DIGIT, /* DIGITL */ + NDIGIT, /* NDIGIT */ + NDIGIT, /* NDIGITL */ + CLUMP, /* CLUMP */ + BRANCH, /* BRANCH */ + BACK, /* BACK */ + EXACT, /* EXACT */ + EXACT, /* EXACTF */ + EXACT, /* EXACTFL */ + NOTHING, /* NOTHING */ + NOTHING, /* TAIL */ + STAR, /* STAR */ + PLUS, /* PLUS */ + CURLY, /* CURLY */ + CURLY, /* CURLYN */ + CURLY, /* CURLYM */ + CURLY, /* CURLYX */ + WHILEM, /* WHILEM */ + OPEN, /* OPEN */ + CLOSE, /* CLOSE */ + REF, /* REF */ + REF, /* REFF */ + REF, /* REFFL */ + BRANCHJ, /* IFMATCH */ + BRANCHJ, /* UNLESSM */ + BRANCHJ, /* SUSPEND */ + BRANCHJ, /* IFTHEN */ + GROUPP, /* GROUPP */ + LONGJMP, /* LONGJMP */ + BRANCHJ, /* BRANCHJ */ + EVAL, /* EVAL */ + MINMOD, /* MINMOD */ + LOGICAL, /* LOGICAL */ + BRANCHJ, /* RENUM */ + TRIE, /* TRIE */ + TRIE, /* TRIEC */ + TRIE, /* AHOCORASICK */ + TRIE, /* AHOCORASICKC */ + GOSUB, /* GOSUB */ + GOSTART, /* GOSTART */ + REF, /* NREF */ + REF, /* NREFF */ + REF, /* NREFFL */ + NGROUPP, /* NGROUPP */ + INSUBP, /* INSUBP */ + DEFINEP, /* DEFINEP */ + ENDLIKE, /* ENDLIKE */ + ENDLIKE, /* OPFAIL */ + ENDLIKE, /* ACCEPT */ + VERB, /* VERB */ + VERB, /* PRUNE */ + VERB, /* MARKPOINT */ + VERB, /* SKIP */ + VERB, /* COMMIT */ + VERB, /* CUTGROUP */ + KEEPS, /* KEEPS */ + LNBREAK, /* LNBREAK */ + VERTWS, /* VERTWS */ + NVERTWS, /* NVERTWS */ + HORIZWS, /* HORIZWS */ + NHORIZWS, /* NHORIZWS */ + FOLDCHAR, /* FOLDCHAR */ + NOTHING, /* OPTIMIZED */ + PSEUDO, /* PSEUDO */ /* ------------ States ------------- */ - TRIE, /* TRIE_next */ - TRIE, /* TRIE_next_fail */ - EVAL, /* EVAL_AB */ - EVAL, /* EVAL_AB_fail */ - CURLYX, /* CURLYX_end */ - CURLYX, /* CURLYX_end_fail */ - WHILEM, /* WHILEM_A_pre */ - WHILEM, /* WHILEM_A_pre_fail */ - WHILEM, /* WHILEM_A_min */ - WHILEM, /* WHILEM_A_min_fail */ - WHILEM, /* WHILEM_A_max */ - WHILEM, /* WHILEM_A_max_fail */ - WHILEM, /* WHILEM_B_min */ - WHILEM, /* WHILEM_B_min_fail */ - WHILEM, /* WHILEM_B_max */ - WHILEM, /* WHILEM_B_max_fail */ - BRANCH, /* BRANCH_next */ - BRANCH, /* BRANCH_next_fail */ - CURLYM, /* CURLYM_A */ - CURLYM, /* CURLYM_A_fail */ - CURLYM, /* CURLYM_B */ - CURLYM, /* CURLYM_B_fail */ - IFMATCH, /* IFMATCH_A */ - IFMATCH, /* IFMATCH_A_fail */ - CURLY, /* CURLY_B_min_known */ - CURLY, /* CURLY_B_min_known_fail */ - CURLY, /* CURLY_B_min */ - CURLY, /* CURLY_B_min_fail */ - CURLY, /* CURLY_B_max */ - CURLY, /* CURLY_B_max_fail */ + TRIE, /* TRIE_next */ + TRIE, /* TRIE_next_fail */ + EVAL, /* EVAL_AB */ + EVAL, /* EVAL_AB_fail */ + CURLYX, /* CURLYX_end */ + CURLYX, /* CURLYX_end_fail */ + WHILEM, /* WHILEM_A_pre */ + WHILEM, /* WHILEM_A_pre_fail */ + WHILEM, /* WHILEM_A_min */ + WHILEM, /* WHILEM_A_min_fail */ + WHILEM, /* WHILEM_A_max */ + WHILEM, /* WHILEM_A_max_fail */ + WHILEM, /* WHILEM_B_min */ + WHILEM, /* WHILEM_B_min_fail */ + WHILEM, /* WHILEM_B_max */ + WHILEM, /* WHILEM_B_max_fail */ + BRANCH, /* BRANCH_next */ + BRANCH, /* BRANCH_next_fail */ + CURLYM, /* CURLYM_A */ + CURLYM, /* CURLYM_A_fail */ + CURLYM, /* CURLYM_B */ + CURLYM, /* CURLYM_B_fail */ + IFMATCH, /* IFMATCH_A */ + IFMATCH, /* IFMATCH_A_fail */ + CURLY, /* CURLY_B_min_known */ + CURLY, /* CURLY_B_min_known_fail */ + CURLY, /* CURLY_B_min */ + CURLY, /* CURLY_B_min_fail */ + CURLY, /* CURLY_B_max */ + CURLY, /* CURLY_B_max_fail */ + COMMIT, /* COMMIT_next */ + COMMIT, /* COMMIT_next_fail */ + MARKPOINT, /* MARKPOINT_next */ + MARKPOINT, /* MARKPOINT_next_fail */ + SKIP, /* SKIP_next */ + SKIP, /* SKIP_next_fail */ + CUTGROUP, /* CUTGROUP_next */ + CUTGROUP, /* CUTGROUP_next_fail */ + KEEPS, /* KEEPS_next */ + KEEPS, /* KEEPS_next_fail */ }; #endif @@ -296,11 +352,30 @@ static const U8 regarglen[] = { EXTRA_SIZE(struct regnode_charclass), /* TRIEC */ EXTRA_SIZE(struct regnode_1), /* AHOCORASICK */ EXTRA_SIZE(struct regnode_charclass), /* AHOCORASICKC */ - EXTRA_SIZE(struct regnode_2L), /* RECURSE */ - 0, /* SRECURSE */ + EXTRA_SIZE(struct regnode_2L), /* GOSUB */ + 0, /* GOSTART */ EXTRA_SIZE(struct regnode_1), /* NREF */ EXTRA_SIZE(struct regnode_1), /* NREFF */ EXTRA_SIZE(struct regnode_1), /* NREFFL */ + EXTRA_SIZE(struct regnode_1), /* NGROUPP */ + EXTRA_SIZE(struct regnode_1), /* INSUBP */ + EXTRA_SIZE(struct regnode_1), /* DEFINEP */ + 0, /* ENDLIKE */ + 0, /* OPFAIL */ + EXTRA_SIZE(struct regnode_1), /* ACCEPT */ + 0, /* VERB */ + EXTRA_SIZE(struct regnode_1), /* PRUNE */ + EXTRA_SIZE(struct regnode_1), /* MARKPOINT */ + EXTRA_SIZE(struct regnode_1), /* SKIP */ + EXTRA_SIZE(struct regnode_1), /* COMMIT */ + EXTRA_SIZE(struct regnode_1), /* CUTGROUP */ + 0, /* KEEPS */ + 0, /* LNBREAK */ + 0, /* VERTWS */ + 0, /* NVERTWS */ + 0, /* HORIZWS */ + 0, /* NHORIZWS */ + EXTRA_SIZE(struct regnode_1), /* FOLDCHAR */ 0, /* OPTIMIZED */ 0, /* PSEUDO */ }; @@ -373,19 +448,42 @@ static const char reg_off_by_arg[] = { 0, /* TRIEC */ 0, /* AHOCORASICK */ 0, /* AHOCORASICKC */ - 0, /* RECURSE */ - 0, /* SRECURSE */ + 0, /* GOSUB */ + 0, /* GOSTART */ 0, /* NREF */ 0, /* NREFF */ 0, /* NREFFL */ + 0, /* NGROUPP */ + 0, /* INSUBP */ + 0, /* DEFINEP */ + 0, /* ENDLIKE */ + 0, /* OPFAIL */ + 0, /* ACCEPT */ + 0, /* VERB */ + 0, /* PRUNE */ + 0, /* MARKPOINT */ + 0, /* SKIP */ + 0, /* COMMIT */ + 0, /* CUTGROUP */ + 0, /* KEEPS */ + 0, /* LNBREAK */ + 0, /* VERTWS */ + 0, /* NVERTWS */ + 0, /* HORIZWS */ + 0, /* NHORIZWS */ + 0, /* FOLDCHAR */ 0, /* OPTIMIZED */ 0, /* PSEUDO */ }; +#endif /* REG_COMP_C */ + /* reg_name[] - Opcode/state names in string form, for debugging */ -#ifdef DEBUGGING -const char * reg_name[] = { +#ifndef DOINIT +EXTCONST char * PL_reg_name[]; +#else +EXTCONST char * const PL_reg_name[] = { "END", /* 0000 */ "SUCCEED", /* 0x01 */ "BOL", /* 0x02 */ @@ -451,50 +549,116 @@ const char * reg_name[] = { "TRIEC", /* 0x3e */ "AHOCORASICK", /* 0x3f */ "AHOCORASICKC", /* 0x40 */ - "RECURSE", /* 0x41 */ - "SRECURSE", /* 0x42 */ + "GOSUB", /* 0x41 */ + "GOSTART", /* 0x42 */ "NREF", /* 0x43 */ "NREFF", /* 0x44 */ "NREFFL", /* 0x45 */ - "OPTIMIZED", /* 0x46 */ - "PSEUDO", /* 0x47 */ + "NGROUPP", /* 0x46 */ + "INSUBP", /* 0x47 */ + "DEFINEP", /* 0x48 */ + "ENDLIKE", /* 0x49 */ + "OPFAIL", /* 0x4a */ + "ACCEPT", /* 0x4b */ + "VERB", /* 0x4c */ + "PRUNE", /* 0x4d */ + "MARKPOINT", /* 0x4e */ + "SKIP", /* 0x4f */ + "COMMIT", /* 0x50 */ + "CUTGROUP", /* 0x51 */ + "KEEPS", /* 0x52 */ + "LNBREAK", /* 0x53 */ + "VERTWS", /* 0x54 */ + "NVERTWS", /* 0x55 */ + "HORIZWS", /* 0x56 */ + "NHORIZWS", /* 0x57 */ + "FOLDCHAR", /* 0x58 */ + "OPTIMIZED", /* 0x59 */ + "PSEUDO", /* 0x5a */ /* ------------ States ------------- */ - "TRIE_next", /* 0x48 */ - "TRIE_next_fail", /* 0x49 */ - "EVAL_AB", /* 0x4a */ - "EVAL_AB_fail", /* 0x4b */ - "CURLYX_end", /* 0x4c */ - "CURLYX_end_fail", /* 0x4d */ - "WHILEM_A_pre", /* 0x4e */ - "WHILEM_A_pre_fail", /* 0x4f */ - "WHILEM_A_min", /* 0x50 */ - "WHILEM_A_min_fail", /* 0x51 */ - "WHILEM_A_max", /* 0x52 */ - "WHILEM_A_max_fail", /* 0x53 */ - "WHILEM_B_min", /* 0x54 */ - "WHILEM_B_min_fail", /* 0x55 */ - "WHILEM_B_max", /* 0x56 */ - "WHILEM_B_max_fail", /* 0x57 */ - "BRANCH_next", /* 0x58 */ - "BRANCH_next_fail", /* 0x59 */ - "CURLYM_A", /* 0x5a */ - "CURLYM_A_fail", /* 0x5b */ - "CURLYM_B", /* 0x5c */ - "CURLYM_B_fail", /* 0x5d */ - "IFMATCH_A", /* 0x5e */ - "IFMATCH_A_fail", /* 0x5f */ - "CURLY_B_min_known", /* 0x60 */ - "CURLY_B_min_known_fail", /* 0x61 */ - "CURLY_B_min", /* 0x62 */ - "CURLY_B_min_fail", /* 0x63 */ - "CURLY_B_max", /* 0x64 */ - "CURLY_B_max_fail", /* 0x65 */ + "TRIE_next", /* REGNODE_MAX +0x01 */ + "TRIE_next_fail", /* REGNODE_MAX +0x02 */ + "EVAL_AB", /* REGNODE_MAX +0x03 */ + "EVAL_AB_fail", /* REGNODE_MAX +0x04 */ + "CURLYX_end", /* REGNODE_MAX +0x05 */ + "CURLYX_end_fail", /* REGNODE_MAX +0x06 */ + "WHILEM_A_pre", /* REGNODE_MAX +0x07 */ + "WHILEM_A_pre_fail", /* REGNODE_MAX +0x08 */ + "WHILEM_A_min", /* REGNODE_MAX +0x09 */ + "WHILEM_A_min_fail", /* REGNODE_MAX +0x0a */ + "WHILEM_A_max", /* REGNODE_MAX +0x0b */ + "WHILEM_A_max_fail", /* REGNODE_MAX +0x0c */ + "WHILEM_B_min", /* REGNODE_MAX +0x0d */ + "WHILEM_B_min_fail", /* REGNODE_MAX +0x0e */ + "WHILEM_B_max", /* REGNODE_MAX +0x0f */ + "WHILEM_B_max_fail", /* REGNODE_MAX +0x10 */ + "BRANCH_next", /* REGNODE_MAX +0x11 */ + "BRANCH_next_fail", /* REGNODE_MAX +0x12 */ + "CURLYM_A", /* REGNODE_MAX +0x13 */ + "CURLYM_A_fail", /* REGNODE_MAX +0x14 */ + "CURLYM_B", /* REGNODE_MAX +0x15 */ + "CURLYM_B_fail", /* REGNODE_MAX +0x16 */ + "IFMATCH_A", /* REGNODE_MAX +0x17 */ + "IFMATCH_A_fail", /* REGNODE_MAX +0x18 */ + "CURLY_B_min_known", /* REGNODE_MAX +0x19 */ + "CURLY_B_min_known_fail", /* REGNODE_MAX +0x1a */ + "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 */ }; -#endif /* DEBUGGING */ +#endif /* DOINIT */ + +/* PL_reg_extflags_name[] - Opcode/state names in string form, for debugging */ + +#ifndef DOINIT +EXTCONST char * PL_reg_extflags_name[]; #else -#ifdef DEBUGGING -extern const char * reg_name[]; -#endif -#endif /* REG_COMP_C */ +EXTCONST char * const PL_reg_extflags_name[] = { + /* Bits in extflags defined: 11111111111101111111111100111111 */ + "MULTILINE", /* 0x00000001 */ + "SINGLELINE", /* 0x00000002 */ + "FOLD", /* 0x00000004 */ + "EXTENDED", /* 0x00000008 */ + "KEEPCOPY", /* 0x00000010 */ + "LOCALE", /* 0x00000020 */ + "UNUSED_BIT_6", /* 0x00000040 */ + "UNUSED_BIT_7", /* 0x00000080 */ + "ANCH_BOL", /* 0x00000100 */ + "ANCH_MBOL", /* 0x00000200 */ + "ANCH_SBOL", /* 0x00000400 */ + "ANCH_GPOS", /* 0x00000800 */ + "GPOS_SEEN", /* 0x00001000 */ + "GPOS_FLOAT", /* 0x00002000 */ + "LOOKBEHIND_SEEN", /* 0x00004000 */ + "EVAL_SEEN", /* 0x00008000 */ + "CANY_SEEN", /* 0x00010000 */ + "NOSCAN", /* 0x00020000 */ + "CHECK_ALL", /* 0x00040000 */ + "UNUSED_BIT_19", /* 0x00080000 */ + "MATCH_UTF8", /* 0x00100000 */ + "USE_INTUIT_NOML", /* 0x00200000 */ + "USE_INTUIT_ML", /* 0x00400000 */ + "INTUIT_TAIL", /* 0x00800000 */ + "SPLIT", /* 0x01000000 */ + "COPY_DONE", /* 0x02000000 */ + "TAINTED_SEEN", /* 0x04000000 */ + "TAINTED", /* 0x08000000 */ + "START_ONLY", /* 0x10000000 */ + "SKIPWHITE", /* 0x20000000 */ + "WHITE", /* 0x40000000 */ + "NULL", /* 0x80000000 */ +}; +#endif /* DOINIT */ /* ex: set ro: */