This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Free up bit for regex ANYOF nodes
[perl5.git] / pod / perldebguts.pod
index 526124e..60538df 100644 (file)
@@ -556,56 +556,72 @@ will be lost.
 
  # Exit points
 
- END             no         End of program.
- SUCCEED         no         Return from a subroutine, basically.
+ END                          no         End of program.
+ SUCCEED                      no         Return from a subroutine,
+                                         basically.
 
  # Anchors:
 
- BOL             no         Match "" at beginning of line.
- MBOL            no         Same, assuming multiline.
- SBOL            no         Same, assuming singleline.
- EOS             no         Match "" at end of string.
- EOL             no         Match "" at end of line.
- MEOL            no         Same, assuming multiline.
- SEOL            no         Same, assuming singleline.
- BOUND           no         Match "" at any word boundary using native
-                            charset semantics for non-utf8
- BOUNDL          no         Match "" at any locale word boundary
- BOUNDU          no         Match "" at any word boundary using Unicode
-                            semantics
- BOUNDA          no         Match "" at any word boundary using ASCII
-                            semantics
- NBOUND          no         Match "" at any word non-boundary using
-                            native charset semantics for non-utf8
- NBOUNDL         no         Match "" at any locale word non-boundary
- NBOUNDU         no         Match "" at any word non-boundary using
-                            Unicode semantics
- NBOUNDA         no         Match "" at any word non-boundary using
-                            ASCII semantics
- GPOS            no         Matches where last m//g left off.
+ BOL                          no         Match "" at beginning of line.
+ MBOL                         no         Same, assuming multiline.
+ SBOL                         no         Same, assuming singleline.
+ EOS                          no         Match "" at end of string.
+ EOL                          no         Match "" at end of line.
+ MEOL                         no         Same, assuming multiline.
+ SEOL                         no         Same, assuming singleline.
+ BOUND                        no         Match "" at any word boundary
+                                         using native charset semantics
+                                         for non-utf8
+ BOUNDL                       no         Match "" at any locale word
+                                         boundary
+ BOUNDU                       no         Match "" at any word boundary
+                                         using Unicode semantics
+ BOUNDA                       no         Match "" at any word boundary
+                                         using ASCII semantics
+ NBOUND                       no         Match "" at any word non-
+                                         boundary using native charset
+                                         semantics for non-utf8
+ NBOUNDL                      no         Match "" at any locale word non-
+                                         boundary
+ NBOUNDU                      no         Match "" at any word non-
+                                         boundary using Unicode
+                                         semantics
+ NBOUNDA                      no         Match "" at any word non-
+                                         boundary using ASCII semantics
+ GPOS                         no         Matches where last m//g left
+                                         off.
 
  # [Special] alternatives:
 
- REG_ANY         no         Match any one character (except newline).
- SANY            no         Match any one character.
- CANY            no         Match any one byte.
- ANYOF           sv         Match character in (or not in) this class,
-                            single char match only
-
- POSIXD          none       Some [[:class:]] under /d; the FLAGS field
-                            gives which one
- POSIXL          none       Some [[:class:]] under /l; the FLAGS field
-                            gives which one
- POSIXU          none       Some [[:class:]] under /u; the FLAGS field
-                            gives which one
- POSIXA          none       Some [[:class:]] under /a; the FLAGS field
-                            gives which one
- NPOSIXD         none       complement of POSIXD, [[:^class:]]
- NPOSIXL         none       complement of POSIXL, [[:^class:]]
- NPOSIXU         none       complement of POSIXU, [[:^class:]]
- NPOSIXA         none       complement of POSIXA, [[:^class:]]
-
- CLUMP           no         Match any extended grapheme cluster sequence
+ REG_ANY                      no         Match any one character (except
+                                         newline).
+ SANY                         no         Match any one character.
+ CANY                         no         Match any one byte.
+ ANYOF                        sv         Match character in (or not in)
+                                         this class, single char match
+                                         only
+ ANYOF_NON_UTF8_NON_ASCII_ALL sv         like ANYOF, also matches any
+                                         U+80 - U+FF when not in UTF-8
+
+ POSIXD                       none       Some [[:class:]] under /d; the
+                                         FLAGS field gives which one
+ POSIXL                       none       Some [[:class:]] under /l; the
+                                         FLAGS field gives which one
+ POSIXU                       none       Some [[:class:]] under /u; the
+                                         FLAGS field gives which one
+ POSIXA                       none       Some [[:class:]] under /a; the
+                                         FLAGS field gives which one
+ NPOSIXD                      none       complement of POSIXD,
+                                         [[:^class:]]
+ NPOSIXL                      none       complement of POSIXL,
+                                         [[:^class:]]
+ NPOSIXU                      none       complement of POSIXU,
+                                         [[:^class:]]
+ NPOSIXA                      none       complement of POSIXA,
+                                         [[:^class:]]
+
+ CLUMP                        no         Match any extended grapheme
+                                         cluster sequence
 
  # Alternation
 
