This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
In B.xs use I16 to avoid an "initializer will be sign-extended" warning.
[perl5.git] / pod / perldebguts.pod
index 8ae6e7b..a17a6b4 100644 (file)
@@ -38,7 +38,6 @@ Each array C<@{"_<$filename"}> holds the lines of $filename for a
 file compiled by Perl.  The same is also true for C<eval>ed strings
 that contain subroutines, or which are currently being executed.
 The $filename for C<eval>ed strings looks like C<(eval 34)>.
-Code assertions in regexes look like C<(re_eval 19)>.
 
 Values in this array are magical in numeric context: they compare
 equal to zero only if the line is not breakable.
@@ -53,14 +52,14 @@ C<"$break_condition\0$action">.
 
 The same holds for evaluated strings that contain subroutines, or
 which are currently being executed.  The $filename for C<eval>ed strings
-looks like C<(eval 34)> or C<(re_eval 19)>.
+looks like C<(eval 34)>.
 
 =item *
 
 Each scalar C<${"_<$filename"}> contains C<"_<$filename">.  This is
 also the case for evaluated strings that contain subroutines, or
 which are currently being executed.  The $filename for C<eval>ed
-strings looks like C<(eval 34)> or C<(re_eval 19)>.
+strings looks like C<(eval 34)>.
 
 =item *
 
@@ -81,7 +80,7 @@ also exists.
 A hash C<%DB::sub> is maintained, whose keys are subroutine names
 and whose values have the form C<filename:startline-endline>.
 C<filename> has the form C<(eval 34)> for subroutines defined inside
-C<eval>s, or C<(re_eval 19)> for those within regex code assertions.
+C<eval>s.
 
 =item *
 
@@ -536,236 +535,258 @@ C<   >I<id>: I<TYPE> I<OPTIONAL-INFO> (I<next-id>)
 
 Here are the possible types, with short descriptions:
 
+=for comment
+This table is generated by regen/regcomp.pl.  Any changes made here
+will be lost.
+
+=for regcomp.pl begin
+
  # TYPE arg-description [num-args] [longjump-len] DESCRIPTION
 
  # 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
- ANYOFV     sv      Match character in (or not in) this class, can
-                    match-multiple chars
- ALNUM      no      Match any alphanumeric character using native charset
-                    semantics for non-utf8
- ALNUML     no      Match any alphanumeric char in locale
- ALNUMU     no      Match any alphanumeric char using Unicode semantics
- ALNUMA     no      Match [A-Za-z_0-9]
- NALNUM     no      Match any non-alphanumeric character using native charset
-                    semantics for non-utf8
- NALNUML    no      Match any non-alphanumeric char in locale
- NALNUMU    no      Match any non-alphanumeric char using Unicode semantics
- NALNUMA    no      Match [^A-Za-z_0-9]
- SPACE      no      Match any whitespace character using native charset
-                    semantics for non-utf8
- SPACEL     no      Match any whitespace char in locale
- SPACEU     no      Match any whitespace char using Unicode semantics
- SPACEA     no      Match [ \t\n\f\r]
- NSPACE     no      Match any non-whitespace character using native charset
-                    semantics for non-utf8
- NSPACEL    no      Match any non-whitespace char in locale
- NSPACEU    no      Match any non-whitespace char using Unicode semantics
- NSPACEA    no      Match [^ \t\n\f\r]
- DIGIT      no      Match any numeric character using native charset semantics
-                    for non-utf8
- DIGITL     no      Match any numeric character in locale
- DIGITA     no      Match [0-9]
- NDIGIT     no      Match any non-numeric character using native charset
- i                  semantics for non-utf8
- NDIGITL    no      Match any non-numeric character in locale
- NDIGITA    no      Match [^0-9]
- 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_WARN_SUPER   sv         Match character in (or not in) this
+                               class, warn (if enabled) upon matching a
+                               char above Unicode max;
+ ANYOF_SYNTHETIC    sv         Synthetic start class
+
+ 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
 
- # BRANCH        The set of branches constituting a single choice are hooked
- #               together with their "next" pointers, since precedence prevents
- #               anything being concatenated to any individual branch.  The
- #               "next" pointer of the last BRANCH in a choice points to the
- #               thing following the whole choice.  This is also where the
- #               final "next" pointer of each individual branch points; each
- #               branch starts with the operand node of a BRANCH node.
+ # BRANCH        The set of branches constituting a single choice are
+ #               hooked together with their "next" pointers, since
+ #               precedence prevents anything being concatenated to
+ #               any individual branch.  The "next" pointer of the last
+ #               BRANCH in a choice points to the thing following the
+ #               whole choice.  This is also where the final "next"
+ #               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.
+ # 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 string, folded, native charset semantics for
-                    non-utf8 (prec. by length).
- EXACTFL    str     Match this string, folded in locale (w/len).
- EXACTFU    str     Match this string, folded, Unicode semantics for non-utf8
-                    (prec. by length).
- EXACTFA    str            Match this string, folded, Unicode semantics for non-utf8,
-                    but no ASCII-range character matches outside ASCII (prec.
-                    by length),.
+ 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).
+ EXACTFU_TRICKYFOLD str        Match this folded UTF-8 string using /iu
+                               rules
 
  # 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
 
- # STAR,PLUS    '?', and complex '*' and '+', are implemented as circular
- #               BRANCH structures using BACK.  Simple cases (one character
- #               per match) are implemented with STAR and PLUS for speed
- #               and to minimize recursive plunges.
+ # STAR,PLUS    '?', and complex '*' and '+', are implemented as
+ #               circular BRANCH structures using BACK.  Simple cases
+ #               (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.
+ 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.
+ 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
-
- # 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.
+ 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.
 
  # 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
 
- # Behave the same as A|LIST|OF|WORDS would. The '..C' variants have
- # inline charclass data (ascii only), the 'C' store it in the structure.
- # NOTE: the relative order of the TRIE-like regops  is significant
+ # Behave the same as A|LIST|OF|WORDS would. The '..C' variants
+ # 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      charclass Same as TRIE, but with embedded 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
 
- # For start classes, contains an added fail table.
- AHOCORASICK trie 1   Aho Corasick stclass. flags==type
AHOCORASICKC charclass Same as AHOCORASICK, but with embedded charclass data
+ AHOCORASICK        trie 1     Aho Corasick stclass. flags==type
+ AHOCORASICKC       trie       Same as AHOCORASICK, but with embedded
                   charclass  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
- VERTWS     none      vertical whitespace         (Perl 6)
- NVERTWS    none      not vertical whitespace     (Perl 6)
- HORIZWS    none      horizontal whitespace       (Perl 6)
- NHORIZWS   none      not horizontal whitespace   (Perl 6)
-
- FOLDCHAR   codepoint 1 codepoint with tricky case folding properties.
+ 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.
+ # 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.
 
  # 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.
+ # node cant be optimized. So END implies "unoptimizable" and PSEUDO
+ # mean "not seen anything to optimize yet".
+ PSEUDO             off        Pseudo opcode for internal use.
+
+=for regcomp.pl end
 
 =for unprinted-credits
 Next section M-J. Dominus (mjd-perl-patch+@plover.com) 20010421