This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Reset xxx_convert to empty string if none of 3 utilities is found
[perl5.git] / parser.h
index d4b1ec8..19c5c63 100644 (file)
--- a/parser.h
+++ b/parser.h
@@ -42,9 +42,9 @@ typedef struct yy_parser {
     /* Number of tokens to shift before error messages enabled.  */
     int                    yyerrstatus;
 
-    int                    stack_size;
     int                    yylen;      /* length of active reduction */
     yy_stack_frame  *stack;    /* base of stack */
+    yy_stack_frame  *stack_max1;/* (top-1)th element of allocated stack */
     yy_stack_frame  *ps;       /* current stack frame */
 
     /* lexer state */
@@ -58,6 +58,7 @@ typedef struct yy_parser {
                                   1 = @{...}  2 = ->@ */
     U8         expect;         /* how to interpret ambiguous tokens */
     bool       preambled;
+    bool        sub_no_recover; /* can't recover from a sublex error */
     I32                lex_formbrack;  /* bracket count at outer format level */
     OP         *lex_inpat;     /* in pattern $) and $| are special */
     OP         *lex_op;        /* extra info to pass back on op */
@@ -95,8 +96,7 @@ typedef struct yy_parser {
     U16                in_my;          /* we're compiling a "my"/"our" declaration */
     U8         lex_state;      /* next token is determined */
     U8         error_count;    /* how many compile errors so far, max 10 */
-    U8         form_lex_state; /* remember lex_state when parsing fmt */
-               /* 8-BIT HOLE */
+    U8         sub_error_count; /* the number of errors before sublexing */
     HV         *in_my_stash;   /* declared class of this "my" declaration */
     PerlIO     *rsfp;          /* current source file pointer */
     AV         *rsfp_filters;  /* holds chain of active source filters */
@@ -104,23 +104,26 @@ typedef struct yy_parser {
     YYSTYPE    nextval[5];     /* value of next token, if any */
     I32                nexttype[5];    /* type of next token */
     U8         nexttoke;
-
+    U8         form_lex_state; /* remember lex_state when parsing fmt */
     U8         lex_fakeeof;    /* precedence at which to fake EOF */
     U8         lex_flags;
-    PERL_BITFIELD16    in_pod:1;      /* lexer is within a =pod section */
-    PERL_BITFIELD16    filtered:1;    /* source filters in evalbytes */
-    PERL_BITFIELD16    saw_infix_sigil:1; /* saw & or * or % operator */
-    PERL_BITFIELD16    parsed_sub:1;  /* last thing parsed was a sub */
-               /* 4 spare bits */
     COP                *saved_curcop;  /* the previous PL_curcop */
     char       tokenbuf[256];
     line_t     herelines;      /* number of lines in here-doc */
     line_t     preambling;     /* line # when processing $ENV{PERL5DB} */
 
-    /* these are valid whiling parsing a subroutine signature */
-    int         sig_elems;      /* number of signature elements seen so far */
-    int         sig_optelems;   /* number of optional signature elems seen */
+    bool        sig_seen;       /* the currently parsing sub has a signature */
+    /* these are valid while parsing a subroutine signature */
+    IV          sig_elems;      /* number of signature elements seen so far */
+    IV          sig_optelems;   /* number of optional signature elems seen */
     char        sig_slurpy;     /* the sigil of the slurpy var (or null) */
+
+    bool        recheck_utf8_validity;
+
+    PERL_BITFIELD16    in_pod:1;      /* lexer is within a =pod section */
+    PERL_BITFIELD16    filtered:1;    /* source filters in evalbytes */
+    PERL_BITFIELD16    saw_infix_sigil:1; /* saw & or * or % operator */
+    PERL_BITFIELD16    parsed_sub:1;  /* last thing parsed was a sub */
 } yy_parser;
 
 /* flags for lexer API */