@@ -618,40 +634,49 @@ will be lost.
  #               pointer of each individual branch points; each branch
  #               starts with the operand node of a BRANCH node.
  #
- BRANCH          node       Match this alternative, or the next...
+ BRANCH                       node       Match this alternative, or the
+                                         next...
 
  # Back pointer
 
  # BACK          Normal "next" pointers all implicitly point forward;
  #               BACK exists to make loop structures possible.
  # not used
- BACK            no         Match "", "next" ptr points backward.
+ BACK                         no         Match "", "next" ptr points
+                                         backward.
 
  # Literals
 
- EXACT           str        Match this string (preceded by length).
- EXACTF          str        Match this non-UTF-8 string (not guaranteed
-                            to be folded) using /id rules (w/len).
- EXACTFL         str        Match this string (not guaranteed to be
-                            folded) using /il rules (w/len).
- EXACTFU         str        Match this string (folded iff in UTF-8,
-                            length in folding doesn't change if not in
-                            UTF-8) using /iu rules (w/len).
- EXACTFA         str        Match this string (not guaranteed to be
-                            folded) using /iaa rules (w/len).
- EXACTFU_SS      str        Match this string (folded iff in UTF-8,
-                            length in folding may change even if not in
-                            UTF-8) using /iu rules (w/len).
- EXACTFA_NO_TRIE str        Match this string (which is not trie-able;
-                            not guaranteed to be folded) using /iaa
-                            rules (w/len).
+ EXACT                        str        Match this string (preceded by
+                                         length).
+ EXACTF                       str        Match this non-UTF-8 string
+                                         (not guaranteed to be folded)
+                                         using /id rules (w/len).
+ EXACTFL                      str        Match this string (not
+                                         guaranteed to be folded) using
+                                         /il rules (w/len).
+ EXACTFU                      str        Match this string (folded iff
+                                         in UTF-8, length in folding
+                                         doesn't change if not in UTF-8)
+                                         using /iu rules (w/len).
+ EXACTFA                      str        Match this string (not
+                                         guaranteed to be folded) using
+                                         /iaa rules (w/len).
+ EXACTFU_SS                   str        Match this string (folded iff
+                                         in UTF-8, length in folding may
+                                         change even if not in UTF-8)
+                                         using /iu rules (w/len).
+ EXACTFA_NO_TRIE              str        Match this string (which is not
+                                         trie-able; not guaranteed to be
+                                         folded) using /iaa rules
+                                         (w/len).
 
  # Do nothing types
 
- NOTHING         no         Match empty string.
+ NOTHING                      no         Match empty string.
  # A variant of above which delimits a group, thus stops optimizations
- TAIL            no         Match empty string. Can jump here from
-                            outside.
+ TAIL                         no         Match empty string. Can jump
+                                         here from outside.
 
  # Loops
 
@@ -660,68 +685,89 @@ will be lost.
  #               (one character per match) are implemented with STAR
  #               and PLUS for speed and to minimize recursive plunges.
  #
- STAR            node       Match this (simple) thing 0 or more times.
- PLUS            node       Match this (simple) thing 1 or more times.
-
- CURLY           sv 2       Match this simple thing {n,m} times.
- CURLYN          no 2       Capture next-after-this simple thing
- CURLYM          no 2       Capture this medium-complex thing {n,m}
-                            times.
- CURLYX          sv 2       Match this complex thing {n,m} times.
+ STAR                         node       Match this (simple) thing 0 or
+                                         more times.
+ PLUS                         node       Match this (simple) thing 1 or
+                                         more times.
+
+ CURLY                        sv 2       Match this simple thing {n,m}
+                                         times.
+ CURLYN                       no 2       Capture next-after-this simple
+                                         thing
+ CURLYM                       no 2       Capture this medium-complex
+                                         thing {n,m} times.
+ CURLYX                       sv 2       Match this complex thing {n,m}
+                                         times.
 
  # This terminator creates a loop structure for CURLYX
- WHILEM          no         Do curly processing and see if rest matches.
+ WHILEM                       no         Do curly processing and see if
+                                         rest matches.
 
  # Buffer related
 
  # OPEN,CLOSE,GROUPP     ...are numbered at compile time.
- OPEN            num 1      Mark this point in input as start of #n.
- CLOSE           num 1      Analogous to OPEN.
-
- REF             num 1      Match some already matched string
- REFF            num 1      Match already matched string, folded using
-                            native charset semantics for non-utf8
- REFFL           num 1      Match already matched string, folded in loc.
- REFFU           num 1      Match already matched string, folded using
-                            unicode semantics for non-utf8
- REFFA           num 1      Match already matched string, folded using
-                            unicode semantics for non-utf8, no mixing
-                            ASCII, non-ASCII
+ OPEN                         num 1      Mark this point in input as
+                                         start of #n.
+ CLOSE                        num 1      Analogous to OPEN.
+
+ REF                          num 1      Match some already matched
+                                         string
+ REFF                         num 1      Match already matched string,
+                                         folded using native charset
+                                         semantics for non-utf8
+ REFFL                        num 1      Match already matched string,
+                                         folded in loc.
+ REFFU                        num 1      Match already matched string,
+                                         folded using unicode semantics
+                                         for non-utf8
+ REFFA                        num 1      Match already matched string,
+                                         folded using unicode semantics
+                                         for non-utf8, no mixing ASCII,
+                                         non-ASCII
 
  # Named references.  Code in regcomp.c assumes that these all are after
  # the numbered references
- NREF            no-sv 1    Match some already matched string
- NREFF           no-sv 1    Match already matched string, folded using
-                            native charset semantics for non-utf8
- NREFFL          no-sv 1    Match already matched string, folded in loc.
- NREFFU          num 1      Match already matched string, folded using
-                            unicode semantics for non-utf8
- NREFFA          num 1      Match already matched string, folded using
-                            unicode semantics for non-utf8, no mixing
-                            ASCII, non-ASCII
-
- IFMATCH         off 1 2    Succeeds if the following matches.
- UNLESSM         off 1 2    Fails if the following matches.
- SUSPEND         off 1 1    "Independent" sub-RE.
- IFTHEN          off 1 1    Switch, should be preceded by switcher.
- GROUPP          num 1      Whether the group matched.
+ NREF                         no-sv 1    Match some already matched
+                                         string
+ NREFF                        no-sv 1    Match already matched string,
+                                         folded using native charset
+                                         semantics for non-utf8
+ NREFFL                       no-sv 1    Match already matched string,
+                                         folded in loc.
+ NREFFU                       num 1      Match already matched string,
+                                         folded using unicode semantics
+                                         for non-utf8
+ NREFFA                       num 1      Match already matched string,
+                                         folded using unicode semantics
+                                         for non-utf8, no mixing ASCII,
+                                         non-ASCII
+
+ IFMATCH                      off 1 2    Succeeds if the following
+                                         matches.
+ UNLESSM                      off 1 2    Fails if the following matches.
+ SUSPEND                      off 1 1    "Independent" sub-RE.
+ IFTHEN                       off 1 1    Switch, should be preceded by
+                                         switcher.
+ GROUPP                       num 1      Whether the group matched.
 
  # Support for long RE
 
- LONGJMP         off 1 1    Jump far away.
- BRANCHJ         off 1 1    BRANCH with long offset.
+ LONGJMP                      off 1 1    Jump far away.
+ BRANCHJ                      off 1 1    BRANCH with long offset.
 
  # The heavy worker
 
- EVAL            evl 1      Execute some Perl code.
+ EVAL                         evl 1      Execute some Perl code.
 
  # Modifiers
 
- MINMOD          no         Next operator is not greedy.
- LOGICAL         no         Next opcode should set the flag only.
+ MINMOD                       no         Next operator is not greedy.
+ LOGICAL                      no         Next opcode should set the flag
+                                         only.
 
  # This is not used yet
- RENUM           off 1 1    Group with independently numbered parens.
+ RENUM                        off 1 1    Group with independently
+                                         numbered parens.
 
  # Trie Related
 
@@ -729,60 +775,67 @@ will be lost.
  # have inline charclass data (ascii only), the 'C' store it in the
  # structure.
 
- TRIE            trie 1     Match many EXACT(F[ALU]?)? at once.
-                            flags==type
- TRIEC           trie       Same as TRIE, but with embedded charclass
-                 charclass  data
+ TRIE                         trie 1     Match many EXACT(F[ALU]?)? at
+                                         once. flags==type
+ TRIEC                        trie       Same as TRIE, but with embedded
+                              charclass  charclass data
 
- AHOCORASICK     trie 1     Aho Corasick stclass. flags==type
- AHOCORASICKC    trie       Same as AHOCORASICK, but with embedded
-                 charclass  charclass data
+ AHOCORASICK                  trie 1     Aho Corasick stclass.
+                                         flags==type
+ AHOCORASICKC                 trie       Same as AHOCORASICK, but with
+                              charclass  embedded charclass data
 
  # Regex Subroutines
- GOSUB           num/ofs 2L recurse to paren arg1 at (signed) ofs arg2
- GOSTART         no         recurse to start of pattern
+ GOSUB                        num/ofs 2L recurse to paren arg1 at
+                                         (signed) ofs arg2
+ GOSTART                      no         recurse to start of pattern
 
  # Special conditionals
- NGROUPP         no-sv 1    Whether the group matched.
- INSUBP          num 1      Whether we are in a specific recurse.
- DEFINEP         none 1     Never execute directly.
+ NGROUPP                      no-sv 1    Whether the group matched.
+ INSUBP                       num 1      Whether we are in a specific
+                                         recurse.
+ DEFINEP                      none 1     Never execute directly.
 
  # Backtracking Verbs
- ENDLIKE         none       Used only for the type field of verbs
- OPFAIL          none       Same as (?!)
- ACCEPT          parno 1    Accepts the current matched string.
+ ENDLIKE                      none       Used only for the type field of
+                                         verbs
+ OPFAIL                       none       Same as (?!)
+ ACCEPT                       parno 1    Accepts the current matched
+                                         string.
 
  # Verbs With Arguments
- VERB            no-sv 1    Used only for the type field of verbs
- PRUNE           no-sv 1    Pattern fails at this startpoint if no-
-                            backtracking through this
- MARKPOINT       no-sv 1    Push the current location for rollback by
-                            cut.
- SKIP            no-sv 1    On failure skip forward (to the mark) before
-                            retrying
- COMMIT          no-sv 1    Pattern fails outright if backtracking
-                            through this
- CUTGROUP        no-sv 1    On failure go to the next alternation in the
-                            group
+ VERB                         no-sv 1    Used only for the type field of
+                                         verbs
+ PRUNE                        no-sv 1    Pattern fails at this
+                                         startpoint if no-backtracking
+                                         through this
+ MARKPOINT                    no-sv 1    Push the current location for
+                                         rollback by cut.
+ SKIP                         no-sv 1    On failure skip forward (to the
+                                         mark) before retrying
+ COMMIT                       no-sv 1    Pattern fails outright if
+                                         backtracking through this
+ CUTGROUP                     no-sv 1    On failure go to the next
+                                         alternation in the group
 
  # Control what to keep in $&.
- KEEPS           no         $& begins here.
+ KEEPS                        no         $& begins here.
 
  # New charclass like patterns
- LNBREAK         none       generic newline pattern
+ LNBREAK                      none       generic newline pattern
 
  # SPECIAL  REGOPS
 
  # 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
- OPTIMIZED       off        Placeholder for dump.
+ OPTIMIZED                    off        Placeholder for dump.
 
  # Special opcode with the property that no opcode in a compiled program
  # will ever be of this type. Thus it can be used as a flag value that
  # no other opcode has been seen. END is used similarly, in that an END
  # node cant be optimized. So END implies "unoptimizable" and PSEUDO
  # mean "not seen anything to optimize yet".
- PSEUDO          off        Pseudo opcode for internal use.
+ PSEUDO                       off        Pseudo opcode for internal use.
 
 =for regcomp.pl end