This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
[perl #114040] Parse formats in interpolating constructs
[perl5.git] / parser.h
index 3a32e1f..bfb2480 100644 (file)
--- a/parser.h
+++ b/parser.h
@@ -52,7 +52,7 @@ typedef struct yy_parser {
     OP         *lex_op;        /* extra info to pass back on op */
     SV         *lex_repl;      /* runtime replacement from s/// */
     U16                lex_inwhat;     /* what kind of quoting are we in */
-    OPCODE     last_lop_op;    /* last list operator */
+    OPCODE     last_lop_op;    /* last named list or unary operator */
     I32                lex_starts;     /* how many interps done on level */
     SV         *lex_stuff;     /* runtime pattern from m// or s/// */
     I32                multi_start;    /* 1st line of multi-line string */
@@ -64,9 +64,11 @@ typedef struct yy_parser {
     I32                lex_allbrackets;/* (), [], {}, ?: bracket count */
     SUBLEXINFO sublex_info;
     SV         *linestr;       /* current chunk of src text */
-    char       *bufptr;        
-    char       *oldbufptr;     
-    char       *oldoldbufptr;  
+    char       *bufptr;        /* carries the cursor (current parsing
+                                  position) from one invocation of yylex
+                                  to the next */
+    char       *oldbufptr;     /* in yylex, beginning of current token */
+    char       *oldoldbufptr;  /* in yylex, beginning of previous token */
     char       *bufend;        
     char       *linestart;     /* beginning of most recently read line */
     char       *last_uni;      /* position of last named-unary op */
@@ -78,6 +80,7 @@ typedef struct yy_parser {
     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 */
+    U8         form_lex_state; /* remember lex_state when parsing fmt */
 
 #ifdef PERL_MAD
     SV         *endwhite;
@@ -120,9 +123,10 @@ typedef struct yy_parser {
 # define LEX_IGNORE_UTF8_HINTS 0x00000002
 # define LEX_EVALBYTES         0x00000004
 # define LEX_START_COPIED      0x00000008
+# define LEX_DONT_CLOSE_RSFP   0x00000010
 # define LEX_START_FLAGS \
        (LEX_START_SAME_FILTER|LEX_START_COPIED \
-       |LEX_IGNORE_UTF8_HINTS|LEX_EVALBYTES)
+       |LEX_IGNORE_UTF8_HINTS|LEX_EVALBYTES|LEX_DONT_CLOSE_RSFP)
 #endif
 
 /* flags for parser API */
@@ -148,8 +152,8 @@ enum {
  * Local variables:
  * c-indentation-style: bsd
  * c-basic-offset: 4
- * indent-tabs-mode: t
+ * indent-tabs-mode: nil
  * End:
  *
- * ex: set ts=8 sts=4 sw=4 noet:
+ * ex: set ts=8 sts=4 sw=4 et:
  */