This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
56c5186c9d03803e35e16f2b336ccbde1b36ae1e
[perl5.git] / toke.c
1 /*    toke.c
2  *
3  *    Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
4  *    2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by Larry Wall and others
5  *
6  *    You may distribute under the terms of either the GNU General Public
7  *    License or the Artistic License, as specified in the README file.
8  *
9  */
10
11 /*
12  *  'It all comes from here, the stench and the peril.'    --Frodo
13  *
14  *     [p.719 of _The Lord of the Rings_, IV/ix: "Shelob's Lair"]
15  */
16
17 /*
18  * This file is the lexer for Perl.  It's closely linked to the
19  * parser, perly.y.
20  *
21  * The main routine is yylex(), which returns the next token.
22  */
23
24 /*
25 =head1 Lexer interface
26 This is the lower layer of the Perl parser, managing characters and tokens.
27
28 =for apidoc AmU|yy_parser *|PL_parser
29
30 Pointer to a structure encapsulating the state of the parsing operation
31 currently in progress.  The pointer can be locally changed to perform
32 a nested parse without interfering with the state of an outer parse.
33 Individual members of C<PL_parser> have their own documentation.
34
35 =cut
36 */
37
38 #include "EXTERN.h"
39 #define PERL_IN_TOKE_C
40 #include "perl.h"
41 #include "dquote_static.c"
42
43 #define new_constant(a,b,c,d,e,f,g)     \
44         S_new_constant(aTHX_ a,b,STR_WITH_LEN(c),d,e,f, g)
45
46 #define pl_yylval       (PL_parser->yylval)
47
48 /* XXX temporary backwards compatibility */
49 #define PL_lex_brackets         (PL_parser->lex_brackets)
50 #define PL_lex_allbrackets      (PL_parser->lex_allbrackets)
51 #define PL_lex_fakeeof          (PL_parser->lex_fakeeof)
52 #define PL_lex_brackstack       (PL_parser->lex_brackstack)
53 #define PL_lex_casemods         (PL_parser->lex_casemods)
54 #define PL_lex_casestack        (PL_parser->lex_casestack)
55 #define PL_lex_defer            (PL_parser->lex_defer)
56 #define PL_lex_dojoin           (PL_parser->lex_dojoin)
57 #define PL_lex_formbrack        (PL_parser->lex_formbrack)
58 #define PL_lex_inpat            (PL_parser->lex_inpat)
59 #define PL_lex_inwhat           (PL_parser->lex_inwhat)
60 #define PL_lex_op               (PL_parser->lex_op)
61 #define PL_lex_repl             (PL_parser->lex_repl)
62 #define PL_lex_starts           (PL_parser->lex_starts)
63 #define PL_lex_stuff            (PL_parser->lex_stuff)
64 #define PL_multi_start          (PL_parser->multi_start)
65 #define PL_multi_open           (PL_parser->multi_open)
66 #define PL_multi_close          (PL_parser->multi_close)
67 #define PL_preambled            (PL_parser->preambled)
68 #define PL_sublex_info          (PL_parser->sublex_info)
69 #define PL_linestr              (PL_parser->linestr)
70 #define PL_expect               (PL_parser->expect)
71 #define PL_copline              (PL_parser->copline)
72 #define PL_bufptr               (PL_parser->bufptr)
73 #define PL_oldbufptr            (PL_parser->oldbufptr)
74 #define PL_oldoldbufptr         (PL_parser->oldoldbufptr)
75 #define PL_linestart            (PL_parser->linestart)
76 #define PL_bufend               (PL_parser->bufend)
77 #define PL_last_uni             (PL_parser->last_uni)
78 #define PL_last_lop             (PL_parser->last_lop)
79 #define PL_last_lop_op          (PL_parser->last_lop_op)
80 #define PL_lex_state            (PL_parser->lex_state)
81 #define PL_rsfp                 (PL_parser->rsfp)
82 #define PL_rsfp_filters         (PL_parser->rsfp_filters)
83 #define PL_in_my                (PL_parser->in_my)
84 #define PL_in_my_stash          (PL_parser->in_my_stash)
85 #define PL_tokenbuf             (PL_parser->tokenbuf)
86 #define PL_multi_end            (PL_parser->multi_end)
87 #define PL_error_count          (PL_parser->error_count)
88
89 #  define PL_nexttoke           (PL_parser->nexttoke)
90 #  define PL_nexttype           (PL_parser->nexttype)
91 #  define PL_nextval            (PL_parser->nextval)
92
93 static const char* const ident_too_long = "Identifier too long";
94
95 #  define NEXTVAL_NEXTTOKE PL_nextval[PL_nexttoke]
96
97 #define XENUMMASK  0x3f
98 #define XFAKEEOF   0x40
99 #define XFAKEBRACK 0x80
100
101 #ifdef USE_UTF8_SCRIPTS
102 #   define UTF cBOOL(!IN_BYTES)
103 #else
104 #   define UTF cBOOL((PL_linestr && DO_UTF8(PL_linestr)) || ( !(PL_parser->lex_flags & LEX_IGNORE_UTF8_HINTS) && (PL_hints & HINT_UTF8)))
105 #endif
106
107 /* The maximum number of characters preceding the unrecognized one to display */
108 #define UNRECOGNIZED_PRECEDE_COUNT 10
109
110 /* In variables named $^X, these are the legal values for X.
111  * 1999-02-27 mjd-perl-patch@plover.com */
112 #define isCONTROLVAR(x) (isUPPER(x) || strchr("[\\]^_?", (x)))
113
114 #define SPACE_OR_TAB(c) isBLANK_A(c)
115
116 #define HEXFP_PEEK(s)     \
117     (((s[0] == '.') && \
118       (isXDIGIT(s[1]) || isALPHA_FOLD_EQ(s[1], 'p'))) || \
119      isALPHA_FOLD_EQ(s[0], 'p'))
120
121 /* LEX_* are values for PL_lex_state, the state of the lexer.
122  * They are arranged oddly so that the guard on the switch statement
123  * can get by with a single comparison (if the compiler is smart enough).
124  *
125  * These values refer to the various states within a sublex parse,
126  * i.e. within a double quotish string
127  */
128
129 /* #define LEX_NOTPARSING               11 is done in perl.h. */
130
131 #define LEX_NORMAL              10 /* normal code (ie not within "...")     */
132 #define LEX_INTERPNORMAL         9 /* code within a string, eg "$foo[$x+1]" */
133 #define LEX_INTERPCASEMOD        8 /* expecting a \U, \Q or \E etc          */
134 #define LEX_INTERPPUSH           7 /* starting a new sublex parse level     */
135 #define LEX_INTERPSTART          6 /* expecting the start of a $var         */
136
137                                    /* at end of code, eg "$x" followed by:  */
138 #define LEX_INTERPEND            5 /* ... eg not one of [, { or ->          */
139 #define LEX_INTERPENDMAYBE       4 /* ... eg one of [, { or ->              */
140
141 #define LEX_INTERPCONCAT         3 /* expecting anything, eg at start of
142                                         string or after \E, $foo, etc       */
143 #define LEX_INTERPCONST          2 /* NOT USED */
144 #define LEX_FORMLINE             1 /* expecting a format line               */
145 #define LEX_KNOWNEXT             0 /* next token known; just return it      */
146
147
148 #ifdef DEBUGGING
149 static const char* const lex_state_names[] = {
150     "KNOWNEXT",
151     "FORMLINE",
152     "INTERPCONST",
153     "INTERPCONCAT",
154     "INTERPENDMAYBE",
155     "INTERPEND",
156     "INTERPSTART",
157     "INTERPPUSH",
158     "INTERPCASEMOD",
159     "INTERPNORMAL",
160     "NORMAL"
161 };
162 #endif
163
164 #include "keywords.h"
165
166 /* CLINE is a macro that ensures PL_copline has a sane value */
167
168 #define CLINE (PL_copline = (CopLINE(PL_curcop) < PL_copline ? CopLINE(PL_curcop) : PL_copline))
169
170 /*
171  * Convenience functions to return different tokens and prime the
172  * lexer for the next token.  They all take an argument.
173  *
174  * TOKEN        : generic token (used for '(', DOLSHARP, etc)
175  * OPERATOR     : generic operator
176  * AOPERATOR    : assignment operator
177  * PREBLOCK     : beginning the block after an if, while, foreach, ...
178  * PRETERMBLOCK : beginning a non-code-defining {} block (eg, hash ref)
179  * PREREF       : *EXPR where EXPR is not a simple identifier
180  * TERM         : expression term
181  * POSTDEREF    : postfix dereference (->$* ->@[...] etc.)
182  * LOOPX        : loop exiting command (goto, last, dump, etc)
183  * FTST         : file test operator
184  * FUN0         : zero-argument function
185  * FUN0OP       : zero-argument function, with its op created in this file
186  * FUN1         : not used, except for not, which isn't a UNIOP
187  * BOop         : bitwise or or xor
188  * BAop         : bitwise and
189  * BCop         : bitwise complement
190  * SHop         : shift operator
191  * PWop         : power operator
192  * PMop         : pattern-matching operator
193  * Aop          : addition-level operator
194  * AopNOASSIGN  : addition-level operator that is never part of .=
195  * Mop          : multiplication-level operator
196  * Eop          : equality-testing operator
197  * Rop          : relational operator <= != gt
198  *
199  * Also see LOP and lop() below.
200  */
201
202 #ifdef DEBUGGING /* Serve -DT. */
203 #   define REPORT(retval) tokereport((I32)retval, &pl_yylval)
204 #else
205 #   define REPORT(retval) (retval)
206 #endif
207
208 #define TOKEN(retval) return ( PL_bufptr = s, REPORT(retval))
209 #define OPERATOR(retval) return (PL_expect = XTERM, PL_bufptr = s, REPORT(retval))
210 #define AOPERATOR(retval) return ao((PL_expect = XTERM, PL_bufptr = s, retval))
211 #define PREBLOCK(retval) return (PL_expect = XBLOCK,PL_bufptr = s, REPORT(retval))
212 #define PRETERMBLOCK(retval) return (PL_expect = XTERMBLOCK,PL_bufptr = s, REPORT(retval))
213 #define PREREF(retval) return (PL_expect = XREF,PL_bufptr = s, REPORT(retval))
214 #define TERM(retval) return (CLINE, PL_expect = XOPERATOR, PL_bufptr = s, REPORT(retval))
215 #define POSTDEREF(f) return (PL_bufptr = s, S_postderef(aTHX_ REPORT(f),s[1]))
216 #define LOOPX(f) return (PL_bufptr = force_word(s,WORD,TRUE,FALSE), \
217                          pl_yylval.ival=f, \
218                          PL_expect = PL_nexttoke ? XOPERATOR : XTERM, \
219                          REPORT((int)LOOPEX))
220 #define FTST(f)  return (pl_yylval.ival=f, PL_expect=XTERMORDORDOR, PL_bufptr=s, REPORT((int)UNIOP))
221 #define FUN0(f)  return (pl_yylval.ival=f, PL_expect=XOPERATOR, PL_bufptr=s, REPORT((int)FUNC0))
222 #define FUN0OP(f)  return (pl_yylval.opval=f, CLINE, PL_expect=XOPERATOR, PL_bufptr=s, REPORT((int)FUNC0OP))
223 #define FUN1(f)  return (pl_yylval.ival=f, PL_expect=XOPERATOR, PL_bufptr=s, REPORT((int)FUNC1))
224 #define BOop(f)  return ao((pl_yylval.ival=f, PL_expect=XTERM, PL_bufptr=s, (int)BITOROP))
225 #define BAop(f)  return ao((pl_yylval.ival=f, PL_expect=XTERM, PL_bufptr=s, (int)BITANDOP))
226 #define BCop(f) return pl_yylval.ival=f, PL_expect=XTERM, PL_bufptr = s, \
227                        REPORT('~')
228 #define SHop(f)  return ao((pl_yylval.ival=f, PL_expect=XTERM, PL_bufptr=s, (int)SHIFTOP))
229 #define PWop(f)  return ao((pl_yylval.ival=f, PL_expect=XTERM, PL_bufptr=s, (int)POWOP))
230 #define PMop(f)  return(pl_yylval.ival=f, PL_expect=XTERM, PL_bufptr=s, REPORT((int)MATCHOP))
231 #define Aop(f)   return ao((pl_yylval.ival=f, PL_expect=XTERM, PL_bufptr=s, (int)ADDOP))
232 #define AopNOASSIGN(f) return (pl_yylval.ival=f, PL_bufptr=s, REPORT((int)ADDOP))
233 #define Mop(f)   return ao((pl_yylval.ival=f, PL_expect=XTERM, PL_bufptr=s, (int)MULOP))
234 #define Eop(f)   return (pl_yylval.ival=f, PL_expect=XTERM, PL_bufptr=s, REPORT((int)EQOP))
235 #define Rop(f)   return (pl_yylval.ival=f, PL_expect=XTERM, PL_bufptr=s, REPORT((int)RELOP))
236
237 /* This bit of chicanery makes a unary function followed by
238  * a parenthesis into a function with one argument, highest precedence.
239  * The UNIDOR macro is for unary functions that can be followed by the //
240  * operator (such as C<shift // 0>).
241  */
242 #define UNI3(f,x,have_x) { \
243         pl_yylval.ival = f; \
244         if (have_x) PL_expect = x; \
245         PL_bufptr = s; \
246         PL_last_uni = PL_oldbufptr; \
247         PL_last_lop_op = f; \
248         if (*s == '(') \
249             return REPORT( (int)FUNC1 ); \
250         s = skipspace(s); \
251         return REPORT( *s=='(' ? (int)FUNC1 : (int)UNIOP ); \
252         }
253 #define UNI(f)    UNI3(f,XTERM,1)
254 #define UNIDOR(f) UNI3(f,XTERMORDORDOR,1)
255 #define UNIPROTO(f,optional) { \
256         if (optional) PL_last_uni = PL_oldbufptr; \
257         OPERATOR(f); \
258         }
259
260 #define UNIBRACK(f) UNI3(f,0,0)
261
262 /* grandfather return to old style */
263 #define OLDLOP(f) \
264         do { \
265             if (!PL_lex_allbrackets && PL_lex_fakeeof > LEX_FAKEEOF_LOWLOGIC) \
266                 PL_lex_fakeeof = LEX_FAKEEOF_LOWLOGIC; \
267             pl_yylval.ival = (f); \
268             PL_expect = XTERM; \
269             PL_bufptr = s; \
270             return (int)LSTOP; \
271         } while(0)
272
273 #define COPLINE_INC_WITH_HERELINES                  \
274     STMT_START {                                     \
275         CopLINE_inc(PL_curcop);                       \
276         if (PL_parser->herelines)                      \
277             CopLINE(PL_curcop) += PL_parser->herelines, \
278             PL_parser->herelines = 0;                    \
279     } STMT_END
280 /* Called after scan_str to update CopLINE(PL_curcop), but only when there
281  * is no sublex_push to follow. */
282 #define COPLINE_SET_FROM_MULTI_END            \
283     STMT_START {                               \
284         CopLINE_set(PL_curcop, PL_multi_end);   \
285         if (PL_multi_end != PL_multi_start)      \
286             PL_parser->herelines = 0;             \
287     } STMT_END
288
289
290 #ifdef DEBUGGING
291
292 /* how to interpret the pl_yylval associated with the token */
293 enum token_type {
294     TOKENTYPE_NONE,
295     TOKENTYPE_IVAL,
296     TOKENTYPE_OPNUM, /* pl_yylval.ival contains an opcode number */
297     TOKENTYPE_PVAL,
298     TOKENTYPE_OPVAL
299 };
300
301 static struct debug_tokens {
302     const int token;
303     enum token_type type;
304     const char *name;
305 } const debug_tokens[] =
306 {
307     { ADDOP,            TOKENTYPE_OPNUM,        "ADDOP" },
308     { ANDAND,           TOKENTYPE_NONE,         "ANDAND" },
309     { ANDOP,            TOKENTYPE_NONE,         "ANDOP" },
310     { ANONSUB,          TOKENTYPE_IVAL,         "ANONSUB" },
311     { ARROW,            TOKENTYPE_NONE,         "ARROW" },
312     { ASSIGNOP,         TOKENTYPE_OPNUM,        "ASSIGNOP" },
313     { BITANDOP,         TOKENTYPE_OPNUM,        "BITANDOP" },
314     { BITOROP,          TOKENTYPE_OPNUM,        "BITOROP" },
315     { COLONATTR,        TOKENTYPE_NONE,         "COLONATTR" },
316     { CONTINUE,         TOKENTYPE_NONE,         "CONTINUE" },
317     { DEFAULT,          TOKENTYPE_NONE,         "DEFAULT" },
318     { DO,               TOKENTYPE_NONE,         "DO" },
319     { DOLSHARP,         TOKENTYPE_NONE,         "DOLSHARP" },
320     { DORDOR,           TOKENTYPE_NONE,         "DORDOR" },
321     { DOROP,            TOKENTYPE_OPNUM,        "DOROP" },
322     { DOTDOT,           TOKENTYPE_IVAL,         "DOTDOT" },
323     { ELSE,             TOKENTYPE_NONE,         "ELSE" },
324     { ELSIF,            TOKENTYPE_IVAL,         "ELSIF" },
325     { EQOP,             TOKENTYPE_OPNUM,        "EQOP" },
326     { FOR,              TOKENTYPE_IVAL,         "FOR" },
327     { FORMAT,           TOKENTYPE_NONE,         "FORMAT" },
328     { FORMLBRACK,       TOKENTYPE_NONE,         "FORMLBRACK" },
329     { FORMRBRACK,       TOKENTYPE_NONE,         "FORMRBRACK" },
330     { FUNC,             TOKENTYPE_OPNUM,        "FUNC" },
331     { FUNC0,            TOKENTYPE_OPNUM,        "FUNC0" },
332     { FUNC0OP,          TOKENTYPE_OPVAL,        "FUNC0OP" },
333     { FUNC0SUB,         TOKENTYPE_OPVAL,        "FUNC0SUB" },
334     { FUNC1,            TOKENTYPE_OPNUM,        "FUNC1" },
335     { FUNCMETH,         TOKENTYPE_OPVAL,        "FUNCMETH" },
336     { GIVEN,            TOKENTYPE_IVAL,         "GIVEN" },
337     { HASHBRACK,        TOKENTYPE_NONE,         "HASHBRACK" },
338     { IF,               TOKENTYPE_IVAL,         "IF" },
339     { LABEL,            TOKENTYPE_PVAL,         "LABEL" },
340     { LOCAL,            TOKENTYPE_IVAL,         "LOCAL" },
341     { LOOPEX,           TOKENTYPE_OPNUM,        "LOOPEX" },
342     { LSTOP,            TOKENTYPE_OPNUM,        "LSTOP" },
343     { LSTOPSUB,         TOKENTYPE_OPVAL,        "LSTOPSUB" },
344     { MATCHOP,          TOKENTYPE_OPNUM,        "MATCHOP" },
345     { METHOD,           TOKENTYPE_OPVAL,        "METHOD" },
346     { MULOP,            TOKENTYPE_OPNUM,        "MULOP" },
347     { MY,               TOKENTYPE_IVAL,         "MY" },
348     { NOAMP,            TOKENTYPE_NONE,         "NOAMP" },
349     { NOTOP,            TOKENTYPE_NONE,         "NOTOP" },
350     { OROP,             TOKENTYPE_IVAL,         "OROP" },
351     { OROR,             TOKENTYPE_NONE,         "OROR" },
352     { PACKAGE,          TOKENTYPE_NONE,         "PACKAGE" },
353     { PLUGEXPR,         TOKENTYPE_OPVAL,        "PLUGEXPR" },
354     { PLUGSTMT,         TOKENTYPE_OPVAL,        "PLUGSTMT" },
355     { PMFUNC,           TOKENTYPE_OPVAL,        "PMFUNC" },
356     { POSTJOIN,         TOKENTYPE_NONE,         "POSTJOIN" },
357     { POSTDEC,          TOKENTYPE_NONE,         "POSTDEC" },
358     { POSTINC,          TOKENTYPE_NONE,         "POSTINC" },
359     { POWOP,            TOKENTYPE_OPNUM,        "POWOP" },
360     { PREDEC,           TOKENTYPE_NONE,         "PREDEC" },
361     { PREINC,           TOKENTYPE_NONE,         "PREINC" },
362     { PRIVATEREF,       TOKENTYPE_OPVAL,        "PRIVATEREF" },
363     { QWLIST,           TOKENTYPE_OPVAL,        "QWLIST" },
364     { REFGEN,           TOKENTYPE_NONE,         "REFGEN" },
365     { RELOP,            TOKENTYPE_OPNUM,        "RELOP" },
366     { REQUIRE,          TOKENTYPE_NONE,         "REQUIRE" },
367     { SHIFTOP,          TOKENTYPE_OPNUM,        "SHIFTOP" },
368     { SUB,              TOKENTYPE_NONE,         "SUB" },
369     { THING,            TOKENTYPE_OPVAL,        "THING" },
370     { UMINUS,           TOKENTYPE_NONE,         "UMINUS" },
371     { UNIOP,            TOKENTYPE_OPNUM,        "UNIOP" },
372     { UNIOPSUB,         TOKENTYPE_OPVAL,        "UNIOPSUB" },
373     { UNLESS,           TOKENTYPE_IVAL,         "UNLESS" },
374     { UNTIL,            TOKENTYPE_IVAL,         "UNTIL" },
375     { USE,              TOKENTYPE_IVAL,         "USE" },
376     { WHEN,             TOKENTYPE_IVAL,         "WHEN" },
377     { WHILE,            TOKENTYPE_IVAL,         "WHILE" },
378     { WORD,             TOKENTYPE_OPVAL,        "WORD" },
379     { YADAYADA,         TOKENTYPE_IVAL,         "YADAYADA" },
380     { 0,                TOKENTYPE_NONE,         NULL }
381 };
382
383 /* dump the returned token in rv, plus any optional arg in pl_yylval */
384
385 STATIC int
386 S_tokereport(pTHX_ I32 rv, const YYSTYPE* lvalp)
387 {
388     PERL_ARGS_ASSERT_TOKEREPORT;
389
390     if (DEBUG_T_TEST) {
391         const char *name = NULL;
392         enum token_type type = TOKENTYPE_NONE;
393         const struct debug_tokens *p;
394         SV* const report = newSVpvs("<== ");
395
396         for (p = debug_tokens; p->token; p++) {
397             if (p->token == (int)rv) {
398                 name = p->name;
399                 type = p->type;
400                 break;
401             }
402         }
403         if (name)
404             Perl_sv_catpv(aTHX_ report, name);
405         else if (isGRAPH(rv))
406         {
407             Perl_sv_catpvf(aTHX_ report, "'%c'", (char)rv);
408             if ((char)rv == 'p')
409                 sv_catpvs(report, " (pending identifier)");
410         }
411         else if (!rv)
412             sv_catpvs(report, "EOF");
413         else
414             Perl_sv_catpvf(aTHX_ report, "?? %"IVdf, (IV)rv);
415         switch (type) {
416         case TOKENTYPE_NONE:
417             break;
418         case TOKENTYPE_IVAL:
419             Perl_sv_catpvf(aTHX_ report, "(ival=%"IVdf")", (IV)lvalp->ival);
420             break;
421         case TOKENTYPE_OPNUM:
422             Perl_sv_catpvf(aTHX_ report, "(ival=op_%s)",
423                                     PL_op_name[lvalp->ival]);
424             break;
425         case TOKENTYPE_PVAL:
426             Perl_sv_catpvf(aTHX_ report, "(pval=\"%s\")", lvalp->pval);
427             break;
428         case TOKENTYPE_OPVAL:
429             if (lvalp->opval) {
430                 Perl_sv_catpvf(aTHX_ report, "(opval=op_%s)",
431                                     PL_op_name[lvalp->opval->op_type]);
432                 if (lvalp->opval->op_type == OP_CONST) {
433                     Perl_sv_catpvf(aTHX_ report, " %s",
434                         SvPEEK(cSVOPx_sv(lvalp->opval)));
435                 }
436
437             }
438             else
439                 sv_catpvs(report, "(opval=null)");
440             break;
441         }
442         PerlIO_printf(Perl_debug_log, "### %s\n\n", SvPV_nolen_const(report));
443     };
444     return (int)rv;
445 }
446
447
448 /* print the buffer with suitable escapes */
449
450 STATIC void
451 S_printbuf(pTHX_ const char *const fmt, const char *const s)
452 {
453     SV* const tmp = newSVpvs("");
454
455     PERL_ARGS_ASSERT_PRINTBUF;
456
457     GCC_DIAG_IGNORE(-Wformat-nonliteral); /* fmt checked by caller */
458     PerlIO_printf(Perl_debug_log, fmt, pv_display(tmp, s, strlen(s), 0, 60));
459     GCC_DIAG_RESTORE;
460     SvREFCNT_dec(tmp);
461 }
462
463 #endif
464
465 static int
466 S_deprecate_commaless_var_list(pTHX) {
467     PL_expect = XTERM;
468     deprecate("comma-less variable list");
469     return REPORT(','); /* grandfather non-comma-format format */
470 }
471
472 /*
473  * S_ao
474  *
475  * This subroutine looks for an '=' next to the operator that has just been
476  * parsed and turns it into an ASSIGNOP if it finds one.
477  */
478
479 STATIC int
480 S_ao(pTHX_ int toketype)
481 {
482     if (*PL_bufptr == '=') {
483         PL_bufptr++;
484         if (toketype == ANDAND)
485             pl_yylval.ival = OP_ANDASSIGN;
486         else if (toketype == OROR)
487             pl_yylval.ival = OP_ORASSIGN;
488         else if (toketype == DORDOR)
489             pl_yylval.ival = OP_DORASSIGN;
490         toketype = ASSIGNOP;
491     }
492     return REPORT(toketype);
493 }
494
495 /*
496  * S_no_op
497  * When Perl expects an operator and finds something else, no_op
498  * prints the warning.  It always prints "<something> found where
499  * operator expected.  It prints "Missing semicolon on previous line?"
500  * if the surprise occurs at the start of the line.  "do you need to
501  * predeclare ..." is printed out for code like "sub bar; foo bar $x"
502  * where the compiler doesn't know if foo is a method call or a function.
503  * It prints "Missing operator before end of line" if there's nothing
504  * after the missing operator, or "... before <...>" if there is something
505  * after the missing operator.
506  *
507  * PL_bufptr is expected to point to the start of the thing that was found,
508  * and s after the next token or partial token.
509  */
510
511 STATIC void
512 S_no_op(pTHX_ const char *const what, char *s)
513 {
514     char * const oldbp = PL_bufptr;
515     const bool is_first = (PL_oldbufptr == PL_linestart);
516
517     PERL_ARGS_ASSERT_NO_OP;
518
519     if (!s)
520         s = oldbp;
521     else
522         PL_bufptr = s;
523     yywarn(Perl_form(aTHX_ "%s found where operator expected", what), UTF ? SVf_UTF8 : 0);
524     if (ckWARN_d(WARN_SYNTAX)) {
525         if (is_first)
526             Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
527                     "\t(Missing semicolon on previous line?)\n");
528         else if (PL_oldoldbufptr && isIDFIRST_lazy_if(PL_oldoldbufptr,UTF)) {
529             const char *t;
530             for (t = PL_oldoldbufptr; (isWORDCHAR_lazy_if(t,UTF) || *t == ':');
531                                                             t += UTF ? UTF8SKIP(t) : 1)
532                 NOOP;
533             if (t < PL_bufptr && isSPACE(*t))
534                 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
535                         "\t(Do you need to predeclare %"UTF8f"?)\n",
536                       UTF8fARG(UTF, t - PL_oldoldbufptr, PL_oldoldbufptr));
537         }
538         else {
539             assert(s >= oldbp);
540             Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
541                     "\t(Missing operator before %"UTF8f"?)\n",
542                      UTF8fARG(UTF, s - oldbp, oldbp));
543         }
544     }
545     PL_bufptr = oldbp;
546 }
547
548 /*
549  * S_missingterm
550  * Complain about missing quote/regexp/heredoc terminator.
551  * If it's called with NULL then it cauterizes the line buffer.
552  * If we're in a delimited string and the delimiter is a control
553  * character, it's reformatted into a two-char sequence like ^C.
554  * This is fatal.
555  */
556
557 STATIC void
558 S_missingterm(pTHX_ char *s)
559 {
560     char tmpbuf[3];
561     char q;
562     if (s) {
563         char * const nl = strrchr(s,'\n');
564         if (nl)
565             *nl = '\0';
566     }
567     else if ((U8) PL_multi_close < 32) {
568         *tmpbuf = '^';
569         tmpbuf[1] = (char)toCTRL(PL_multi_close);
570         tmpbuf[2] = '\0';
571         s = tmpbuf;
572     }
573     else {
574         *tmpbuf = (char)PL_multi_close;
575         tmpbuf[1] = '\0';
576         s = tmpbuf;
577     }
578     q = strchr(s,'"') ? '\'' : '"';
579     Perl_croak(aTHX_ "Can't find string terminator %c%s%c anywhere before EOF",q,s,q);
580 }
581
582 #include "feature.h"
583
584 /*
585  * Check whether the named feature is enabled.
586  */
587 bool
588 Perl_feature_is_enabled(pTHX_ const char *const name, STRLEN namelen)
589 {
590     char he_name[8 + MAX_FEATURE_LEN] = "feature_";
591
592     PERL_ARGS_ASSERT_FEATURE_IS_ENABLED;
593
594     assert(CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM);
595
596     if (namelen > MAX_FEATURE_LEN)
597         return FALSE;
598     memcpy(&he_name[8], name, namelen);
599
600     return cBOOL(cop_hints_fetch_pvn(PL_curcop, he_name, 8 + namelen, 0,
601                                      REFCOUNTED_HE_EXISTS));
602 }
603
604 /*
605  * experimental text filters for win32 carriage-returns, utf16-to-utf8 and
606  * utf16-to-utf8-reversed.
607  */
608
609 #ifdef PERL_CR_FILTER
610 static void
611 strip_return(SV *sv)
612 {
613     const char *s = SvPVX_const(sv);
614     const char * const e = s + SvCUR(sv);
615
616     PERL_ARGS_ASSERT_STRIP_RETURN;
617
618     /* outer loop optimized to do nothing if there are no CR-LFs */
619     while (s < e) {
620         if (*s++ == '\r' && *s == '\n') {
621             /* hit a CR-LF, need to copy the rest */
622             char *d = s - 1;
623             *d++ = *s++;
624             while (s < e) {
625                 if (*s == '\r' && s[1] == '\n')
626                     s++;
627                 *d++ = *s++;
628             }
629             SvCUR(sv) -= s - d;
630             return;
631         }
632     }
633 }
634
635 STATIC I32
636 S_cr_textfilter(pTHX_ int idx, SV *sv, int maxlen)
637 {
638     const I32 count = FILTER_READ(idx+1, sv, maxlen);
639     if (count > 0 && !maxlen)
640         strip_return(sv);
641     return count;
642 }
643 #endif
644
645 /*
646 =for apidoc Amx|void|lex_start|SV *line|PerlIO *rsfp|U32 flags
647
648 Creates and initialises a new lexer/parser state object, supplying
649 a context in which to lex and parse from a new source of Perl code.
650 A pointer to the new state object is placed in L</PL_parser>.  An entry
651 is made on the save stack so that upon unwinding the new state object
652 will be destroyed and the former value of L</PL_parser> will be restored.
653 Nothing else need be done to clean up the parsing context.
654
655 The code to be parsed comes from I<line> and I<rsfp>.  I<line>, if
656 non-null, provides a string (in SV form) containing code to be parsed.
657 A copy of the string is made, so subsequent modification of I<line>
658 does not affect parsing.  I<rsfp>, if non-null, provides an input stream
659 from which code will be read to be parsed.  If both are non-null, the
660 code in I<line> comes first and must consist of complete lines of input,
661 and I<rsfp> supplies the remainder of the source.
662
663 The I<flags> parameter is reserved for future use.  Currently it is only
664 used by perl internally, so extensions should always pass zero.
665
666 =cut
667 */
668
669 /* LEX_START_SAME_FILTER indicates that this is not a new file, so it
670    can share filters with the current parser.
671    LEX_START_DONT_CLOSE indicates that the file handle wasn't opened by the
672    caller, hence isn't owned by the parser, so shouldn't be closed on parser
673    destruction. This is used to handle the case of defaulting to reading the
674    script from the standard input because no filename was given on the command
675    line (without getting confused by situation where STDIN has been closed, so
676    the script handle is opened on fd 0)  */
677
678 void
679 Perl_lex_start(pTHX_ SV *line, PerlIO *rsfp, U32 flags)
680 {
681     const char *s = NULL;
682     yy_parser *parser, *oparser;
683     if (flags && flags & ~LEX_START_FLAGS)
684         Perl_croak(aTHX_ "Lexing code internal error (%s)", "lex_start");
685
686     /* create and initialise a parser */
687
688     Newxz(parser, 1, yy_parser);
689     parser->old_parser = oparser = PL_parser;
690     PL_parser = parser;
691
692     parser->stack = NULL;
693     parser->ps = NULL;
694     parser->stack_size = 0;
695
696     /* on scope exit, free this parser and restore any outer one */
697     SAVEPARSER(parser);
698     parser->saved_curcop = PL_curcop;
699
700     /* initialise lexer state */
701
702     parser->nexttoke = 0;
703     parser->error_count = oparser ? oparser->error_count : 0;
704     parser->copline = parser->preambling = NOLINE;
705     parser->lex_state = LEX_NORMAL;
706     parser->expect = XSTATE;
707     parser->rsfp = rsfp;
708     parser->rsfp_filters =
709       !(flags & LEX_START_SAME_FILTER) || !oparser
710         ? NULL
711         : MUTABLE_AV(SvREFCNT_inc(
712             oparser->rsfp_filters
713              ? oparser->rsfp_filters
714              : (oparser->rsfp_filters = newAV())
715           ));
716
717     Newx(parser->lex_brackstack, 120, char);
718     Newx(parser->lex_casestack, 12, char);
719     *parser->lex_casestack = '\0';
720     Newxz(parser->lex_shared, 1, LEXSHARED);
721
722     if (line) {
723         STRLEN len;
724         s = SvPV_const(line, len);
725         parser->linestr = flags & LEX_START_COPIED
726                             ? SvREFCNT_inc_simple_NN(line)
727                             : newSVpvn_flags(s, len, SvUTF8(line));
728         sv_catpvn(parser->linestr, "\n;", rsfp ? 1 : 2);
729     } else {
730         parser->linestr = newSVpvn("\n;", rsfp ? 1 : 2);
731     }
732     parser->oldoldbufptr =
733         parser->oldbufptr =
734         parser->bufptr =
735         parser->linestart = SvPVX(parser->linestr);
736     parser->bufend = parser->bufptr + SvCUR(parser->linestr);
737     parser->last_lop = parser->last_uni = NULL;
738
739     STATIC_ASSERT_STMT(FITS_IN_8_BITS(LEX_IGNORE_UTF8_HINTS|LEX_EVALBYTES
740                                                         |LEX_DONT_CLOSE_RSFP));
741     parser->lex_flags = (U8) (flags & (LEX_IGNORE_UTF8_HINTS|LEX_EVALBYTES
742                                                         |LEX_DONT_CLOSE_RSFP));
743
744     parser->in_pod = parser->filtered = 0;
745 }
746
747
748 /* delete a parser object */
749
750 void
751 Perl_parser_free(pTHX_  const yy_parser *parser)
752 {
753     PERL_ARGS_ASSERT_PARSER_FREE;
754
755     PL_curcop = parser->saved_curcop;
756     SvREFCNT_dec(parser->linestr);
757
758     if (PL_parser->lex_flags & LEX_DONT_CLOSE_RSFP)
759         PerlIO_clearerr(parser->rsfp);
760     else if (parser->rsfp && (!parser->old_parser ||
761                 (parser->old_parser && parser->rsfp != parser->old_parser->rsfp)))
762         PerlIO_close(parser->rsfp);
763     SvREFCNT_dec(parser->rsfp_filters);
764     SvREFCNT_dec(parser->lex_stuff);
765     SvREFCNT_dec(parser->sublex_info.repl);
766
767     Safefree(parser->lex_brackstack);
768     Safefree(parser->lex_casestack);
769     Safefree(parser->lex_shared);
770     PL_parser = parser->old_parser;
771     Safefree(parser);
772 }
773
774 void
775 Perl_parser_free_nexttoke_ops(pTHX_  yy_parser *parser, OPSLAB *slab)
776 {
777     I32 nexttoke = parser->nexttoke;
778     PERL_ARGS_ASSERT_PARSER_FREE_NEXTTOKE_OPS;
779     while (nexttoke--) {
780         if (S_is_opval_token(parser->nexttype[nexttoke] & 0xffff)
781          && parser->nextval[nexttoke].opval
782          && parser->nextval[nexttoke].opval->op_slabbed
783          && OpSLAB(parser->nextval[nexttoke].opval) == slab) {
784             op_free(parser->nextval[nexttoke].opval);
785             parser->nextval[nexttoke].opval = NULL;
786         }
787     }
788 }
789
790
791 /*
792 =for apidoc AmxU|SV *|PL_parser-E<gt>linestr
793
794 Buffer scalar containing the chunk currently under consideration of the
795 text currently being lexed.  This is always a plain string scalar (for
796 which C<SvPOK> is true).  It is not intended to be used as a scalar by
797 normal scalar means; instead refer to the buffer directly by the pointer
798 variables described below.
799
800 The lexer maintains various C<char*> pointers to things in the
801 C<PL_parser-E<gt>linestr> buffer.  If C<PL_parser-E<gt>linestr> is ever
802 reallocated, all of these pointers must be updated.  Don't attempt to
803 do this manually, but rather use L</lex_grow_linestr> if you need to
804 reallocate the buffer.
805
806 The content of the text chunk in the buffer is commonly exactly one
807 complete line of input, up to and including a newline terminator,
808 but there are situations where it is otherwise.  The octets of the
809 buffer may be intended to be interpreted as either UTF-8 or Latin-1.
810 The function L</lex_bufutf8> tells you which.  Do not use the C<SvUTF8>
811 flag on this scalar, which may disagree with it.
812
813 For direct examination of the buffer, the variable
814 L</PL_parser-E<gt>bufend> points to the end of the buffer.  The current
815 lexing position is pointed to by L</PL_parser-E<gt>bufptr>.  Direct use
816 of these pointers is usually preferable to examination of the scalar
817 through normal scalar means.
818
819 =for apidoc AmxU|char *|PL_parser-E<gt>bufend
820
821 Direct pointer to the end of the chunk of text currently being lexed, the
822 end of the lexer buffer.  This is equal to C<SvPVX(PL_parser-E<gt>linestr)
823 + SvCUR(PL_parser-E<gt>linestr)>.  A C<NUL> character (zero octet) is
824 always located at the end of the buffer, and does not count as part of
825 the buffer's contents.
826
827 =for apidoc AmxU|char *|PL_parser-E<gt>bufptr
828
829 Points to the current position of lexing inside the lexer buffer.
830 Characters around this point may be freely examined, within
831 the range delimited by C<SvPVX(L</PL_parser-E<gt>linestr>)> and
832 L</PL_parser-E<gt>bufend>.  The octets of the buffer may be intended to be
833 interpreted as either UTF-8 or Latin-1, as indicated by L</lex_bufutf8>.
834
835 Lexing code (whether in the Perl core or not) moves this pointer past
836 the characters that it consumes.  It is also expected to perform some
837 bookkeeping whenever a newline character is consumed.  This movement
838 can be more conveniently performed by the function L</lex_read_to>,
839 which handles newlines appropriately.
840
841 Interpretation of the buffer's octets can be abstracted out by
842 using the slightly higher-level functions L</lex_peek_unichar> and
843 L</lex_read_unichar>.
844
845 =for apidoc AmxU|char *|PL_parser-E<gt>linestart
846
847 Points to the start of the current line inside the lexer buffer.
848 This is useful for indicating at which column an error occurred, and
849 not much else.  This must be updated by any lexing code that consumes
850 a newline; the function L</lex_read_to> handles this detail.
851
852 =cut
853 */
854
855 /*
856 =for apidoc Amx|bool|lex_bufutf8
857
858 Indicates whether the octets in the lexer buffer
859 (L</PL_parser-E<gt>linestr>) should be interpreted as the UTF-8 encoding
860 of Unicode characters.  If not, they should be interpreted as Latin-1
861 characters.  This is analogous to the C<SvUTF8> flag for scalars.
862
863 In UTF-8 mode, it is not guaranteed that the lexer buffer actually
864 contains valid UTF-8.  Lexing code must be robust in the face of invalid
865 encoding.
866
867 The actual C<SvUTF8> flag of the L</PL_parser-E<gt>linestr> scalar
868 is significant, but not the whole story regarding the input character
869 encoding.  Normally, when a file is being read, the scalar contains octets
870 and its C<SvUTF8> flag is off, but the octets should be interpreted as
871 UTF-8 if the C<use utf8> pragma is in effect.  During a string eval,
872 however, the scalar may have the C<SvUTF8> flag on, and in this case its
873 octets should be interpreted as UTF-8 unless the C<use bytes> pragma
874 is in effect.  This logic may change in the future; use this function
875 instead of implementing the logic yourself.
876
877 =cut
878 */
879
880 bool
881 Perl_lex_bufutf8(pTHX)
882 {
883     return UTF;
884 }
885
886 /*
887 =for apidoc Amx|char *|lex_grow_linestr|STRLEN len
888
889 Reallocates the lexer buffer (L</PL_parser-E<gt>linestr>) to accommodate
890 at least I<len> octets (including terminating C<NUL>).  Returns a
891 pointer to the reallocated buffer.  This is necessary before making
892 any direct modification of the buffer that would increase its length.
893 L</lex_stuff_pvn> provides a more convenient way to insert text into
894 the buffer.
895
896 Do not use C<SvGROW> or C<sv_grow> directly on C<PL_parser-E<gt>linestr>;
897 this function updates all of the lexer's variables that point directly
898 into the buffer.
899
900 =cut
901 */
902
903 char *
904 Perl_lex_grow_linestr(pTHX_ STRLEN len)
905 {
906     SV *linestr;
907     char *buf;
908     STRLEN bufend_pos, bufptr_pos, oldbufptr_pos, oldoldbufptr_pos;
909     STRLEN linestart_pos, last_uni_pos, last_lop_pos, re_eval_start_pos;
910     linestr = PL_parser->linestr;
911     buf = SvPVX(linestr);
912     if (len <= SvLEN(linestr))
913         return buf;
914     bufend_pos = PL_parser->bufend - buf;
915     bufptr_pos = PL_parser->bufptr - buf;
916     oldbufptr_pos = PL_parser->oldbufptr - buf;
917     oldoldbufptr_pos = PL_parser->oldoldbufptr - buf;
918     linestart_pos = PL_parser->linestart - buf;
919     last_uni_pos = PL_parser->last_uni ? PL_parser->last_uni - buf : 0;
920     last_lop_pos = PL_parser->last_lop ? PL_parser->last_lop - buf : 0;
921     re_eval_start_pos = PL_parser->lex_shared->re_eval_start ?
922                             PL_parser->lex_shared->re_eval_start - buf : 0;
923
924     buf = sv_grow(linestr, len);
925
926     PL_parser->bufend = buf + bufend_pos;
927     PL_parser->bufptr = buf + bufptr_pos;
928     PL_parser->oldbufptr = buf + oldbufptr_pos;
929     PL_parser->oldoldbufptr = buf + oldoldbufptr_pos;
930     PL_parser->linestart = buf + linestart_pos;
931     if (PL_parser->last_uni)
932         PL_parser->last_uni = buf + last_uni_pos;
933     if (PL_parser->last_lop)
934         PL_parser->last_lop = buf + last_lop_pos;
935     if (PL_parser->lex_shared->re_eval_start)
936         PL_parser->lex_shared->re_eval_start  = buf + re_eval_start_pos;
937     return buf;
938 }
939
940 /*
941 =for apidoc Amx|void|lex_stuff_pvn|const char *pv|STRLEN len|U32 flags
942
943 Insert characters into the lexer buffer (L</PL_parser-E<gt>linestr>),
944 immediately after the current lexing point (L</PL_parser-E<gt>bufptr>),
945 reallocating the buffer if necessary.  This means that lexing code that
946 runs later will see the characters as if they had appeared in the input.
947 It is not recommended to do this as part of normal parsing, and most
948 uses of this facility run the risk of the inserted characters being
949 interpreted in an unintended manner.
950
951 The string to be inserted is represented by I<len> octets starting
952 at I<pv>.  These octets are interpreted as either UTF-8 or Latin-1,
953 according to whether the C<LEX_STUFF_UTF8> flag is set in I<flags>.
954 The characters are recoded for the lexer buffer, according to how the
955 buffer is currently being interpreted (L</lex_bufutf8>).  If a string
956 to be inserted is available as a Perl scalar, the L</lex_stuff_sv>
957 function is more convenient.
958
959 =cut
960 */
961
962 void
963 Perl_lex_stuff_pvn(pTHX_ const char *pv, STRLEN len, U32 flags)
964 {
965     dVAR;
966     char *bufptr;
967     PERL_ARGS_ASSERT_LEX_STUFF_PVN;
968     if (flags & ~(LEX_STUFF_UTF8))
969         Perl_croak(aTHX_ "Lexing code internal error (%s)", "lex_stuff_pvn");
970     if (UTF) {
971         if (flags & LEX_STUFF_UTF8) {
972             goto plain_copy;
973         } else {
974             STRLEN highhalf = 0;    /* Count of variants */
975             const char *p, *e = pv+len;
976             for (p = pv; p != e; p++) {
977                 if (! UTF8_IS_INVARIANT(*p)) {
978                     highhalf++;
979                 }
980             }
981             if (!highhalf)
982                 goto plain_copy;
983             lex_grow_linestr(SvCUR(PL_parser->linestr)+1+len+highhalf);
984             bufptr = PL_parser->bufptr;
985             Move(bufptr, bufptr+len+highhalf, PL_parser->bufend+1-bufptr, char);
986             SvCUR_set(PL_parser->linestr,
987                 SvCUR(PL_parser->linestr) + len+highhalf);
988             PL_parser->bufend += len+highhalf;
989             for (p = pv; p != e; p++) {
990                 U8 c = (U8)*p;
991                 if (! UTF8_IS_INVARIANT(c)) {
992                     *bufptr++ = UTF8_TWO_BYTE_HI(c);
993                     *bufptr++ = UTF8_TWO_BYTE_LO(c);
994                 } else {
995                     *bufptr++ = (char)c;
996                 }
997             }
998         }
999     } else {
1000         if (flags & LEX_STUFF_UTF8) {
1001             STRLEN highhalf = 0;
1002             const char *p, *e = pv+len;
1003             for (p = pv; p != e; p++) {
1004                 U8 c = (U8)*p;
1005                 if (UTF8_IS_ABOVE_LATIN1(c)) {
1006                     Perl_croak(aTHX_ "Lexing code attempted to stuff "
1007                                 "non-Latin-1 character into Latin-1 input");
1008                 } else if (UTF8_IS_NEXT_CHAR_DOWNGRADEABLE(p, e)) {
1009                     p++;
1010                     highhalf++;
1011                 } else if (! UTF8_IS_INVARIANT(c)) {
1012                     /* malformed UTF-8 */
1013                     ENTER;
1014                     SAVESPTR(PL_warnhook);
1015                     PL_warnhook = PERL_WARNHOOK_FATAL;
1016                     utf8n_to_uvchr((U8*)p, e-p, NULL, 0);
1017                     LEAVE;
1018                 }
1019             }
1020             if (!highhalf)
1021                 goto plain_copy;
1022             lex_grow_linestr(SvCUR(PL_parser->linestr)+1+len-highhalf);
1023             bufptr = PL_parser->bufptr;
1024             Move(bufptr, bufptr+len-highhalf, PL_parser->bufend+1-bufptr, char);
1025             SvCUR_set(PL_parser->linestr,
1026                 SvCUR(PL_parser->linestr) + len-highhalf);
1027             PL_parser->bufend += len-highhalf;
1028             p = pv;
1029             while (p < e) {
1030                 if (UTF8_IS_INVARIANT(*p)) {
1031                     *bufptr++ = *p;
1032                     p++;
1033                 }
1034                 else {
1035                     assert(p < e -1 );
1036                     *bufptr++ = TWO_BYTE_UTF8_TO_NATIVE(*p, *(p+1));
1037                     p += 2;
1038                 }
1039             }
1040         } else {
1041           plain_copy:
1042             lex_grow_linestr(SvCUR(PL_parser->linestr)+1+len);
1043             bufptr = PL_parser->bufptr;
1044             Move(bufptr, bufptr+len, PL_parser->bufend+1-bufptr, char);
1045             SvCUR_set(PL_parser->linestr, SvCUR(PL_parser->linestr) + len);
1046             PL_parser->bufend += len;
1047             Copy(pv, bufptr, len, char);
1048         }
1049     }
1050 }
1051
1052 /*
1053 =for apidoc Amx|void|lex_stuff_pv|const char *pv|U32 flags
1054
1055 Insert characters into the lexer buffer (L</PL_parser-E<gt>linestr>),
1056 immediately after the current lexing point (L</PL_parser-E<gt>bufptr>),
1057 reallocating the buffer if necessary.  This means that lexing code that
1058 runs later will see the characters as if they had appeared in the input.
1059 It is not recommended to do this as part of normal parsing, and most
1060 uses of this facility run the risk of the inserted characters being
1061 interpreted in an unintended manner.
1062
1063 The string to be inserted is represented by octets starting at I<pv>
1064 and continuing to the first nul.  These octets are interpreted as either
1065 UTF-8 or Latin-1, according to whether the C<LEX_STUFF_UTF8> flag is set
1066 in I<flags>.  The characters are recoded for the lexer buffer, according
1067 to how the buffer is currently being interpreted (L</lex_bufutf8>).
1068 If it is not convenient to nul-terminate a string to be inserted, the
1069 L</lex_stuff_pvn> function is more appropriate.
1070
1071 =cut
1072 */
1073
1074 void
1075 Perl_lex_stuff_pv(pTHX_ const char *pv, U32 flags)
1076 {
1077     PERL_ARGS_ASSERT_LEX_STUFF_PV;
1078     lex_stuff_pvn(pv, strlen(pv), flags);
1079 }
1080
1081 /*
1082 =for apidoc Amx|void|lex_stuff_sv|SV *sv|U32 flags
1083
1084 Insert characters into the lexer buffer (L</PL_parser-E<gt>linestr>),
1085 immediately after the current lexing point (L</PL_parser-E<gt>bufptr>),
1086 reallocating the buffer if necessary.  This means that lexing code that
1087 runs later will see the characters as if they had appeared in the input.
1088 It is not recommended to do this as part of normal parsing, and most
1089 uses of this facility run the risk of the inserted characters being
1090 interpreted in an unintended manner.
1091
1092 The string to be inserted is the string value of I<sv>.  The characters
1093 are recoded for the lexer buffer, according to how the buffer is currently
1094 being interpreted (L</lex_bufutf8>).  If a string to be inserted is
1095 not already a Perl scalar, the L</lex_stuff_pvn> function avoids the
1096 need to construct a scalar.
1097
1098 =cut
1099 */
1100
1101 void
1102 Perl_lex_stuff_sv(pTHX_ SV *sv, U32 flags)
1103 {
1104     char *pv;
1105     STRLEN len;
1106     PERL_ARGS_ASSERT_LEX_STUFF_SV;
1107     if (flags)
1108         Perl_croak(aTHX_ "Lexing code internal error (%s)", "lex_stuff_sv");
1109     pv = SvPV(sv, len);
1110     lex_stuff_pvn(pv, len, flags | (SvUTF8(sv) ? LEX_STUFF_UTF8 : 0));
1111 }
1112
1113 /*
1114 =for apidoc Amx|void|lex_unstuff|char *ptr
1115
1116 Discards text about to be lexed, from L</PL_parser-E<gt>bufptr> up to
1117 I<ptr>.  Text following I<ptr> will be moved, and the buffer shortened.
1118 This hides the discarded text from any lexing code that runs later,
1119 as if the text had never appeared.
1120
1121 This is not the normal way to consume lexed text.  For that, use
1122 L</lex_read_to>.
1123
1124 =cut
1125 */
1126
1127 void
1128 Perl_lex_unstuff(pTHX_ char *ptr)
1129 {
1130     char *buf, *bufend;
1131     STRLEN unstuff_len;
1132     PERL_ARGS_ASSERT_LEX_UNSTUFF;
1133     buf = PL_parser->bufptr;
1134     if (ptr < buf)
1135         Perl_croak(aTHX_ "Lexing code internal error (%s)", "lex_unstuff");
1136     if (ptr == buf)
1137         return;
1138     bufend = PL_parser->bufend;
1139     if (ptr > bufend)
1140         Perl_croak(aTHX_ "Lexing code internal error (%s)", "lex_unstuff");
1141     unstuff_len = ptr - buf;
1142     Move(ptr, buf, bufend+1-ptr, char);
1143     SvCUR_set(PL_parser->linestr, SvCUR(PL_parser->linestr) - unstuff_len);
1144     PL_parser->bufend = bufend - unstuff_len;
1145 }
1146
1147 /*
1148 =for apidoc Amx|void|lex_read_to|char *ptr
1149
1150 Consume text in the lexer buffer, from L</PL_parser-E<gt>bufptr> up
1151 to I<ptr>.  This advances L</PL_parser-E<gt>bufptr> to match I<ptr>,
1152 performing the correct bookkeeping whenever a newline character is passed.
1153 This is the normal way to consume lexed text.
1154
1155 Interpretation of the buffer's octets can be abstracted out by
1156 using the slightly higher-level functions L</lex_peek_unichar> and
1157 L</lex_read_unichar>.
1158
1159 =cut
1160 */
1161
1162 void
1163 Perl_lex_read_to(pTHX_ char *ptr)
1164 {
1165     char *s;
1166     PERL_ARGS_ASSERT_LEX_READ_TO;
1167     s = PL_parser->bufptr;
1168     if (ptr < s || ptr > PL_parser->bufend)
1169         Perl_croak(aTHX_ "Lexing code internal error (%s)", "lex_read_to");
1170     for (; s != ptr; s++)
1171         if (*s == '\n') {
1172             COPLINE_INC_WITH_HERELINES;
1173             PL_parser->linestart = s+1;
1174         }
1175     PL_parser->bufptr = ptr;
1176 }
1177
1178 /*
1179 =for apidoc Amx|void|lex_discard_to|char *ptr
1180
1181 Discards the first part of the L</PL_parser-E<gt>linestr> buffer,
1182 up to I<ptr>.  The remaining content of the buffer will be moved, and
1183 all pointers into the buffer updated appropriately.  I<ptr> must not
1184 be later in the buffer than the position of L</PL_parser-E<gt>bufptr>:
1185 it is not permitted to discard text that has yet to be lexed.
1186
1187 Normally it is not necessarily to do this directly, because it suffices to
1188 use the implicit discarding behaviour of L</lex_next_chunk> and things
1189 based on it.  However, if a token stretches across multiple lines,
1190 and the lexing code has kept multiple lines of text in the buffer for
1191 that purpose, then after completion of the token it would be wise to
1192 explicitly discard the now-unneeded earlier lines, to avoid future
1193 multi-line tokens growing the buffer without bound.
1194
1195 =cut
1196 */
1197
1198 void
1199 Perl_lex_discard_to(pTHX_ char *ptr)
1200 {
1201     char *buf;
1202     STRLEN discard_len;
1203     PERL_ARGS_ASSERT_LEX_DISCARD_TO;
1204     buf = SvPVX(PL_parser->linestr);
1205     if (ptr < buf)
1206         Perl_croak(aTHX_ "Lexing code internal error (%s)", "lex_discard_to");
1207     if (ptr == buf)
1208         return;
1209     if (ptr > PL_parser->bufptr)
1210         Perl_croak(aTHX_ "Lexing code internal error (%s)", "lex_discard_to");
1211     discard_len = ptr - buf;
1212     if (PL_parser->oldbufptr < ptr)
1213         PL_parser->oldbufptr = ptr;
1214     if (PL_parser->oldoldbufptr < ptr)
1215         PL_parser->oldoldbufptr = ptr;
1216     if (PL_parser->last_uni && PL_parser->last_uni < ptr)
1217         PL_parser->last_uni = NULL;
1218     if (PL_parser->last_lop && PL_parser->last_lop < ptr)
1219         PL_parser->last_lop = NULL;
1220     Move(ptr, buf, PL_parser->bufend+1-ptr, char);
1221     SvCUR_set(PL_parser->linestr, SvCUR(PL_parser->linestr) - discard_len);
1222     PL_parser->bufend -= discard_len;
1223     PL_parser->bufptr -= discard_len;
1224     PL_parser->oldbufptr -= discard_len;
1225     PL_parser->oldoldbufptr -= discard_len;
1226     if (PL_parser->last_uni)
1227         PL_parser->last_uni -= discard_len;
1228     if (PL_parser->last_lop)
1229         PL_parser->last_lop -= discard_len;
1230 }
1231
1232 /*
1233 =for apidoc Amx|bool|lex_next_chunk|U32 flags
1234
1235 Reads in the next chunk of text to be lexed, appending it to
1236 L</PL_parser-E<gt>linestr>.  This should be called when lexing code has
1237 looked to the end of the current chunk and wants to know more.  It is
1238 usual, but not necessary, for lexing to have consumed the entirety of
1239 the current chunk at this time.
1240
1241 If L</PL_parser-E<gt>bufptr> is pointing to the very end of the current
1242 chunk (i.e., the current chunk has been entirely consumed), normally the
1243 current chunk will be discarded at the same time that the new chunk is
1244 read in.  If I<flags> includes C<LEX_KEEP_PREVIOUS>, the current chunk
1245 will not be discarded.  If the current chunk has not been entirely
1246 consumed, then it will not be discarded regardless of the flag.
1247
1248 Returns true if some new text was added to the buffer, or false if the
1249 buffer has reached the end of the input text.
1250
1251 =cut
1252 */
1253
1254 #define LEX_FAKE_EOF 0x80000000
1255 #define LEX_NO_TERM  0x40000000 /* here-doc */
1256
1257 bool
1258 Perl_lex_next_chunk(pTHX_ U32 flags)
1259 {
1260     SV *linestr;
1261     char *buf;
1262     STRLEN old_bufend_pos, new_bufend_pos;
1263     STRLEN bufptr_pos, oldbufptr_pos, oldoldbufptr_pos;
1264     STRLEN linestart_pos, last_uni_pos, last_lop_pos;
1265     bool got_some_for_debugger = 0;
1266     bool got_some;
1267     if (flags & ~(LEX_KEEP_PREVIOUS|LEX_FAKE_EOF|LEX_NO_TERM))
1268         Perl_croak(aTHX_ "Lexing code internal error (%s)", "lex_next_chunk");
1269     if (!(flags & LEX_NO_TERM) && PL_lex_inwhat)
1270         return FALSE;
1271     linestr = PL_parser->linestr;
1272     buf = SvPVX(linestr);
1273     if (!(flags & LEX_KEEP_PREVIOUS) &&
1274             PL_parser->bufptr == PL_parser->bufend) {
1275         old_bufend_pos = bufptr_pos = oldbufptr_pos = oldoldbufptr_pos = 0;
1276         linestart_pos = 0;
1277         if (PL_parser->last_uni != PL_parser->bufend)
1278             PL_parser->last_uni = NULL;
1279         if (PL_parser->last_lop != PL_parser->bufend)
1280             PL_parser->last_lop = NULL;
1281         last_uni_pos = last_lop_pos = 0;
1282         *buf = 0;
1283         SvCUR(linestr) = 0;
1284     } else {
1285         old_bufend_pos = PL_parser->bufend - buf;
1286         bufptr_pos = PL_parser->bufptr - buf;
1287         oldbufptr_pos = PL_parser->oldbufptr - buf;
1288         oldoldbufptr_pos = PL_parser->oldoldbufptr - buf;
1289         linestart_pos = PL_parser->linestart - buf;
1290         last_uni_pos = PL_parser->last_uni ? PL_parser->last_uni - buf : 0;
1291         last_lop_pos = PL_parser->last_lop ? PL_parser->last_lop - buf : 0;
1292     }
1293     if (flags & LEX_FAKE_EOF) {
1294         goto eof;
1295     } else if (!PL_parser->rsfp && !PL_parser->filtered) {
1296         got_some = 0;
1297     } else if (filter_gets(linestr, old_bufend_pos)) {
1298         got_some = 1;
1299         got_some_for_debugger = 1;
1300     } else if (flags & LEX_NO_TERM) {
1301         got_some = 0;
1302     } else {
1303         if (!SvPOK(linestr))   /* can get undefined by filter_gets */
1304             sv_setpvs(linestr, "");
1305         eof:
1306         /* End of real input.  Close filehandle (unless it was STDIN),
1307          * then add implicit termination.
1308          */
1309         if (PL_parser->lex_flags & LEX_DONT_CLOSE_RSFP)
1310             PerlIO_clearerr(PL_parser->rsfp);
1311         else if (PL_parser->rsfp)
1312             (void)PerlIO_close(PL_parser->rsfp);
1313         PL_parser->rsfp = NULL;
1314         PL_parser->in_pod = PL_parser->filtered = 0;
1315         if (!PL_in_eval && PL_minus_p) {
1316             sv_catpvs(linestr,
1317                 /*{*/";}continue{print or die qq(-p destination: $!\\n);}");
1318             PL_minus_n = PL_minus_p = 0;
1319         } else if (!PL_in_eval && PL_minus_n) {
1320             sv_catpvs(linestr, /*{*/";}");
1321             PL_minus_n = 0;
1322         } else
1323             sv_catpvs(linestr, ";");
1324         got_some = 1;
1325     }
1326     buf = SvPVX(linestr);
1327     new_bufend_pos = SvCUR(linestr);
1328     PL_parser->bufend = buf + new_bufend_pos;
1329     PL_parser->bufptr = buf + bufptr_pos;
1330     PL_parser->oldbufptr = buf + oldbufptr_pos;
1331     PL_parser->oldoldbufptr = buf + oldoldbufptr_pos;
1332     PL_parser->linestart = buf + linestart_pos;
1333     if (PL_parser->last_uni)
1334         PL_parser->last_uni = buf + last_uni_pos;
1335     if (PL_parser->last_lop)
1336         PL_parser->last_lop = buf + last_lop_pos;
1337     if (PL_parser->preambling != NOLINE) {
1338         CopLINE_set(PL_curcop, PL_parser->preambling + 1);
1339         PL_parser->preambling = NOLINE;
1340     }
1341     if (got_some_for_debugger && (PERLDB_LINE || PERLDB_SAVESRC) &&
1342             PL_curstash != PL_debstash) {
1343         /* debugger active and we're not compiling the debugger code,
1344          * so store the line into the debugger's array of lines
1345          */
1346         update_debugger_info(NULL, buf+old_bufend_pos,
1347             new_bufend_pos-old_bufend_pos);
1348     }
1349     return got_some;
1350 }
1351
1352 /*
1353 =for apidoc Amx|I32|lex_peek_unichar|U32 flags
1354
1355 Looks ahead one (Unicode) character in the text currently being lexed.
1356 Returns the codepoint (unsigned integer value) of the next character,
1357 or -1 if lexing has reached the end of the input text.  To consume the
1358 peeked character, use L</lex_read_unichar>.
1359
1360 If the next character is in (or extends into) the next chunk of input
1361 text, the next chunk will be read in.  Normally the current chunk will be
1362 discarded at the same time, but if I<flags> includes C<LEX_KEEP_PREVIOUS>
1363 then the current chunk will not be discarded.
1364
1365 If the input is being interpreted as UTF-8 and a UTF-8 encoding error
1366 is encountered, an exception is generated.
1367
1368 =cut
1369 */
1370
1371 I32
1372 Perl_lex_peek_unichar(pTHX_ U32 flags)
1373 {
1374     dVAR;
1375     char *s, *bufend;
1376     if (flags & ~(LEX_KEEP_PREVIOUS))
1377         Perl_croak(aTHX_ "Lexing code internal error (%s)", "lex_peek_unichar");
1378     s = PL_parser->bufptr;
1379     bufend = PL_parser->bufend;
1380     if (UTF) {
1381         U8 head;
1382         I32 unichar;
1383         STRLEN len, retlen;
1384         if (s == bufend) {
1385             if (!lex_next_chunk(flags))
1386                 return -1;
1387             s = PL_parser->bufptr;
1388             bufend = PL_parser->bufend;
1389         }
1390         head = (U8)*s;
1391         if (UTF8_IS_INVARIANT(head))
1392             return head;
1393         if (UTF8_IS_START(head)) {
1394             len = UTF8SKIP(&head);
1395             while ((STRLEN)(bufend-s) < len) {
1396                 if (!lex_next_chunk(flags | LEX_KEEP_PREVIOUS))
1397                     break;
1398                 s = PL_parser->bufptr;
1399                 bufend = PL_parser->bufend;
1400             }
1401         }
1402         unichar = utf8n_to_uvchr((U8*)s, bufend-s, &retlen, UTF8_CHECK_ONLY);
1403         if (retlen == (STRLEN)-1) {
1404             /* malformed UTF-8 */
1405             ENTER;
1406             SAVESPTR(PL_warnhook);
1407             PL_warnhook = PERL_WARNHOOK_FATAL;
1408             utf8n_to_uvchr((U8*)s, bufend-s, NULL, 0);
1409             LEAVE;
1410         }
1411         return unichar;
1412     } else {
1413         if (s == bufend) {
1414             if (!lex_next_chunk(flags))
1415                 return -1;
1416             s = PL_parser->bufptr;
1417         }
1418         return (U8)*s;
1419     }
1420 }
1421
1422 /*
1423 =for apidoc Amx|I32|lex_read_unichar|U32 flags
1424
1425 Reads the next (Unicode) character in the text currently being lexed.
1426 Returns the codepoint (unsigned integer value) of the character read,
1427 and moves L</PL_parser-E<gt>bufptr> past the character, or returns -1
1428 if lexing has reached the end of the input text.  To non-destructively
1429 examine the next character, use L</lex_peek_unichar> instead.
1430
1431 If the next character is in (or extends into) the next chunk of input
1432 text, the next chunk will be read in.  Normally the current chunk will be
1433 discarded at the same time, but if I<flags> includes C<LEX_KEEP_PREVIOUS>
1434 then the current chunk will not be discarded.
1435
1436 If the input is being interpreted as UTF-8 and a UTF-8 encoding error
1437 is encountered, an exception is generated.
1438
1439 =cut
1440 */
1441
1442 I32
1443 Perl_lex_read_unichar(pTHX_ U32 flags)
1444 {
1445     I32 c;
1446     if (flags & ~(LEX_KEEP_PREVIOUS))
1447         Perl_croak(aTHX_ "Lexing code internal error (%s)", "lex_read_unichar");
1448     c = lex_peek_unichar(flags);
1449     if (c != -1) {
1450         if (c == '\n')
1451             COPLINE_INC_WITH_HERELINES;
1452         if (UTF)
1453             PL_parser->bufptr += UTF8SKIP(PL_parser->bufptr);
1454         else
1455             ++(PL_parser->bufptr);
1456     }
1457     return c;
1458 }
1459
1460 /*
1461 =for apidoc Amx|void|lex_read_space|U32 flags
1462
1463 Reads optional spaces, in Perl style, in the text currently being
1464 lexed.  The spaces may include ordinary whitespace characters and
1465 Perl-style comments.  C<#line> directives are processed if encountered.
1466 L</PL_parser-E<gt>bufptr> is moved past the spaces, so that it points
1467 at a non-space character (or the end of the input text).
1468
1469 If spaces extend into the next chunk of input text, the next chunk will
1470 be read in.  Normally the current chunk will be discarded at the same
1471 time, but if I<flags> includes C<LEX_KEEP_PREVIOUS> then the current
1472 chunk will not be discarded.
1473
1474 =cut
1475 */
1476
1477 #define LEX_NO_INCLINE    0x40000000
1478 #define LEX_NO_NEXT_CHUNK 0x80000000
1479
1480 void
1481 Perl_lex_read_space(pTHX_ U32 flags)
1482 {
1483     char *s, *bufend;
1484     const bool can_incline = !(flags & LEX_NO_INCLINE);
1485     bool need_incline = 0;
1486     if (flags & ~(LEX_KEEP_PREVIOUS|LEX_NO_NEXT_CHUNK|LEX_NO_INCLINE))
1487         Perl_croak(aTHX_ "Lexing code internal error (%s)", "lex_read_space");
1488     s = PL_parser->bufptr;
1489     bufend = PL_parser->bufend;
1490     while (1) {
1491         char c = *s;
1492         if (c == '#') {
1493             do {
1494                 c = *++s;
1495             } while (!(c == '\n' || (c == 0 && s == bufend)));
1496         } else if (c == '\n') {
1497             s++;
1498             if (can_incline) {
1499                 PL_parser->linestart = s;
1500                 if (s == bufend)
1501                     need_incline = 1;
1502                 else
1503                     incline(s);
1504             }
1505         } else if (isSPACE(c)) {
1506             s++;
1507         } else if (c == 0 && s == bufend) {
1508             bool got_more;
1509             line_t l;
1510             if (flags & LEX_NO_NEXT_CHUNK)
1511                 break;
1512             PL_parser->bufptr = s;
1513             l = CopLINE(PL_curcop);
1514             CopLINE(PL_curcop) += PL_parser->herelines + 1;
1515             got_more = lex_next_chunk(flags);
1516             CopLINE_set(PL_curcop, l);
1517             s = PL_parser->bufptr;
1518             bufend = PL_parser->bufend;
1519             if (!got_more)
1520                 break;
1521             if (can_incline && need_incline && PL_parser->rsfp) {
1522                 incline(s);
1523                 need_incline = 0;
1524             }
1525         } else if (!c) {
1526             s++;
1527         } else {
1528             break;
1529         }
1530     }
1531     PL_parser->bufptr = s;
1532 }
1533
1534 /*
1535
1536 =for apidoc EXMp|bool|validate_proto|SV *name|SV *proto|bool warn
1537
1538 This function performs syntax checking on a prototype, C<proto>.
1539 If C<warn> is true, any illegal characters or mismatched brackets
1540 will trigger illegalproto warnings, declaring that they were
1541 detected in the prototype for C<name>.
1542
1543 The return value is C<true> if this is a valid prototype, and
1544 C<false> if it is not, regardless of whether C<warn> was C<true> or
1545 C<false>.
1546
1547 Note that C<NULL> is a valid C<proto> and will always return C<true>.
1548
1549 =cut
1550
1551  */
1552
1553 bool
1554 Perl_validate_proto(pTHX_ SV *name, SV *proto, bool warn)
1555 {
1556     STRLEN len, origlen;
1557     char *p = proto ? SvPV(proto, len) : NULL;
1558     bool bad_proto = FALSE;
1559     bool in_brackets = FALSE;
1560     bool after_slash = FALSE;
1561     char greedy_proto = ' ';
1562     bool proto_after_greedy_proto = FALSE;
1563     bool must_be_last = FALSE;
1564     bool underscore = FALSE;
1565     bool bad_proto_after_underscore = FALSE;
1566
1567     PERL_ARGS_ASSERT_VALIDATE_PROTO;
1568
1569     if (!proto)
1570         return TRUE;
1571
1572     origlen = len;
1573     for (; len--; p++) {
1574         if (!isSPACE(*p)) {
1575             if (must_be_last)
1576                 proto_after_greedy_proto = TRUE;
1577             if (underscore) {
1578                 if (!strchr(";@%", *p))
1579                     bad_proto_after_underscore = TRUE;
1580                 underscore = FALSE;
1581             }
1582             if (!strchr("$@%*;[]&\\_+", *p) || *p == '\0') {
1583                 bad_proto = TRUE;
1584             }
1585             else {
1586                 if (*p == '[')
1587                     in_brackets = TRUE;
1588                 else if (*p == ']')
1589                     in_brackets = FALSE;
1590                 else if ((*p == '@' || *p == '%') &&
1591                     !after_slash &&
1592                     !in_brackets ) {
1593                     must_be_last = TRUE;
1594                     greedy_proto = *p;
1595                 }
1596                 else if (*p == '_')
1597                     underscore = TRUE;
1598             }
1599             if (*p == '\\')
1600                 after_slash = TRUE;
1601             else
1602                 after_slash = FALSE;
1603         }
1604     }
1605
1606     if (warn) {
1607         SV *tmpsv = newSVpvs_flags("", SVs_TEMP);
1608         p -= origlen;
1609         p = SvUTF8(proto)
1610             ? sv_uni_display(tmpsv, newSVpvn_flags(p, origlen, SVs_TEMP | SVf_UTF8),
1611                              origlen, UNI_DISPLAY_ISPRINT)
1612             : pv_pretty(tmpsv, p, origlen, 60, NULL, NULL, PERL_PV_ESCAPE_NONASCII);
1613
1614         if (proto_after_greedy_proto)
1615             Perl_warner(aTHX_ packWARN(WARN_ILLEGALPROTO),
1616                         "Prototype after '%c' for %"SVf" : %s",
1617                         greedy_proto, SVfARG(name), p);
1618         if (in_brackets)
1619             Perl_warner(aTHX_ packWARN(WARN_ILLEGALPROTO),
1620                         "Missing ']' in prototype for %"SVf" : %s",
1621                         SVfARG(name), p);
1622         if (bad_proto)
1623             Perl_warner(aTHX_ packWARN(WARN_ILLEGALPROTO),
1624                         "Illegal character in prototype for %"SVf" : %s",
1625                         SVfARG(name), p);
1626         if (bad_proto_after_underscore)
1627             Perl_warner(aTHX_ packWARN(WARN_ILLEGALPROTO),
1628                         "Illegal character after '_' in prototype for %"SVf" : %s",
1629                         SVfARG(name), p);
1630     }
1631
1632     return (! (proto_after_greedy_proto || bad_proto) );
1633 }
1634
1635 /*
1636  * S_incline
1637  * This subroutine has nothing to do with tilting, whether at windmills
1638  * or pinball tables.  Its name is short for "increment line".  It
1639  * increments the current line number in CopLINE(PL_curcop) and checks
1640  * to see whether the line starts with a comment of the form
1641  *    # line 500 "foo.pm"
1642  * If so, it sets the current line number and file to the values in the comment.
1643  */
1644
1645 STATIC void
1646 S_incline(pTHX_ const char *s)
1647 {
1648     const char *t;
1649     const char *n;
1650     const char *e;
1651     line_t line_num;
1652     UV uv;
1653
1654     PERL_ARGS_ASSERT_INCLINE;
1655
1656     COPLINE_INC_WITH_HERELINES;
1657     if (!PL_rsfp && !PL_parser->filtered && PL_lex_state == LEX_NORMAL
1658      && s+1 == PL_bufend && *s == ';') {
1659         /* fake newline in string eval */
1660         CopLINE_dec(PL_curcop);
1661         return;
1662     }
1663     if (*s++ != '#')
1664         return;
1665     while (SPACE_OR_TAB(*s))
1666         s++;
1667     if (strnEQ(s, "line", 4))
1668         s += 4;
1669     else
1670         return;
1671     if (SPACE_OR_TAB(*s))
1672         s++;
1673     else
1674         return;
1675     while (SPACE_OR_TAB(*s))
1676         s++;
1677     if (!isDIGIT(*s))
1678         return;
1679
1680     n = s;
1681     while (isDIGIT(*s))
1682         s++;
1683     if (!SPACE_OR_TAB(*s) && *s != '\r' && *s != '\n' && *s != '\0')
1684         return;
1685     while (SPACE_OR_TAB(*s))
1686         s++;
1687     if (*s == '"' && (t = strchr(s+1, '"'))) {
1688         s++;
1689         e = t + 1;
1690     }
1691     else {
1692         t = s;
1693         while (!isSPACE(*t))
1694             t++;
1695         e = t;
1696     }
1697     while (SPACE_OR_TAB(*e) || *e == '\r' || *e == '\f')
1698         e++;
1699     if (*e != '\n' && *e != '\0')
1700         return;         /* false alarm */
1701
1702     if (!grok_atoUV(n, &uv, &e))
1703         return;
1704     line_num = ((line_t)uv) - 1;
1705
1706     if (t - s > 0) {
1707         const STRLEN len = t - s;
1708
1709         if (!PL_rsfp && !PL_parser->filtered) {
1710             /* must copy *{"::_<(eval N)[oldfilename:L]"}
1711              * to *{"::_<newfilename"} */
1712             /* However, the long form of evals is only turned on by the
1713                debugger - usually they're "(eval %lu)" */
1714             GV * const cfgv = CopFILEGV(PL_curcop);
1715             if (cfgv) {
1716                 char smallbuf[128];
1717                 STRLEN tmplen2 = len;
1718                 char *tmpbuf2;
1719                 GV *gv2;
1720
1721                 if (tmplen2 + 2 <= sizeof smallbuf)
1722                     tmpbuf2 = smallbuf;
1723                 else
1724                     Newx(tmpbuf2, tmplen2 + 2, char);
1725
1726                 tmpbuf2[0] = '_';
1727                 tmpbuf2[1] = '<';
1728
1729                 memcpy(tmpbuf2 + 2, s, tmplen2);
1730                 tmplen2 += 2;
1731
1732                 gv2 = *(GV**)hv_fetch(PL_defstash, tmpbuf2, tmplen2, TRUE);
1733                 if (!isGV(gv2)) {
1734                     gv_init(gv2, PL_defstash, tmpbuf2, tmplen2, FALSE);
1735                     /* adjust ${"::_<newfilename"} to store the new file name */
1736                     GvSV(gv2) = newSVpvn(tmpbuf2 + 2, tmplen2 - 2);
1737                     /* The line number may differ. If that is the case,
1738                        alias the saved lines that are in the array.
1739                        Otherwise alias the whole array. */
1740                     if (CopLINE(PL_curcop) == line_num) {
1741                         GvHV(gv2) = MUTABLE_HV(SvREFCNT_inc(GvHV(cfgv)));
1742                         GvAV(gv2) = MUTABLE_AV(SvREFCNT_inc(GvAV(cfgv)));
1743                     }
1744                     else if (GvAV(cfgv)) {
1745                         AV * const av = GvAV(cfgv);
1746                         const I32 start = CopLINE(PL_curcop)+1;
1747                         I32 items = AvFILLp(av) - start;
1748                         if (items > 0) {
1749                             AV * const av2 = GvAVn(gv2);
1750                             SV **svp = AvARRAY(av) + start;
1751                             I32 l = (I32)line_num+1;
1752                             while (items--)
1753                                 av_store(av2, l++, SvREFCNT_inc(*svp++));
1754                         }
1755                     }
1756                 }
1757
1758                 if (tmpbuf2 != smallbuf) Safefree(tmpbuf2);
1759             }
1760         }
1761         CopFILE_free(PL_curcop);
1762         CopFILE_setn(PL_curcop, s, len);
1763     }
1764     CopLINE_set(PL_curcop, line_num);
1765 }
1766
1767 #define skipspace(s) skipspace_flags(s, 0)
1768
1769
1770 STATIC void
1771 S_update_debugger_info(pTHX_ SV *orig_sv, const char *const buf, STRLEN len)
1772 {
1773     AV *av = CopFILEAVx(PL_curcop);
1774     if (av) {
1775         SV * sv;
1776         if (PL_parser->preambling == NOLINE) sv = newSV_type(SVt_PVMG);
1777         else {
1778             sv = *av_fetch(av, 0, 1);
1779             SvUPGRADE(sv, SVt_PVMG);
1780         }
1781         if (!SvPOK(sv)) sv_setpvs(sv,"");
1782         if (orig_sv)
1783             sv_catsv(sv, orig_sv);
1784         else
1785             sv_catpvn(sv, buf, len);
1786         if (!SvIOK(sv)) {
1787             (void)SvIOK_on(sv);
1788             SvIV_set(sv, 0);
1789         }
1790         if (PL_parser->preambling == NOLINE)
1791             av_store(av, CopLINE(PL_curcop), sv);
1792     }
1793 }
1794
1795 /*
1796  * S_skipspace
1797  * Called to gobble the appropriate amount and type of whitespace.
1798  * Skips comments as well.
1799  */
1800
1801 STATIC char *
1802 S_skipspace_flags(pTHX_ char *s, U32 flags)
1803 {
1804     PERL_ARGS_ASSERT_SKIPSPACE_FLAGS;
1805     if (PL_lex_formbrack && PL_lex_brackets <= PL_lex_formbrack) {
1806         while (s < PL_bufend && (SPACE_OR_TAB(*s) || !*s))
1807             s++;
1808     } else {
1809         STRLEN bufptr_pos = PL_bufptr - SvPVX(PL_linestr);
1810         PL_bufptr = s;
1811         lex_read_space(flags | LEX_KEEP_PREVIOUS |
1812                 (PL_lex_inwhat || PL_lex_state == LEX_FORMLINE ?
1813                     LEX_NO_NEXT_CHUNK : 0));
1814         s = PL_bufptr;
1815         PL_bufptr = SvPVX(PL_linestr) + bufptr_pos;
1816         if (PL_linestart > PL_bufptr)
1817             PL_bufptr = PL_linestart;
1818         return s;
1819     }
1820     return s;
1821 }
1822
1823 /*
1824  * S_check_uni
1825  * Check the unary operators to ensure there's no ambiguity in how they're
1826  * used.  An ambiguous piece of code would be:
1827  *     rand + 5
1828  * This doesn't mean rand() + 5.  Because rand() is a unary operator,
1829  * the +5 is its argument.
1830  */
1831
1832 STATIC void
1833 S_check_uni(pTHX)
1834 {
1835     const char *s;
1836     const char *t;
1837
1838     if (PL_oldoldbufptr != PL_last_uni)
1839         return;
1840     while (isSPACE(*PL_last_uni))
1841         PL_last_uni++;
1842     s = PL_last_uni;
1843     while (isWORDCHAR_lazy_if(s,UTF) || *s == '-')
1844         s++;
1845     if ((t = strchr(s, '(')) && t < PL_bufptr)
1846         return;
1847
1848     Perl_ck_warner_d(aTHX_ packWARN(WARN_AMBIGUOUS),
1849                      "Warning: Use of \"%.*s\" without parentheses is ambiguous",
1850                      (int)(s - PL_last_uni), PL_last_uni);
1851 }
1852
1853 /*
1854  * LOP : macro to build a list operator.  Its behaviour has been replaced
1855  * with a subroutine, S_lop() for which LOP is just another name.
1856  */
1857
1858 #define LOP(f,x) return lop(f,x,s)
1859
1860 /*
1861  * S_lop
1862  * Build a list operator (or something that might be one).  The rules:
1863  *  - if we have a next token, then it's a list operator (no parens) for
1864  *    which the next token has already been parsed; e.g.,
1865  *       sort foo @args
1866  *       sort foo (@args)
1867  *  - if the next thing is an opening paren, then it's a function
1868  *  - else it's a list operator
1869  */
1870
1871 STATIC I32
1872 S_lop(pTHX_ I32 f, int x, char *s)
1873 {
1874     PERL_ARGS_ASSERT_LOP;
1875
1876     pl_yylval.ival = f;
1877     CLINE;
1878     PL_bufptr = s;
1879     PL_last_lop = PL_oldbufptr;
1880     PL_last_lop_op = (OPCODE)f;
1881     if (PL_nexttoke)
1882         goto lstop;
1883     PL_expect = x;
1884     if (*s == '(')
1885         return REPORT(FUNC);
1886     s = skipspace(s);
1887     if (*s == '(')
1888         return REPORT(FUNC);
1889     else {
1890         lstop:
1891         if (!PL_lex_allbrackets && PL_lex_fakeeof > LEX_FAKEEOF_LOWLOGIC)
1892             PL_lex_fakeeof = LEX_FAKEEOF_LOWLOGIC;
1893         return REPORT(LSTOP);
1894     }
1895 }
1896
1897 /*
1898  * S_force_next
1899  * When the lexer realizes it knows the next token (for instance,
1900  * it is reordering tokens for the parser) then it can call S_force_next
1901  * to know what token to return the next time the lexer is called.  Caller
1902  * will need to set PL_nextval[] and possibly PL_expect to ensure
1903  * the lexer handles the token correctly.
1904  */
1905
1906 STATIC void
1907 S_force_next(pTHX_ I32 type)
1908 {
1909 #ifdef DEBUGGING
1910     if (DEBUG_T_TEST) {
1911         PerlIO_printf(Perl_debug_log, "### forced token:\n");
1912         tokereport(type, &NEXTVAL_NEXTTOKE);
1913     }
1914 #endif
1915     assert(PL_nexttoke < C_ARRAY_LENGTH(PL_nexttype));
1916     PL_nexttype[PL_nexttoke] = type;
1917     PL_nexttoke++;
1918     if (PL_lex_state != LEX_KNOWNEXT) {
1919         PL_lex_defer = PL_lex_state;
1920         PL_lex_state = LEX_KNOWNEXT;
1921     }
1922 }
1923
1924 /*
1925  * S_postderef
1926  *
1927  * This subroutine handles postfix deref syntax after the arrow has already
1928  * been emitted.  @* $* etc. are emitted as two separate token right here.
1929  * @[ @{ %[ %{ *{ are emitted also as two tokens, but this function emits
1930  * only the first, leaving yylex to find the next.
1931  */
1932
1933 static int
1934 S_postderef(pTHX_ int const funny, char const next)
1935 {
1936     assert(funny == DOLSHARP || strchr("$@%&*", funny));
1937     assert(strchr("*[{", next));
1938     if (next == '*') {
1939         PL_expect = XOPERATOR;
1940         if (PL_lex_state == LEX_INTERPNORMAL && !PL_lex_brackets) {
1941             assert('@' == funny || '$' == funny || DOLSHARP == funny);
1942             PL_lex_state = LEX_INTERPEND;
1943             force_next(POSTJOIN);
1944         }
1945         force_next(next);
1946         PL_bufptr+=2;
1947     }
1948     else {
1949         if ('@' == funny && PL_lex_state == LEX_INTERPNORMAL
1950          && !PL_lex_brackets)
1951             PL_lex_dojoin = 2;
1952         PL_expect = XOPERATOR;
1953         PL_bufptr++;
1954     }
1955     return funny;
1956 }
1957
1958 void
1959 Perl_yyunlex(pTHX)
1960 {
1961     int yyc = PL_parser->yychar;
1962     if (yyc != YYEMPTY) {
1963         if (yyc) {
1964             NEXTVAL_NEXTTOKE = PL_parser->yylval;
1965             if (yyc == '{'/*}*/ || yyc == HASHBRACK || yyc == '['/*]*/) {
1966                 PL_lex_allbrackets--;
1967                 PL_lex_brackets--;
1968                 yyc |= (3<<24) | (PL_lex_brackstack[PL_lex_brackets] << 16);
1969             } else if (yyc == '('/*)*/) {
1970                 PL_lex_allbrackets--;
1971                 yyc |= (2<<24);
1972             }
1973             force_next(yyc);
1974         }
1975         PL_parser->yychar = YYEMPTY;
1976     }
1977 }
1978
1979 STATIC SV *
1980 S_newSV_maybe_utf8(pTHX_ const char *const start, STRLEN len)
1981 {
1982     SV * const sv = newSVpvn_utf8(start, len,
1983                                   !IN_BYTES
1984                                   && UTF
1985                                   && !is_invariant_string((const U8*)start, len)
1986                                   && is_utf8_string((const U8*)start, len));
1987     return sv;
1988 }
1989
1990 /*
1991  * S_force_word
1992  * When the lexer knows the next thing is a word (for instance, it has
1993  * just seen -> and it knows that the next char is a word char, then
1994  * it calls S_force_word to stick the next word into the PL_nexttoke/val
1995  * lookahead.
1996  *
1997  * Arguments:
1998  *   char *start : buffer position (must be within PL_linestr)
1999  *   int token   : PL_next* will be this type of bare word (e.g., METHOD,WORD)
2000  *   int check_keyword : if true, Perl checks to make sure the word isn't
2001  *       a keyword (do this if the word is a label, e.g. goto FOO)
2002  *   int allow_pack : if true, : characters will also be allowed (require,
2003  *       use, etc. do this)
2004  */
2005
2006 STATIC char *
2007 S_force_word(pTHX_ char *start, int token, int check_keyword, int allow_pack)
2008 {
2009     char *s;
2010     STRLEN len;
2011
2012     PERL_ARGS_ASSERT_FORCE_WORD;
2013
2014     start = skipspace(start);
2015     s = start;
2016     if (isIDFIRST_lazy_if(s,UTF) ||
2017         (allow_pack && *s == ':') )
2018     {
2019         s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, allow_pack, &len);
2020         if (check_keyword) {
2021           char *s2 = PL_tokenbuf;
2022           STRLEN len2 = len;
2023           if (allow_pack && len > 6 && strnEQ(s2, "CORE::", 6))
2024             s2 += 6, len2 -= 6;
2025           if (keyword(s2, len2, 0))
2026             return start;
2027         }
2028         if (token == METHOD) {
2029             s = skipspace(s);
2030             if (*s == '(')
2031                 PL_expect = XTERM;
2032             else {
2033                 PL_expect = XOPERATOR;
2034             }
2035         }
2036         NEXTVAL_NEXTTOKE.opval
2037             = (OP*)newSVOP(OP_CONST,0,
2038                            S_newSV_maybe_utf8(aTHX_ PL_tokenbuf, len));
2039         NEXTVAL_NEXTTOKE.opval->op_private |= OPpCONST_BARE;
2040         force_next(token);
2041     }
2042     return s;
2043 }
2044
2045 /*
2046  * S_force_ident
2047  * Called when the lexer wants $foo *foo &foo etc, but the program
2048  * text only contains the "foo" portion.  The first argument is a pointer
2049  * to the "foo", and the second argument is the type symbol to prefix.
2050  * Forces the next token to be a "WORD".
2051  * Creates the symbol if it didn't already exist (via gv_fetchpv()).
2052  */
2053
2054 STATIC void
2055 S_force_ident(pTHX_ const char *s, int kind)
2056 {
2057     PERL_ARGS_ASSERT_FORCE_IDENT;
2058
2059     if (s[0]) {
2060         const STRLEN len = s[1] ? strlen(s) : 1; /* s = "\"" see yylex */
2061         OP* const o = (OP*)newSVOP(OP_CONST, 0, newSVpvn_flags(s, len,
2062                                                                 UTF ? SVf_UTF8 : 0));
2063         NEXTVAL_NEXTTOKE.opval = o;
2064         force_next(WORD);
2065         if (kind) {
2066             o->op_private = OPpCONST_ENTERED;
2067             /* XXX see note in pp_entereval() for why we forgo typo
2068                warnings if the symbol must be introduced in an eval.
2069                GSAR 96-10-12 */
2070             gv_fetchpvn_flags(s, len,
2071                               (PL_in_eval ? GV_ADDMULTI
2072                               : GV_ADD) | ( UTF ? SVf_UTF8 : 0 ),
2073                               kind == '$' ? SVt_PV :
2074                               kind == '@' ? SVt_PVAV :
2075                               kind == '%' ? SVt_PVHV :
2076                               SVt_PVGV
2077                               );
2078         }
2079     }
2080 }
2081
2082 static void
2083 S_force_ident_maybe_lex(pTHX_ char pit)
2084 {
2085     NEXTVAL_NEXTTOKE.ival = pit;
2086     force_next('p');
2087 }
2088
2089 NV
2090 Perl_str_to_version(pTHX_ SV *sv)
2091 {
2092     NV retval = 0.0;
2093     NV nshift = 1.0;
2094     STRLEN len;
2095     const char *start = SvPV_const(sv,len);
2096     const char * const end = start + len;
2097     const bool utf = SvUTF8(sv) ? TRUE : FALSE;
2098
2099     PERL_ARGS_ASSERT_STR_TO_VERSION;
2100
2101     while (start < end) {
2102         STRLEN skip;
2103         UV n;
2104         if (utf)
2105             n = utf8n_to_uvchr((U8*)start, len, &skip, 0);
2106         else {
2107             n = *(U8*)start;
2108             skip = 1;
2109         }
2110         retval += ((NV)n)/nshift;
2111         start += skip;
2112         nshift *= 1000;
2113     }
2114     return retval;
2115 }
2116
2117 /*
2118  * S_force_version
2119  * Forces the next token to be a version number.
2120  * If the next token appears to be an invalid version number, (e.g. "v2b"),
2121  * and if "guessing" is TRUE, then no new token is created (and the caller
2122  * must use an alternative parsing method).
2123  */
2124
2125 STATIC char *
2126 S_force_version(pTHX_ char *s, int guessing)
2127 {
2128     OP *version = NULL;
2129     char *d;
2130
2131     PERL_ARGS_ASSERT_FORCE_VERSION;
2132
2133     s = skipspace(s);
2134
2135     d = s;
2136     if (*d == 'v')
2137         d++;
2138     if (isDIGIT(*d)) {
2139         while (isDIGIT(*d) || *d == '_' || *d == '.')
2140             d++;
2141         if (*d == ';' || isSPACE(*d) || *d == '{' || *d == '}' || !*d) {
2142             SV *ver;
2143             s = scan_num(s, &pl_yylval);
2144             version = pl_yylval.opval;
2145             ver = cSVOPx(version)->op_sv;
2146             if (SvPOK(ver) && !SvNIOK(ver)) {
2147                 SvUPGRADE(ver, SVt_PVNV);
2148                 SvNV_set(ver, str_to_version(ver));
2149                 SvNOK_on(ver);          /* hint that it is a version */
2150             }
2151         }
2152         else if (guessing) {
2153             return s;
2154         }
2155     }
2156
2157     /* NOTE: The parser sees the package name and the VERSION swapped */
2158     NEXTVAL_NEXTTOKE.opval = version;
2159     force_next(WORD);
2160
2161     return s;
2162 }
2163
2164 /*
2165  * S_force_strict_version
2166  * Forces the next token to be a version number using strict syntax rules.
2167  */
2168
2169 STATIC char *
2170 S_force_strict_version(pTHX_ char *s)
2171 {
2172     OP *version = NULL;
2173     const char *errstr = NULL;
2174
2175     PERL_ARGS_ASSERT_FORCE_STRICT_VERSION;
2176
2177     while (isSPACE(*s)) /* leading whitespace */
2178         s++;
2179
2180     if (is_STRICT_VERSION(s,&errstr)) {
2181         SV *ver = newSV(0);
2182         s = (char *)scan_version(s, ver, 0);
2183         version = newSVOP(OP_CONST, 0, ver);
2184     }
2185     else if ( (*s != ';' && *s != '{' && *s != '}' ) &&
2186             (s = skipspace(s), (*s != ';' && *s != '{' && *s != '}' )))
2187     {
2188         PL_bufptr = s;
2189         if (errstr)
2190             yyerror(errstr); /* version required */
2191         return s;
2192     }
2193
2194     /* NOTE: The parser sees the package name and the VERSION swapped */
2195     NEXTVAL_NEXTTOKE.opval = version;
2196     force_next(WORD);
2197
2198     return s;
2199 }
2200
2201 /*
2202  * S_tokeq
2203  * Tokenize a quoted string passed in as an SV.  It finds the next
2204  * chunk, up to end of string or a backslash.  It may make a new
2205  * SV containing that chunk (if HINT_NEW_STRING is on).  It also
2206  * turns \\ into \.
2207  */
2208
2209 STATIC SV *
2210 S_tokeq(pTHX_ SV *sv)
2211 {
2212     char *s;
2213     char *send;
2214     char *d;
2215     SV *pv = sv;
2216
2217     PERL_ARGS_ASSERT_TOKEQ;
2218
2219     assert (SvPOK(sv));
2220     assert (SvLEN(sv));
2221     assert (!SvIsCOW(sv));
2222     if (SvTYPE(sv) >= SVt_PVIV && SvIVX(sv) == -1) /* <<'heredoc' */
2223         goto finish;
2224     s = SvPVX(sv);
2225     send = SvEND(sv);
2226     /* This is relying on the SV being "well formed" with a trailing '\0'  */
2227     while (s < send && !(*s == '\\' && s[1] == '\\'))
2228         s++;
2229     if (s == send)
2230         goto finish;
2231     d = s;
2232     if ( PL_hints & HINT_NEW_STRING ) {
2233         pv = newSVpvn_flags(SvPVX_const(pv), SvCUR(sv),
2234                             SVs_TEMP | SvUTF8(sv));
2235     }
2236     while (s < send) {
2237         if (*s == '\\') {
2238             if (s + 1 < send && (s[1] == '\\'))
2239                 s++;            /* all that, just for this */
2240         }
2241         *d++ = *s++;
2242     }
2243     *d = '\0';
2244     SvCUR_set(sv, d - SvPVX_const(sv));
2245   finish:
2246     if ( PL_hints & HINT_NEW_STRING )
2247        return new_constant(NULL, 0, "q", sv, pv, "q", 1);
2248     return sv;
2249 }
2250
2251 /*
2252  * Now come three functions related to double-quote context,
2253  * S_sublex_start, S_sublex_push, and S_sublex_done.  They're used when
2254  * converting things like "\u\Lgnat" into ucfirst(lc("gnat")).  They
2255  * interact with PL_lex_state, and create fake ( ... ) argument lists
2256  * to handle functions and concatenation.
2257  * For example,
2258  *   "foo\lbar"
2259  * is tokenised as
2260  *    stringify ( const[foo] concat lcfirst ( const[bar] ) )
2261  */
2262
2263 /*
2264  * S_sublex_start
2265  * Assumes that pl_yylval.ival is the op we're creating (e.g. OP_LCFIRST).
2266  *
2267  * Pattern matching will set PL_lex_op to the pattern-matching op to
2268  * make (we return THING if pl_yylval.ival is OP_NULL, PMFUNC otherwise).
2269  *
2270  * OP_CONST and OP_READLINE are easy--just make the new op and return.
2271  *
2272  * Everything else becomes a FUNC.
2273  *
2274  * Sets PL_lex_state to LEX_INTERPPUSH unless (ival was OP_NULL or we
2275  * had an OP_CONST or OP_READLINE).  This just sets us up for a
2276  * call to S_sublex_push().
2277  */
2278
2279 STATIC I32
2280 S_sublex_start(pTHX)
2281 {
2282     const I32 op_type = pl_yylval.ival;
2283
2284     if (op_type == OP_NULL) {
2285         pl_yylval.opval = PL_lex_op;
2286         PL_lex_op = NULL;
2287         return THING;
2288     }
2289     if (op_type == OP_CONST) {
2290         SV *sv = PL_lex_stuff;
2291         PL_lex_stuff = NULL;
2292         sv = tokeq(sv);
2293
2294         if (SvTYPE(sv) == SVt_PVIV) {
2295             /* Overloaded constants, nothing fancy: Convert to SVt_PV: */
2296             STRLEN len;
2297             const char * const p = SvPV_const(sv, len);
2298             SV * const nsv = newSVpvn_flags(p, len, SvUTF8(sv));
2299             SvREFCNT_dec(sv);
2300             sv = nsv;
2301         }
2302         pl_yylval.opval = (OP*)newSVOP(op_type, 0, sv);
2303         return THING;
2304     }
2305
2306     PL_sublex_info.super_state = PL_lex_state;
2307     PL_sublex_info.sub_inwhat = (U16)op_type;
2308     PL_sublex_info.sub_op = PL_lex_op;
2309     PL_lex_state = LEX_INTERPPUSH;
2310
2311     PL_expect = XTERM;
2312     if (PL_lex_op) {
2313         pl_yylval.opval = PL_lex_op;
2314         PL_lex_op = NULL;
2315         return PMFUNC;
2316     }
2317     else
2318         return FUNC;
2319 }
2320
2321 /*
2322  * S_sublex_push
2323  * Create a new scope to save the lexing state.  The scope will be
2324  * ended in S_sublex_done.  Returns a '(', starting the function arguments
2325  * to the uc, lc, etc. found before.
2326  * Sets PL_lex_state to LEX_INTERPCONCAT.
2327  */
2328
2329 STATIC I32
2330 S_sublex_push(pTHX)
2331 {
2332     LEXSHARED *shared;
2333     const bool is_heredoc = PL_multi_close == '<';
2334     ENTER;
2335
2336     PL_lex_state = PL_sublex_info.super_state;
2337     SAVEI8(PL_lex_dojoin);
2338     SAVEI32(PL_lex_brackets);
2339     SAVEI32(PL_lex_allbrackets);
2340     SAVEI32(PL_lex_formbrack);
2341     SAVEI8(PL_lex_fakeeof);
2342     SAVEI32(PL_lex_casemods);
2343     SAVEI32(PL_lex_starts);
2344     SAVEI8(PL_lex_state);
2345     SAVESPTR(PL_lex_repl);
2346     SAVEVPTR(PL_lex_inpat);
2347     SAVEI16(PL_lex_inwhat);
2348     if (is_heredoc)
2349     {
2350         SAVECOPLINE(PL_curcop);
2351         SAVEI32(PL_multi_end);
2352         SAVEI32(PL_parser->herelines);
2353         PL_parser->herelines = 0;
2354     }
2355     SAVEI8(PL_multi_close);
2356     SAVEPPTR(PL_bufptr);
2357     SAVEPPTR(PL_bufend);
2358     SAVEPPTR(PL_oldbufptr);
2359     SAVEPPTR(PL_oldoldbufptr);
2360     SAVEPPTR(PL_last_lop);
2361     SAVEPPTR(PL_last_uni);
2362     SAVEPPTR(PL_linestart);
2363     SAVESPTR(PL_linestr);
2364     SAVEGENERICPV(PL_lex_brackstack);
2365     SAVEGENERICPV(PL_lex_casestack);
2366     SAVEGENERICPV(PL_parser->lex_shared);
2367     SAVEBOOL(PL_parser->lex_re_reparsing);
2368     SAVEI32(PL_copline);
2369
2370     /* The here-doc parser needs to be able to peek into outer lexing
2371        scopes to find the body of the here-doc.  So we put PL_linestr and
2372        PL_bufptr into lex_shared, to â€˜share’ those values.
2373      */
2374     PL_parser->lex_shared->ls_linestr = PL_linestr;
2375     PL_parser->lex_shared->ls_bufptr  = PL_bufptr;
2376
2377     PL_linestr = PL_lex_stuff;
2378     PL_lex_repl = PL_sublex_info.repl;
2379     PL_lex_stuff = NULL;
2380     PL_sublex_info.repl = NULL;
2381
2382     /* Arrange for PL_lex_stuff to be freed on scope exit, in case it gets
2383        set for an inner quote-like operator and then an error causes scope-
2384        popping.  We must not have a PL_lex_stuff value left dangling, as
2385        that breaks assumptions elsewhere.  See bug #123617.  */
2386     SAVEGENERICSV(PL_lex_stuff);
2387     SAVEGENERICSV(PL_sublex_info.repl);
2388
2389     PL_bufend = PL_bufptr = PL_oldbufptr = PL_oldoldbufptr = PL_linestart
2390         = SvPVX(PL_linestr);
2391     PL_bufend += SvCUR(PL_linestr);
2392     PL_last_lop = PL_last_uni = NULL;
2393     SAVEFREESV(PL_linestr);
2394     if (PL_lex_repl) SAVEFREESV(PL_lex_repl);
2395
2396     PL_lex_dojoin = FALSE;
2397     PL_lex_brackets = PL_lex_formbrack = 0;
2398     PL_lex_allbrackets = 0;
2399     PL_lex_fakeeof = LEX_FAKEEOF_NEVER;
2400     Newx(PL_lex_brackstack, 120, char);
2401     Newx(PL_lex_casestack, 12, char);
2402     PL_lex_casemods = 0;
2403     *PL_lex_casestack = '\0';
2404     PL_lex_starts = 0;
2405     PL_lex_state = LEX_INTERPCONCAT;
2406     if (is_heredoc)
2407         CopLINE_set(PL_curcop, (line_t)PL_multi_start);
2408     PL_copline = NOLINE;
2409     
2410     Newxz(shared, 1, LEXSHARED);
2411     shared->ls_prev = PL_parser->lex_shared;
2412     PL_parser->lex_shared = shared;
2413
2414     PL_lex_inwhat = PL_sublex_info.sub_inwhat;
2415     if (PL_lex_inwhat == OP_TRANSR) PL_lex_inwhat = OP_TRANS;
2416     if (PL_lex_inwhat == OP_MATCH || PL_lex_inwhat == OP_QR || PL_lex_inwhat == OP_SUBST)
2417         PL_lex_inpat = PL_sublex_info.sub_op;
2418     else
2419         PL_lex_inpat = NULL;
2420
2421     PL_parser->lex_re_reparsing = cBOOL(PL_in_eval & EVAL_RE_REPARSING);
2422     PL_in_eval &= ~EVAL_RE_REPARSING;
2423
2424     return '(';
2425 }
2426
2427 /*
2428  * S_sublex_done
2429  * Restores lexer state after a S_sublex_push.
2430  */
2431
2432 STATIC I32
2433 S_sublex_done(pTHX)
2434 {
2435     if (!PL_lex_starts++) {
2436         SV * const sv = newSVpvs("");
2437         if (SvUTF8(PL_linestr))
2438             SvUTF8_on(sv);
2439         PL_expect = XOPERATOR;
2440         pl_yylval.opval = (OP*)newSVOP(OP_CONST, 0, sv);
2441         return THING;
2442     }
2443
2444     if (PL_lex_casemods) {              /* oops, we've got some unbalanced parens */
2445         PL_lex_state = LEX_INTERPCASEMOD;
2446         return yylex();
2447     }
2448
2449     /* Is there a right-hand side to take care of? (s//RHS/ or tr//RHS/) */
2450     assert(PL_lex_inwhat != OP_TRANSR);
2451     if (PL_lex_repl) {
2452         assert (PL_lex_inwhat == OP_SUBST || PL_lex_inwhat == OP_TRANS);
2453         PL_linestr = PL_lex_repl;
2454         PL_lex_inpat = 0;
2455         PL_bufend = PL_bufptr = PL_oldbufptr = PL_oldoldbufptr = PL_linestart = SvPVX(PL_linestr);
2456         PL_bufend += SvCUR(PL_linestr);
2457         PL_last_lop = PL_last_uni = NULL;
2458         PL_lex_dojoin = FALSE;
2459         PL_lex_brackets = 0;
2460         PL_lex_allbrackets = 0;
2461         PL_lex_fakeeof = LEX_FAKEEOF_NEVER;
2462         PL_lex_casemods = 0;
2463         *PL_lex_casestack = '\0';
2464         PL_lex_starts = 0;
2465         if (SvEVALED(PL_lex_repl)) {
2466             PL_lex_state = LEX_INTERPNORMAL;
2467             PL_lex_starts++;
2468             /*  we don't clear PL_lex_repl here, so that we can check later
2469                 whether this is an evalled subst; that means we rely on the
2470                 logic to ensure sublex_done() is called again only via the
2471                 branch (in yylex()) that clears PL_lex_repl, else we'll loop */
2472         }
2473         else {
2474             PL_lex_state = LEX_INTERPCONCAT;
2475             PL_lex_repl = NULL;
2476         }
2477         if (SvTYPE(PL_linestr) >= SVt_PVNV) {
2478             CopLINE(PL_curcop) +=
2479                 ((XPVNV*)SvANY(PL_linestr))->xnv_u.xpad_cop_seq.xlow
2480                  + PL_parser->herelines;
2481             PL_parser->herelines = 0;
2482         }
2483         return '/';
2484     }
2485     else {
2486         const line_t l = CopLINE(PL_curcop);
2487         LEAVE;
2488         if (PL_multi_close == '<')
2489             PL_parser->herelines += l - PL_multi_end;
2490         PL_bufend = SvPVX(PL_linestr);
2491         PL_bufend += SvCUR(PL_linestr);
2492         PL_expect = XOPERATOR;
2493         return ')';
2494     }
2495 }
2496
2497 PERL_STATIC_INLINE SV*
2498 S_get_and_check_backslash_N_name(pTHX_ const char* s, const char* const e)
2499 {
2500     /* <s> points to first character of interior of \N{}, <e> to one beyond the
2501      * interior, hence to the "}".  Finds what the name resolves to, returning
2502      * an SV* containing it; NULL if no valid one found */
2503
2504     SV* res = newSVpvn_flags(s, e - s, UTF ? SVf_UTF8 : 0);
2505
2506     HV * table;
2507     SV **cvp;
2508     SV *cv;
2509     SV *rv;
2510     HV *stash;
2511     const U8* first_bad_char_loc;
2512     const char* backslash_ptr = s - 3; /* Points to the <\> of \N{... */
2513
2514     PERL_ARGS_ASSERT_GET_AND_CHECK_BACKSLASH_N_NAME;
2515
2516     if (!SvCUR(res))
2517         return res;
2518
2519     if (UTF && ! is_utf8_string_loc((U8 *) backslash_ptr,
2520                                      e - backslash_ptr,
2521                                      &first_bad_char_loc))
2522     {
2523         /* If warnings are on, this will print a more detailed analysis of what
2524          * is wrong than the error message below */
2525         utf8n_to_uvchr(first_bad_char_loc,
2526                        e - ((char *) first_bad_char_loc),
2527                        NULL, 0);
2528
2529         /* We deliberately don't try to print the malformed character, which
2530          * might not print very well; it also may be just the first of many
2531          * malformations, so don't print what comes after it */
2532         yyerror(Perl_form(aTHX_
2533             "Malformed UTF-8 character immediately after '%.*s'",
2534             (int) (first_bad_char_loc - (U8 *) backslash_ptr), backslash_ptr));
2535         return NULL;
2536     }
2537
2538     res = new_constant( NULL, 0, "charnames", res, NULL, backslash_ptr,
2539                         /* include the <}> */
2540                         e - backslash_ptr + 1);
2541     if (! SvPOK(res)) {
2542         SvREFCNT_dec_NN(res);
2543         return NULL;
2544     }
2545
2546     /* See if the charnames handler is the Perl core's, and if so, we can skip
2547      * the validation needed for a user-supplied one, as Perl's does its own
2548      * validation. */
2549     table = GvHV(PL_hintgv);             /* ^H */
2550     cvp = hv_fetchs(table, "charnames", FALSE);
2551     if (cvp && (cv = *cvp) && SvROK(cv) && (rv = SvRV(cv),
2552         SvTYPE(rv) == SVt_PVCV) && ((stash = CvSTASH(rv)) != NULL))
2553     {
2554         const char * const name = HvNAME(stash);
2555         if (HvNAMELEN(stash) == sizeof("_charnames")-1
2556          && strEQ(name, "_charnames")) {
2557            return res;
2558        }
2559     }
2560
2561     /* Here, it isn't Perl's charname handler.  We can't rely on a
2562      * user-supplied handler to validate the input name.  For non-ut8 input,
2563      * look to see that the first character is legal.  Then loop through the
2564      * rest checking that each is a continuation */
2565
2566     /* This code makes the reasonable assumption that the only Latin1-range
2567      * characters that begin a character name alias are alphabetic, otherwise
2568      * would have to create a isCHARNAME_BEGIN macro */
2569
2570     if (! UTF) {
2571         if (! isALPHAU(*s)) {
2572             goto bad_charname;
2573         }
2574         s++;
2575         while (s < e) {
2576             if (! isCHARNAME_CONT(*s)) {
2577                 goto bad_charname;
2578             }
2579             if (*s == ' ' && *(s-1) == ' ') {
2580                 goto multi_spaces;
2581             }
2582             if ((U8) *s == NBSP_NATIVE && ckWARN_d(WARN_DEPRECATED)) {
2583                 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
2584                            "NO-BREAK SPACE in a charnames "
2585                            "alias definition is deprecated");
2586             }
2587             s++;
2588         }
2589     }
2590     else {
2591         /* Similarly for utf8.  For invariants can check directly; for other
2592          * Latin1, can calculate their code point and check; otherwise  use a
2593          * swash */
2594         if (UTF8_IS_INVARIANT(*s)) {
2595             if (! isALPHAU(*s)) {
2596                 goto bad_charname;
2597             }
2598             s++;
2599         } else if (UTF8_IS_DOWNGRADEABLE_START(*s)) {
2600             if (! isALPHAU(TWO_BYTE_UTF8_TO_NATIVE(*s, *(s+1)))) {
2601                 goto bad_charname;
2602             }
2603             s += 2;
2604         }
2605         else {
2606             if (! PL_utf8_charname_begin) {
2607                 U8 flags = _CORE_SWASH_INIT_ACCEPT_INVLIST;
2608                 PL_utf8_charname_begin = _core_swash_init("utf8",
2609                                                         "_Perl_Charname_Begin",
2610                                                         &PL_sv_undef,
2611                                                         1, 0, NULL, &flags);
2612             }
2613             if (! swash_fetch(PL_utf8_charname_begin, (U8 *) s, TRUE)) {
2614                 goto bad_charname;
2615             }
2616             s += UTF8SKIP(s);
2617         }
2618
2619         while (s < e) {
2620             if (UTF8_IS_INVARIANT(*s)) {
2621                 if (! isCHARNAME_CONT(*s)) {
2622                     goto bad_charname;
2623                 }
2624                 if (*s == ' ' && *(s-1) == ' ') {
2625                     goto multi_spaces;
2626                 }
2627                 s++;
2628             }
2629             else if (UTF8_IS_DOWNGRADEABLE_START(*s)) {
2630                 if (! isCHARNAME_CONT(TWO_BYTE_UTF8_TO_NATIVE(*s, *(s+1))))
2631                 {
2632                     goto bad_charname;
2633                 }
2634                 if (*s == *NBSP_UTF8
2635                     && *(s+1) == *(NBSP_UTF8+1)
2636                     && ckWARN_d(WARN_DEPRECATED))
2637                 {
2638                     Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
2639                                 "NO-BREAK SPACE in a charnames "
2640                                 "alias definition is deprecated");
2641                 }
2642                 s += 2;
2643             }
2644             else {
2645                 if (! PL_utf8_charname_continue) {
2646                     U8 flags = _CORE_SWASH_INIT_ACCEPT_INVLIST;
2647                     PL_utf8_charname_continue = _core_swash_init("utf8",
2648                                                 "_Perl_Charname_Continue",
2649                                                 &PL_sv_undef,
2650                                                 1, 0, NULL, &flags);
2651                 }
2652                 if (! swash_fetch(PL_utf8_charname_continue, (U8 *) s, TRUE)) {
2653                     goto bad_charname;
2654                 }
2655                 s += UTF8SKIP(s);
2656             }
2657         }
2658     }
2659     if (*(s-1) == ' ') {
2660         yyerror_pv(
2661             Perl_form(aTHX_
2662             "charnames alias definitions may not contain trailing "
2663             "white-space; marked by <-- HERE in %.*s<-- HERE %.*s",
2664             (int)(s - backslash_ptr + 1), backslash_ptr,
2665             (int)(e - s + 1), s + 1
2666             ),
2667         UTF ? SVf_UTF8 : 0);
2668         return NULL;
2669     }
2670
2671     if (SvUTF8(res)) { /* Don't accept malformed input */
2672         const U8* first_bad_char_loc;
2673         STRLEN len;
2674         const char* const str = SvPV_const(res, len);
2675         if (! is_utf8_string_loc((U8 *) str, len, &first_bad_char_loc)) {
2676             /* If warnings are on, this will print a more detailed analysis of
2677              * what is wrong than the error message below */
2678             utf8n_to_uvchr(first_bad_char_loc,
2679                            (char *) first_bad_char_loc - str,
2680                            NULL, 0);
2681
2682             /* We deliberately don't try to print the malformed character,
2683              * which might not print very well; it also may be just the first
2684              * of many malformations, so don't print what comes after it */
2685             yyerror_pv(
2686               Perl_form(aTHX_
2687                 "Malformed UTF-8 returned by %.*s immediately after '%.*s'",
2688                  (int) (e - backslash_ptr + 1), backslash_ptr,
2689                  (int) ((char *) first_bad_char_loc - str), str
2690               ),
2691               SVf_UTF8);
2692             return NULL;
2693         }
2694     }
2695
2696     return res;
2697
2698   bad_charname: {
2699
2700         /* The final %.*s makes sure that should the trailing NUL be missing
2701          * that this print won't run off the end of the string */
2702         yyerror_pv(
2703           Perl_form(aTHX_
2704             "Invalid character in \\N{...}; marked by <-- HERE in %.*s<-- HERE %.*s",
2705             (int)(s - backslash_ptr + 1), backslash_ptr,
2706             (int)(e - s + 1), s + 1
2707           ),
2708           UTF ? SVf_UTF8 : 0);
2709         return NULL;
2710     }
2711
2712   multi_spaces:
2713         yyerror_pv(
2714           Perl_form(aTHX_
2715             "charnames alias definitions may not contain a sequence of "
2716             "multiple spaces; marked by <-- HERE in %.*s<-- HERE %.*s",
2717             (int)(s - backslash_ptr + 1), backslash_ptr,
2718             (int)(e - s + 1), s + 1
2719           ),
2720           UTF ? SVf_UTF8 : 0);
2721         return NULL;
2722 }
2723
2724 /*
2725   scan_const
2726
2727   Extracts the next constant part of a pattern, double-quoted string,
2728   or transliteration.  This is terrifying code.
2729
2730   For example, in parsing the double-quoted string "ab\x63$d", it would
2731   stop at the '$' and return an OP_CONST containing 'abc'.
2732
2733   It looks at PL_lex_inwhat and PL_lex_inpat to find out whether it's
2734   processing a pattern (PL_lex_inpat is true), a transliteration
2735   (PL_lex_inwhat == OP_TRANS is true), or a double-quoted string.
2736
2737   Returns a pointer to the character scanned up to. If this is
2738   advanced from the start pointer supplied (i.e. if anything was
2739   successfully parsed), will leave an OP_CONST for the substring scanned
2740   in pl_yylval. Caller must intuit reason for not parsing further
2741   by looking at the next characters herself.
2742
2743   In patterns:
2744     expand:
2745       \N{FOO}  => \N{U+hex_for_character_FOO}
2746       (if FOO expands to multiple characters, expands to \N{U+xx.XX.yy ...})
2747
2748     pass through:
2749         all other \-char, including \N and \N{ apart from \N{ABC}
2750
2751     stops on:
2752         @ and $ where it appears to be a var, but not for $ as tail anchor
2753         \l \L \u \U \Q \E
2754         (?{  or  (??{
2755
2756
2757   In transliterations:
2758     characters are VERY literal, except for - not at the start or end
2759     of the string, which indicates a range. If the range is in bytes,
2760     scan_const expands the range to the full set of intermediate
2761     characters. If the range is in utf8, the hyphen is replaced with
2762     a certain range mark which will be handled by pmtrans() in op.c.
2763
2764   In double-quoted strings:
2765     backslashes:
2766       double-quoted style: \r and \n
2767       constants: \x31, etc.
2768       deprecated backrefs: \1 (in substitution replacements)
2769       case and quoting: \U \Q \E
2770     stops on @ and $
2771
2772   scan_const does *not* construct ops to handle interpolated strings.
2773   It stops processing as soon as it finds an embedded $ or @ variable
2774   and leaves it to the caller to work out what's going on.
2775
2776   embedded arrays (whether in pattern or not) could be:
2777       @foo, @::foo, @'foo, @{foo}, @$foo, @+, @-.
2778
2779   $ in double-quoted strings must be the symbol of an embedded scalar.
2780
2781   $ in pattern could be $foo or could be tail anchor.  Assumption:
2782   it's a tail anchor if $ is the last thing in the string, or if it's
2783   followed by one of "()| \r\n\t"
2784
2785   \1 (backreferences) are turned into $1 in substitutions
2786
2787   The structure of the code is
2788       while (there's a character to process) {
2789           handle transliteration ranges
2790           skip regexp comments /(?#comment)/ and codes /(?{code})/
2791           skip #-initiated comments in //x patterns
2792           check for embedded arrays
2793           check for embedded scalars
2794           if (backslash) {
2795               deprecate \1 in substitution replacements
2796               handle string-changing backslashes \l \U \Q \E, etc.
2797               switch (what was escaped) {
2798                   handle \- in a transliteration (becomes a literal -)
2799                   if a pattern and not \N{, go treat as regular character
2800                   handle \132 (octal characters)
2801                   handle \x15 and \x{1234} (hex characters)
2802                   handle \N{name} (named characters, also \N{3,5} in a pattern)
2803                   handle \cV (control characters)
2804                   handle printf-style backslashes (\f, \r, \n, etc)
2805               } (end switch)
2806               continue
2807           } (end if backslash)
2808           handle regular character
2809     } (end while character to read)
2810                 
2811 */
2812
2813 STATIC char *
2814 S_scan_const(pTHX_ char *start)
2815 {
2816     char *send = PL_bufend;             /* end of the constant */
2817     SV *sv = newSV(send - start);       /* sv for the constant.  See note below
2818                                            on sizing. */
2819     char *s = start;                    /* start of the constant */
2820     char *d = SvPVX(sv);                /* destination for copies */
2821     bool dorange = FALSE;               /* are we in a translit range? */
2822     bool didrange = FALSE;              /* did we just finish a range? */
2823     bool in_charclass = FALSE;          /* within /[...]/ */
2824     bool has_utf8 = FALSE;              /* Output constant is UTF8 */
2825     bool  this_utf8 = cBOOL(UTF);       /* Is the source string assumed to be
2826                                            UTF8?  But, this can show as true
2827                                            when the source isn't utf8, as for
2828                                            example when it is entirely composed
2829                                            of hex constants */
2830     SV *res;                            /* result from charnames */
2831
2832     /* Note on sizing:  The scanned constant is placed into sv, which is
2833      * initialized by newSV() assuming one byte of output for every byte of
2834      * input.  This routine expects newSV() to allocate an extra byte for a
2835      * trailing NUL, which this routine will append if it gets to the end of
2836      * the input.  There may be more bytes of input than output (eg., \N{LATIN
2837      * CAPITAL LETTER A}), or more output than input if the constant ends up
2838      * recoded to utf8, but each time a construct is found that might increase
2839      * the needed size, SvGROW() is called.  Its size parameter each time is
2840      * based on the best guess estimate at the time, namely the length used so
2841      * far, plus the length the current construct will occupy, plus room for
2842      * the trailing NUL, plus one byte for every input byte still unscanned */ 
2843
2844     UV uv = UV_MAX; /* Initialize to weird value to try to catch any uses
2845                        before set */
2846 #ifdef EBCDIC
2847     UV literal_endpoint = 0;
2848     bool native_range = TRUE; /* turned to FALSE if the first endpoint is Unicode. */
2849 #endif
2850
2851     PERL_ARGS_ASSERT_SCAN_CONST;
2852
2853     assert(PL_lex_inwhat != OP_TRANSR);
2854     if (PL_lex_inwhat == OP_TRANS && PL_sublex_info.sub_op) {
2855         /* If we are doing a trans and we know we want UTF8 set expectation */
2856         has_utf8   = PL_sublex_info.sub_op->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF);
2857         this_utf8  = PL_sublex_info.sub_op->op_private & (PL_lex_repl ? OPpTRANS_FROM_UTF : OPpTRANS_TO_UTF);
2858     }
2859
2860     /* Protect sv from errors and fatal warnings. */
2861     ENTER_with_name("scan_const");
2862     SAVEFREESV(sv);
2863
2864     while (s < send || dorange) {
2865
2866         /* get transliterations out of the way (they're most literal) */
2867         if (PL_lex_inwhat == OP_TRANS) {
2868             /* expand a range A-Z to the full set of characters.  AIE! */
2869             if (dorange) {
2870                 I32 i;                          /* current expanded character */
2871                 I32 min;                        /* first character in range */
2872                 I32 max;                        /* last character in range */
2873
2874 #ifdef EBCDIC
2875                 UV uvmax = 0;
2876 #endif
2877
2878                 if (has_utf8
2879 #ifdef EBCDIC
2880                     && !native_range
2881 #endif
2882                 ) {
2883                     char * const c = (char*)utf8_hop((U8*)d, -1);
2884                     char *e = d++;
2885                     while (e-- > c)
2886                         *(e + 1) = *e;
2887                     *c = (char) ILLEGAL_UTF8_BYTE;
2888                     /* mark the range as done, and continue */
2889                     dorange = FALSE;
2890                     didrange = TRUE;
2891                     continue;
2892                 }
2893
2894                 i = d - SvPVX_const(sv);                /* remember current offset */
2895 #ifdef EBCDIC
2896                 SvGROW(sv,
2897                        SvLEN(sv) + ((has_utf8)
2898                                     ?  (512 - UTF_CONTINUATION_MARK
2899                                         + UNISKIP(0x100))
2900                                     : 256));
2901                 /* How many two-byte within 0..255: 128 in UTF-8,
2902                  * 96 in UTF-8-mod. */
2903 #else
2904                 SvGROW(sv, SvLEN(sv) + 256);    /* never more than 256 chars in a range */
2905 #endif
2906                 d = SvPVX(sv) + i;              /* refresh d after realloc */
2907 #ifdef EBCDIC
2908                 if (has_utf8) {
2909                     int j;
2910                     for (j = 0; j <= 1; j++) {
2911                         char * const c = (char*)utf8_hop((U8*)d, -1);
2912                         const UV uv    = utf8n_to_uvchr((U8*)c, d - c, NULL, 0);
2913                         if (j)
2914                             min = (U8)uv;
2915                         else if (uv < 256)
2916                             max = (U8)uv;
2917                         else {
2918                             max = (U8)0xff; /* only to \xff */
2919                             uvmax = uv; /* \x{100} to uvmax */
2920                         }
2921                         d = c; /* eat endpoint chars */
2922                      }
2923                 }
2924                else {
2925 #endif
2926                    d -= 2;              /* eat the first char and the - */
2927                    min = (U8)*d;        /* first char in range */
2928                    max = (U8)d[1];      /* last char in range  */
2929 #ifdef EBCDIC
2930                }
2931 #endif
2932
2933                 if (min > max) {
2934                     Perl_croak(aTHX_
2935                                "Invalid range \"%c-%c\" in transliteration operator",
2936                                (char)min, (char)max);
2937                 }
2938
2939 #ifdef EBCDIC
2940                 /* Because of the discontinuities in EBCDIC A-Z and a-z, expand
2941                  * any subsets of these ranges into individual characters */
2942                 if (literal_endpoint == 2 &&
2943                     ((isLOWER_A(min) && isLOWER_A(max)) ||
2944                      (isUPPER_A(min) && isUPPER_A(max))))
2945                 {
2946                     for (i = min; i <= max; i++) {
2947                         if (isALPHA_A(i))
2948                             *d++ = i;
2949                     }
2950                 }
2951                 else
2952 #endif
2953                     for (i = min; i <= max; i++)
2954 #ifdef EBCDIC
2955                         if (has_utf8) {
2956                             append_utf8_from_native_byte(i, &d);
2957                         }
2958                         else
2959 #endif
2960                             *d++ = (char)i;
2961  
2962 #ifdef EBCDIC
2963                 if (uvmax) {
2964                     d = (char*)uvchr_to_utf8((U8*)d, 0x100);
2965                     if (uvmax > 0x101)
2966                         *d++ = (char) ILLEGAL_UTF8_BYTE;
2967                     if (uvmax > 0x100)
2968                         d = (char*)uvchr_to_utf8((U8*)d, uvmax);
2969                 }
2970 #endif
2971
2972                 /* mark the range as done, and continue */
2973                 dorange = FALSE;
2974                 didrange = TRUE;
2975 #ifdef EBCDIC
2976                 literal_endpoint = 0;
2977 #endif
2978                 continue;
2979             }
2980
2981             /* range begins (ignore - as first or last char) */
2982             else if (*s == '-' && s+1 < send  && s != start) {
2983                 if (didrange) {
2984                     Perl_croak(aTHX_ "Ambiguous range in transliteration operator");
2985                 }
2986                 if (has_utf8
2987 #ifdef EBCDIC
2988                     && !native_range
2989 #endif
2990                     ) {
2991                     *d++ = (char) ILLEGAL_UTF8_BYTE;    /* use illegal utf8 byte--see pmtrans */
2992                     s++;
2993                     continue;
2994                 }
2995                 dorange = TRUE;
2996                 s++;
2997             }
2998             else {
2999                 didrange = FALSE;
3000 #ifdef EBCDIC
3001                 literal_endpoint = 0;
3002                 native_range = TRUE;
3003 #endif
3004             }
3005         }
3006
3007         /* if we get here, we're not doing a transliteration */
3008
3009         else if (*s == '[' && PL_lex_inpat && !in_charclass) {
3010             char *s1 = s-1;
3011             int esc = 0;
3012             while (s1 >= start && *s1-- == '\\')
3013                 esc = !esc;
3014             if (!esc)
3015                 in_charclass = TRUE;
3016         }
3017
3018         else if (*s == ']' && PL_lex_inpat &&  in_charclass) {
3019             char *s1 = s-1;
3020             int esc = 0;
3021             while (s1 >= start && *s1-- == '\\')
3022                 esc = !esc;
3023             if (!esc)
3024                 in_charclass = FALSE;
3025         }
3026
3027         /* skip for regexp comments /(?#comment)/, except for the last
3028          * char, which will be done separately.
3029          * Stop on (?{..}) and friends */
3030
3031         else if (*s == '(' && PL_lex_inpat && s[1] == '?' && !in_charclass) {
3032             if (s[2] == '#') {
3033                 while (s+1 < send && *s != ')')
3034                     *d++ = *s++;
3035             }
3036             else if (!PL_lex_casemods &&
3037                      (    s[2] == '{' /* This should match regcomp.c */
3038                       || (s[2] == '?' && s[3] == '{')))
3039             {
3040                 break;
3041             }
3042         }
3043
3044         /* likewise skip #-initiated comments in //x patterns */
3045         else if (*s == '#' && PL_lex_inpat && !in_charclass &&
3046           ((PMOP*)PL_lex_inpat)->op_pmflags & RXf_PMf_EXTENDED) {
3047             while (s+1 < send && *s != '\n')
3048                 *d++ = *s++;
3049         }
3050
3051         /* no further processing of single-quoted regex */
3052         else if (PL_lex_inpat && SvIVX(PL_linestr) == '\'')
3053             goto default_action;
3054
3055         /* check for embedded arrays
3056            (@foo, @::foo, @'foo, @{foo}, @$foo, @+, @-)
3057            */
3058         else if (*s == '@' && s[1]) {
3059             if (UTF ? isIDFIRST_utf8((U8*)s+1) : isWORDCHAR_A(s[1]))
3060                 break;
3061             if (strchr(":'{$", s[1]))
3062                 break;
3063             if (!PL_lex_inpat && (s[1] == '+' || s[1] == '-'))
3064                 break; /* in regexp, neither @+ nor @- are interpolated */
3065         }
3066
3067         /* check for embedded scalars.  only stop if we're sure it's a
3068            variable.
3069         */
3070         else if (*s == '$') {
3071             if (!PL_lex_inpat)  /* not a regexp, so $ must be var */
3072                 break;
3073             if (s + 1 < send && !strchr("()| \r\n\t", s[1])) {
3074                 if (s[1] == '\\') {
3075                     Perl_ck_warner(aTHX_ packWARN(WARN_AMBIGUOUS),
3076                                    "Possible unintended interpolation of $\\ in regex");
3077                 }
3078                 break;          /* in regexp, $ might be tail anchor */
3079             }
3080         }
3081
3082         /* End of else if chain - OP_TRANS rejoin rest */
3083
3084         /* backslashes */
3085         if (*s == '\\' && s+1 < send) {
3086             char* e;    /* Can be used for ending '}', etc. */
3087
3088             s++;
3089
3090             /* warn on \1 - \9 in substitution replacements, but note that \11
3091              * is an octal; and \19 is \1 followed by '9' */
3092             if (PL_lex_inwhat == OP_SUBST && !PL_lex_inpat &&
3093                 isDIGIT(*s) && *s != '0' && !isDIGIT(s[1]))
3094             {
3095                 /* diag_listed_as: \%d better written as $%d */
3096                 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX), "\\%c better written as $%c", *s, *s);
3097                 *--s = '$';
3098                 break;
3099             }
3100
3101             /* string-change backslash escapes */
3102             if (PL_lex_inwhat != OP_TRANS && *s && strchr("lLuUEQF", *s)) {
3103                 --s;
3104                 break;
3105             }
3106             /* In a pattern, process \N, but skip any other backslash escapes.
3107              * This is because we don't want to translate an escape sequence
3108              * into a meta symbol and have the regex compiler use the meta
3109              * symbol meaning, e.g. \x{2E} would be confused with a dot.  But
3110              * in spite of this, we do have to process \N here while the proper
3111              * charnames handler is in scope.  See bugs #56444 and #62056.
3112              *
3113              * There is a complication because \N in a pattern may also stand
3114              * for 'match a non-nl', and not mean a charname, in which case its
3115              * processing should be deferred to the regex compiler.  To be a
3116              * charname it must be followed immediately by a '{', and not look
3117              * like \N followed by a curly quantifier, i.e., not something like
3118              * \N{3,}.  regcurly returns a boolean indicating if it is a legal
3119              * quantifier */
3120             else if (PL_lex_inpat
3121                     && (*s != 'N'
3122                         || s[1] != '{'
3123                         || regcurly(s + 1)))
3124             {
3125                 *d++ = '\\';
3126                 goto default_action;
3127             }
3128
3129             switch (*s) {
3130
3131             /* quoted - in transliterations */
3132             case '-':
3133                 if (PL_lex_inwhat == OP_TRANS) {
3134                     *d++ = *s++;
3135                     continue;
3136                 }
3137                 /* FALLTHROUGH */
3138             default:
3139                 {
3140                     if ((isALPHANUMERIC(*s)))
3141                         Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
3142                                        "Unrecognized escape \\%c passed through",
3143                                        *s);
3144                     /* default action is to copy the quoted character */
3145                     goto default_action;
3146                 }
3147
3148             /* eg. \132 indicates the octal constant 0132 */
3149             case '0': case '1': case '2': case '3':
3150             case '4': case '5': case '6': case '7':
3151                 {
3152                     I32 flags = PERL_SCAN_SILENT_ILLDIGIT;
3153                     STRLEN len = 3;
3154                     uv = grok_oct(s, &len, &flags, NULL);
3155                     s += len;
3156                     if (len < 3 && s < send && isDIGIT(*s)
3157                         && ckWARN(WARN_MISC))
3158                     {
3159                         Perl_warner(aTHX_ packWARN(WARN_MISC),
3160                                     "%s", form_short_octal_warning(s, len));
3161                     }
3162                 }
3163                 goto NUM_ESCAPE_INSERT;
3164
3165             /* eg. \o{24} indicates the octal constant \024 */
3166             case 'o':
3167                 {
3168                     const char* error;
3169
3170                     bool valid = grok_bslash_o(&s, &uv, &error,
3171                                                TRUE, /* Output warning */
3172                                                FALSE, /* Not strict */
3173                                                TRUE, /* Output warnings for
3174                                                          non-portables */
3175                                                UTF);
3176                     if (! valid) {
3177                         yyerror(error);
3178                         continue;
3179                     }
3180                     goto NUM_ESCAPE_INSERT;
3181                 }
3182
3183             /* eg. \x24 indicates the hex constant 0x24 */
3184             case 'x':
3185                 {
3186                     const char* error;
3187
3188                     bool valid = grok_bslash_x(&s, &uv, &error,
3189                                                TRUE, /* Output warning */
3190                                                FALSE, /* Not strict */
3191                                                TRUE,  /* Output warnings for
3192                                                          non-portables */
3193                                                UTF);
3194                     if (! valid) {
3195                         yyerror(error);
3196                         continue;
3197                     }
3198                 }
3199
3200               NUM_ESCAPE_INSERT:
3201                 /* Insert oct or hex escaped character.  There will always be
3202                  * enough room in sv since such escapes will be longer than any
3203                  * UTF-8 sequence they can end up as, except if they force us
3204                  * to recode the rest of the string into utf8 */
3205                 
3206                 /* Here uv is the ordinal of the next character being added */
3207                 if (!UVCHR_IS_INVARIANT(uv)) {
3208                     if (!has_utf8 && uv > 255) {
3209                         /* Might need to recode whatever we have accumulated so
3210                          * far if it contains any chars variant in utf8 or
3211                          * utf-ebcdic. */
3212                           
3213                         SvCUR_set(sv, d - SvPVX_const(sv));
3214                         SvPOK_on(sv);
3215                         *d = '\0';
3216                         /* See Note on sizing above.  */
3217                         sv_utf8_upgrade_flags_grow(
3218                                          sv,
3219                                          SV_GMAGIC|SV_FORCE_UTF8_UPGRADE
3220                                                   /* Above-latin1 in string
3221                                                    * implies no encoding */
3222                                                   |SV_UTF8_NO_ENCODING,
3223                                          UNISKIP(uv) + (STRLEN)(send - s) + 1);
3224                         d = SvPVX(sv) + SvCUR(sv);
3225                         has_utf8 = TRUE;
3226                     }
3227
3228                     if (has_utf8) {
3229                         d = (char*)uvchr_to_utf8((U8*)d, uv);
3230                         if (PL_lex_inwhat == OP_TRANS &&
3231                             PL_sublex_info.sub_op) {
3232                             PL_sublex_info.sub_op->op_private |=
3233                                 (PL_lex_repl ? OPpTRANS_FROM_UTF
3234                                              : OPpTRANS_TO_UTF);
3235                         }
3236 #ifdef EBCDIC
3237                         if (uv > 255 && !dorange)
3238                             native_range = FALSE;
3239 #endif
3240                     }
3241                     else {
3242                         *d++ = (char)uv;
3243                     }
3244                 }
3245                 else {
3246                     *d++ = (char) uv;
3247                 }
3248                 continue;
3249
3250             case 'N':
3251                 /* In a non-pattern \N must be like \N{U+0041}, or it can be a
3252                  * named character, like \N{LATIN SMALL LETTER A}, or a named
3253                  * sequence, like \N{LATIN CAPITAL LETTER A WITH MACRON AND
3254                  * GRAVE}.  For convenience all three forms are referred to as
3255                  * "named characters" below.
3256                  *
3257                  * For patterns, \N also can mean to match a non-newline.  Code
3258                  * before this 'switch' statement should already have handled
3259                  * this situation, and hence this code only has to deal with
3260                  * the named character cases.
3261                  *
3262                  * For non-patterns, the named characters are converted to
3263                  * their string equivalents.  In patterns, named characters are
3264                  * not converted to their ultimate forms for the same reasons
3265                  * that other escapes aren't.  Instead, they are converted to
3266                  * the \N{U+...} form to get the value from the charnames that
3267                  * is in effect right now, while preserving the fact that it
3268                  * was a named character, so that the regex compiler knows
3269                  * this.
3270                  *
3271                  * The structure of this section of code (besides checking for
3272                  * errors and upgrading to utf8) is:
3273                  *  If the named character is of the form \N{U+...}, pass it
3274                  *      through if a pattern; otherwise convert the code point
3275                  *      to utf8
3276                  *  Otherwise must be some \N{NAME}: convert to \N{U+c1.c2...}
3277                  *      if a pattern; otherwise convert to utf8
3278                  *
3279                  * Here, 's' points to the 'N'; the test below is guaranteed to
3280                  * succeed if we are being called on a pattern, as we already
3281                  * know from a test above that the next character is a '{'.  A
3282                  * non-pattern \N must mean 'named character', which requires
3283                  * braces */
3284                 s++;
3285                 if (*s != '{') {
3286                     yyerror("Missing braces on \\N{}"); 
3287                     continue;
3288                 }
3289                 s++;
3290
3291                 /* If there is no matching '}', it is an error. */
3292                 if (! (e = strchr(s, '}'))) {
3293                     if (! PL_lex_inpat) {
3294                         yyerror("Missing right brace on \\N{}");
3295                     } else {
3296                         yyerror("Missing right brace on \\N{} or unescaped left brace after \\N");
3297                     }
3298                     continue;
3299                 }
3300
3301                 /* Here it looks like a named character */
3302
3303                 if (*s == 'U' && s[1] == '+') { /* \N{U+...} */
3304                     s += 2;         /* Skip to next char after the 'U+' */
3305                     if (PL_lex_inpat) {
3306
3307                         /* In patterns, we can have \N{U+xxxx.yyyy.zzzz...} */
3308                         /* Check the syntax.  */
3309                         const char *orig_s;
3310                         orig_s = s - 5;
3311                         if (!isXDIGIT(*s)) {
3312                           bad_NU:
3313                             yyerror(
3314                                 "Invalid hexadecimal number in \\N{U+...}"
3315                             );
3316                             s = e + 1;
3317                             continue;
3318                         }
3319                         while (++s < e) {
3320                             if (isXDIGIT(*s))
3321                                 continue;
3322                             else if ((*s == '.' || *s == '_')
3323                                   && isXDIGIT(s[1]))
3324                                 continue;
3325                             goto bad_NU;
3326                         }
3327
3328                         /* Pass everything through unchanged.
3329                          * +1 is for the '}' */
3330                         Copy(orig_s, d, e - orig_s + 1, char);
3331                         d += e - orig_s + 1;
3332                     }
3333                     else {  /* Not a pattern: convert the hex to string */
3334                         I32 flags = PERL_SCAN_ALLOW_UNDERSCORES
3335                                 | PERL_SCAN_SILENT_ILLDIGIT
3336                                 | PERL_SCAN_DISALLOW_PREFIX;
3337                         STRLEN len = e - s;
3338                         uv = grok_hex(s, &len, &flags, NULL);
3339                         if (len == 0 || (len != (STRLEN)(e - s)))
3340                             goto bad_NU;
3341
3342                          /* If the destination is not in utf8, unconditionally
3343                           * recode it to be so.  This is because \N{} implies
3344                           * Unicode semantics, and scalars have to be in utf8
3345                           * to guarantee those semantics */
3346                         if (! has_utf8) {
3347                             SvCUR_set(sv, d - SvPVX_const(sv));
3348                             SvPOK_on(sv);
3349                             *d = '\0';
3350                             /* See Note on sizing above.  */
3351                             sv_utf8_upgrade_flags_grow(
3352                                         sv,
3353                                         SV_GMAGIC|SV_FORCE_UTF8_UPGRADE,
3354                                         UNISKIP(uv) + (STRLEN)(send - e) + 1);
3355                             d = SvPVX(sv) + SvCUR(sv);
3356                             has_utf8 = TRUE;
3357                         }
3358
3359                         /* Add the (Unicode) code point to the output. */
3360                         if (UNI_IS_INVARIANT(uv)) {
3361                             *d++ = (char) LATIN1_TO_NATIVE(uv);
3362                         }
3363                         else {
3364                             d = (char*) uvoffuni_to_utf8_flags((U8*)d, uv, 0);
3365                         }
3366                     }
3367                 }
3368                 else /* Here is \N{NAME} but not \N{U+...}. */
3369                      if ((res = get_and_check_backslash_N_name(s, e)))
3370                 {
3371                     STRLEN len;
3372                     const char *str = SvPV_const(res, len);
3373                     if (PL_lex_inpat) {
3374
3375                         if (! len) { /* The name resolved to an empty string */
3376                             Copy("\\N{}", d, 4, char);
3377                             d += 4;
3378                         }
3379                         else {
3380                             /* In order to not lose information for the regex
3381                             * compiler, pass the result in the specially made
3382                             * syntax: \N{U+c1.c2.c3...}, where c1 etc. are
3383                             * the code points in hex of each character
3384                             * returned by charnames */
3385
3386                             const char *str_end = str + len;
3387                             const STRLEN off = d - SvPVX_const(sv);
3388
3389                             if (! SvUTF8(res)) {
3390                                 /* For the non-UTF-8 case, we can determine the
3391                                  * exact length needed without having to parse
3392                                  * through the string.  Each character takes up
3393                                  * 2 hex digits plus either a trailing dot or
3394                                  * the "}" */
3395                                 const char initial_text[] = "\\N{U+";
3396                                 const STRLEN initial_len = sizeof(initial_text)
3397                                                            - 1;
3398                                 d = off + SvGROW(sv, off
3399                                                     + 3 * len
3400
3401                                                     /* +1 for trailing NUL */
3402                                                     + initial_len + 1
3403
3404                                                     + (STRLEN)(send - e));
3405                                 Copy(initial_text, d, initial_len, char);
3406                                 d += initial_len;
3407                                 while (str < str_end) {
3408                                     char hex_string[4];
3409                                     int len =
3410                                         my_snprintf(hex_string,
3411                                                   sizeof(hex_string),
3412                                                   "%02X.",
3413
3414                                                   /* The regex compiler is
3415                                                    * expecting Unicode, not
3416                                                    * native */
3417                                                   (U8) NATIVE_TO_LATIN1(*str));
3418                                     PERL_MY_SNPRINTF_POST_GUARD(len,
3419                                                            sizeof(hex_string));
3420                                     Copy(hex_string, d, 3, char);
3421                                     d += 3;
3422                                     str++;
3423                                 }
3424                                 d--;    /* Below, we will overwrite the final
3425                                            dot with a right brace */
3426                             }
3427                             else {
3428                                 STRLEN char_length; /* cur char's byte length */
3429
3430                                 /* and the number of bytes after this is
3431                                  * translated into hex digits */
3432                                 STRLEN output_length;
3433
3434                                 /* 2 hex per byte; 2 chars for '\N'; 2 chars
3435                                  * for max('U+', '.'); and 1 for NUL */
3436                                 char hex_string[2 * UTF8_MAXBYTES + 5];
3437
3438                                 /* Get the first character of the result. */
3439                                 U32 uv = utf8n_to_uvchr((U8 *) str,
3440                                                         len,
3441                                                         &char_length,
3442                                                         UTF8_ALLOW_ANYUV);
3443                                 /* Convert first code point to Unicode hex,
3444                                  * including the boiler plate before it. */
3445                                 output_length =
3446                                     my_snprintf(hex_string, sizeof(hex_string),
3447                                              "\\N{U+%X",
3448                                              (unsigned int) NATIVE_TO_UNI(uv));
3449
3450                                 /* Make sure there is enough space to hold it */
3451                                 d = off + SvGROW(sv, off
3452                                                     + output_length
3453                                                     + (STRLEN)(send - e)
3454                                                     + 2);       /* '}' + NUL */
3455                                 /* And output it */
3456                                 Copy(hex_string, d, output_length, char);
3457                                 d += output_length;
3458
3459                                 /* For each subsequent character, append dot and
3460                                 * its Unicode code point in hex */
3461                                 while ((str += char_length) < str_end) {
3462                                     const STRLEN off = d - SvPVX_const(sv);
3463                                     U32 uv = utf8n_to_uvchr((U8 *) str,
3464                                                             str_end - str,
3465                                                             &char_length,
3466                                                             UTF8_ALLOW_ANYUV);
3467                                     output_length =
3468                                         my_snprintf(hex_string,
3469                                              sizeof(hex_string),
3470                                              ".%X",
3471                                              (unsigned int) NATIVE_TO_UNI(uv));
3472
3473                                     d = off + SvGROW(sv, off
3474                                                         + output_length
3475                                                         + (STRLEN)(send - e)
3476                                                         + 2);   /* '}' +  NUL */
3477                                     Copy(hex_string, d, output_length, char);
3478                                     d += output_length;
3479                                 }
3480                             }
3481
3482                             *d++ = '}'; /* Done.  Add the trailing brace */
3483                         }
3484                     }
3485                     else { /* Here, not in a pattern.  Convert the name to a
3486                             * string. */
3487
3488                          /* If destination is not in utf8, unconditionally
3489                           * recode it to be so.  This is because \N{} implies
3490                           * Unicode semantics, and scalars have to be in utf8
3491                           * to guarantee those semantics */
3492                         if (! has_utf8) {
3493                             SvCUR_set(sv, d - SvPVX_const(sv));
3494                             SvPOK_on(sv);
3495                             *d = '\0';
3496                             /* See Note on sizing above.  */
3497                             sv_utf8_upgrade_flags_grow(sv,
3498                                                 SV_GMAGIC|SV_FORCE_UTF8_UPGRADE,
3499                                                 len + (STRLEN)(send - s) + 1);
3500                             d = SvPVX(sv) + SvCUR(sv);
3501                             has_utf8 = TRUE;
3502                         } else if (len > (STRLEN)(e - s + 4)) { /* I _guess_ 4 is \N{} --jhi */
3503
3504                             /* See Note on sizing above.  (NOTE: SvCUR() is not
3505                              * set correctly here). */
3506                             const STRLEN off = d - SvPVX_const(sv);
3507                             d = off + SvGROW(sv, off + len + (STRLEN)(send - s) + 1);
3508                         }
3509                         if (! SvUTF8(res)) {    /* Make sure \N{} return is UTF-8 */
3510                             sv_utf8_upgrade_flags(res, SV_UTF8_NO_ENCODING);
3511                             str = SvPV_const(res, len);
3512                         }
3513                         Copy(str, d, len, char);
3514                         d += len;
3515                     }
3516
3517                     SvREFCNT_dec(res);
3518
3519                 } /* End \N{NAME} */
3520 #ifdef EBCDIC
3521                 if (!dorange) 
3522                     native_range = FALSE; /* \N{} is defined to be Unicode */
3523 #endif
3524                 s = e + 1;  /* Point to just after the '}' */
3525                 continue;
3526
3527             /* \c is a control character */
3528             case 'c':
3529                 s++;
3530                 if (s < send) {
3531                     *d++ = grok_bslash_c(*s++, 1);
3532                 }
3533                 else {
3534                     yyerror("Missing control char name in \\c");
3535                 }
3536                 continue;
3537
3538             /* printf-style backslashes, formfeeds, newlines, etc */
3539             case 'b':
3540                 *d++ = '\b';
3541                 break;
3542             case 'n':
3543                 *d++ = '\n';
3544                 break;
3545             case 'r':
3546                 *d++ = '\r';
3547                 break;
3548             case 'f':
3549                 *d++ = '\f';
3550                 break;
3551             case 't':
3552                 *d++ = '\t';
3553                 break;
3554             case 'e':
3555                 *d++ = ESC_NATIVE;
3556                 break;
3557             case 'a':
3558                 *d++ = '\a';
3559                 break;
3560             } /* end switch */
3561
3562             s++;
3563             continue;
3564         } /* end if (backslash) */
3565 #ifdef EBCDIC
3566         else
3567             literal_endpoint++;
3568 #endif
3569
3570     default_action:
3571         /* If we started with encoded form, or already know we want it,
3572            then encode the next character */
3573         if (! NATIVE_BYTE_IS_INVARIANT((U8)(*s)) && (this_utf8 || has_utf8)) {
3574             STRLEN len  = 1;
3575
3576
3577             /* One might think that it is wasted effort in the case of the
3578              * source being utf8 (this_utf8 == TRUE) to take the next character
3579              * in the source, convert it to an unsigned value, and then convert
3580              * it back again.  But the source has not been validated here.  The
3581              * routine that does the conversion checks for errors like
3582              * malformed utf8 */
3583
3584             const UV nextuv   = (this_utf8)
3585                                 ? utf8n_to_uvchr((U8*)s, send - s, &len, 0)
3586                                 : (UV) ((U8) *s);
3587             const STRLEN need = UNISKIP(nextuv);
3588             if (!has_utf8) {
3589                 SvCUR_set(sv, d - SvPVX_const(sv));
3590                 SvPOK_on(sv);
3591                 *d = '\0';
3592                 /* See Note on sizing above.  */
3593                 sv_utf8_upgrade_flags_grow(sv,
3594                                         SV_GMAGIC|SV_FORCE_UTF8_UPGRADE,
3595                                         need + (STRLEN)(send - s) + 1);
3596                 d = SvPVX(sv) + SvCUR(sv);
3597                 has_utf8 = TRUE;
3598             } else if (need > len) {
3599                 /* encoded value larger than old, may need extra space (NOTE:
3600                  * SvCUR() is not set correctly here).   See Note on sizing
3601                  * above.  */
3602                 const STRLEN off = d - SvPVX_const(sv);
3603                 d = SvGROW(sv, off + need + (STRLEN)(send - s) + 1) + off;
3604             }
3605             s += len;
3606
3607             d = (char*)uvchr_to_utf8((U8*)d, nextuv);
3608 #ifdef EBCDIC
3609             if (uv > 255 && !dorange)
3610                 native_range = FALSE;
3611 #endif
3612         }
3613         else {
3614             *d++ = *s++;
3615         }
3616     } /* while loop to process each character */
3617
3618     /* terminate the string and set up the sv */
3619     *d = '\0';
3620     SvCUR_set(sv, d - SvPVX_const(sv));
3621     if (SvCUR(sv) >= SvLEN(sv))
3622         Perl_croak(aTHX_ "panic: constant overflowed allocated space, %"UVuf
3623                    " >= %"UVuf, (UV)SvCUR(sv), (UV)SvLEN(sv));
3624
3625     SvPOK_on(sv);
3626     if (IN_ENCODING && !has_utf8) {
3627         sv_recode_to_utf8(sv, _get_encoding());
3628         if (SvUTF8(sv))
3629             has_utf8 = TRUE;
3630     }
3631     if (has_utf8) {
3632         SvUTF8_on(sv);
3633         if (PL_lex_inwhat == OP_TRANS && PL_sublex_info.sub_op) {
3634             PL_sublex_info.sub_op->op_private |=
3635                     (PL_lex_repl ? OPpTRANS_FROM_UTF : OPpTRANS_TO_UTF);
3636         }
3637     }
3638
3639     /* shrink the sv if we allocated more than we used */
3640     if (SvCUR(sv) + 5 < SvLEN(sv)) {
3641         SvPV_shrink_to_cur(sv);
3642     }
3643
3644     /* return the substring (via pl_yylval) only if we parsed anything */
3645     if (s > start) {
3646         char *s2 = start;
3647         for (; s2 < s; s2++) {
3648             if (*s2 == '\n')
3649                 COPLINE_INC_WITH_HERELINES;
3650         }
3651         SvREFCNT_inc_simple_void_NN(sv);
3652         if (   (PL_hints & ( PL_lex_inpat ? HINT_NEW_RE : HINT_NEW_STRING ))
3653             && ! PL_parser->lex_re_reparsing)
3654         {
3655             const char *const key = PL_lex_inpat ? "qr" : "q";
3656             const STRLEN keylen = PL_lex_inpat ? 2 : 1;
3657             const char *type;
3658             STRLEN typelen;
3659
3660             if (PL_lex_inwhat == OP_TRANS) {
3661                 type = "tr";
3662                 typelen = 2;
3663             } else if (PL_lex_inwhat == OP_SUBST && !PL_lex_inpat) {
3664                 type = "s";
3665                 typelen = 1;
3666             } else if (PL_lex_inpat && SvIVX(PL_linestr) == '\'') {
3667                 type = "q";
3668                 typelen = 1;
3669             } else  {
3670                 type = "qq";
3671                 typelen = 2;
3672             }
3673
3674             sv = S_new_constant(aTHX_ start, s - start, key, keylen, sv, NULL,
3675                                 type, typelen);
3676         }
3677         pl_yylval.opval = (OP*)newSVOP(OP_CONST, 0, sv);
3678     }
3679     LEAVE_with_name("scan_const");
3680     return s;
3681 }
3682
3683 /* S_intuit_more
3684  * Returns TRUE if there's more to the expression (e.g., a subscript),
3685  * FALSE otherwise.
3686  *
3687  * It deals with "$foo[3]" and /$foo[3]/ and /$foo[0123456789$]+/
3688  *
3689  * ->[ and ->{ return TRUE
3690  * ->$* ->$#* ->@* ->@[ ->@{ return TRUE if postderef_qq is enabled
3691  * { and [ outside a pattern are always subscripts, so return TRUE
3692  * if we're outside a pattern and it's not { or [, then return FALSE
3693  * if we're in a pattern and the first char is a {
3694  *   {4,5} (any digits around the comma) returns FALSE
3695  * if we're in a pattern and the first char is a [
3696  *   [] returns FALSE
3697  *   [SOMETHING] has a funky algorithm to decide whether it's a
3698  *      character class or not.  It has to deal with things like
3699  *      /$foo[-3]/ and /$foo[$bar]/ as well as /$foo[$\d]+/
3700  * anything else returns TRUE
3701  */
3702
3703 /* This is the one truly awful dwimmer necessary to conflate C and sed. */
3704
3705 STATIC int
3706 S_intuit_more(pTHX_ char *s)
3707 {
3708     PERL_ARGS_ASSERT_INTUIT_MORE;
3709
3710     if (PL_lex_brackets)
3711         return TRUE;
3712     if (*s == '-' && s[1] == '>' && (s[2] == '[' || s[2] == '{'))
3713         return TRUE;
3714     if (*s == '-' && s[1] == '>'
3715      && FEATURE_POSTDEREF_QQ_IS_ENABLED
3716      && ( (s[2] == '$' && (s[3] == '*' || (s[3] == '#' && s[4] == '*')))
3717         ||(s[2] == '@' && strchr("*[{",s[3])) ))
3718         return TRUE;
3719     if (*s != '{' && *s != '[')
3720         return FALSE;
3721     if (!PL_lex_inpat)
3722         return TRUE;
3723
3724     /* In a pattern, so maybe we have {n,m}. */
3725     if (*s == '{') {
3726         if (regcurly(s)) {
3727             return FALSE;
3728         }
3729         return TRUE;
3730     }
3731
3732     /* On the other hand, maybe we have a character class */
3733
3734     s++;
3735     if (*s == ']' || *s == '^')
3736         return FALSE;
3737     else {
3738         /* this is terrifying, and it works */
3739         int weight;
3740         char seen[256];
3741         const char * const send = strchr(s,']');
3742         unsigned char un_char, last_un_char;
3743         char tmpbuf[sizeof PL_tokenbuf * 4];
3744
3745         if (!send)              /* has to be an expression */
3746             return TRUE;
3747         weight = 2;             /* let's weigh the evidence */
3748
3749         if (*s == '$')
3750             weight -= 3;
3751         else if (isDIGIT(*s)) {
3752             if (s[1] != ']') {
3753                 if (isDIGIT(s[1]) && s[2] == ']')
3754                     weight -= 10;
3755             }
3756             else
3757                 weight -= 100;
3758         }
3759         Zero(seen,256,char);
3760         un_char = 255;
3761         for (; s < send; s++) {
3762             last_un_char = un_char;
3763             un_char = (unsigned char)*s;
3764             switch (*s) {
3765             case '@':
3766             case '&':
3767             case '$':
3768                 weight -= seen[un_char] * 10;
3769                 if (isWORDCHAR_lazy_if(s+1,UTF)) {
3770                     int len;
3771                     char *tmp = PL_bufend;
3772                     PL_bufend = (char*)send;
3773                     scan_ident(s, tmpbuf, sizeof tmpbuf, FALSE);
3774                     PL_bufend = tmp;
3775                     len = (int)strlen(tmpbuf);
3776                     if (len > 1 && gv_fetchpvn_flags(tmpbuf, len,
3777                                                     UTF ? SVf_UTF8 : 0, SVt_PV))
3778                         weight -= 100;
3779                     else
3780                         weight -= 10;
3781                 }
3782                 else if (*s == '$' && s[1] &&
3783                   strchr("[#!%*<>()-=",s[1])) {
3784                     if (/*{*/ strchr("])} =",s[2]))
3785                         weight -= 10;
3786                     else
3787                         weight -= 1;
3788                 }
3789                 break;
3790             case '\\':
3791                 un_char = 254;
3792                 if (s[1]) {
3793                     if (strchr("wds]",s[1]))
3794                         weight += 100;
3795                     else if (seen[(U8)'\''] || seen[(U8)'"'])
3796                         weight += 1;
3797                     else if (strchr("rnftbxcav",s[1]))
3798                         weight += 40;
3799                     else if (isDIGIT(s[1])) {
3800                         weight += 40;
3801                         while (s[1] && isDIGIT(s[1]))
3802                             s++;
3803                     }
3804                 }
3805                 else
3806                     weight += 100;
3807                 break;
3808             case '-':
3809                 if (s[1] == '\\')
3810                     weight += 50;
3811                 if (strchr("aA01! ",last_un_char))
3812                     weight += 30;
3813                 if (strchr("zZ79~",s[1]))
3814                     weight += 30;
3815                 if (last_un_char == 255 && (isDIGIT(s[1]) || s[1] == '$'))
3816                     weight -= 5;        /* cope with negative subscript */
3817                 break;
3818             default:
3819                 if (!isWORDCHAR(last_un_char)
3820                     && !(last_un_char == '$' || last_un_char == '@'
3821                          || last_un_char == '&')
3822                     && isALPHA(*s) && s[1] && isALPHA(s[1])) {
3823                     char *d = s;
3824                     while (isALPHA(*s))
3825                         s++;
3826                     if (keyword(d, s - d, 0))
3827                         weight -= 150;
3828                 }
3829                 if (un_char == last_un_char + 1)
3830                     weight += 5;
3831                 weight -= seen[un_char];
3832                 break;
3833             }
3834             seen[un_char]++;
3835         }
3836         if (weight >= 0)        /* probably a character class */
3837             return FALSE;
3838     }
3839
3840     return TRUE;
3841 }
3842
3843 /*
3844  * S_intuit_method
3845  *
3846  * Does all the checking to disambiguate
3847  *   foo bar
3848  * between foo(bar) and bar->foo.  Returns 0 if not a method, otherwise
3849  * FUNCMETH (bar->foo(args)) or METHOD (bar->foo args).
3850  *
3851  * First argument is the stuff after the first token, e.g. "bar".
3852  *
3853  * Not a method if foo is a filehandle.
3854  * Not a method if foo is a subroutine prototyped to take a filehandle.
3855  * Not a method if it's really "Foo $bar"
3856  * Method if it's "foo $bar"
3857  * Not a method if it's really "print foo $bar"
3858  * Method if it's really "foo package::" (interpreted as package->foo)
3859  * Not a method if bar is known to be a subroutine ("sub bar; foo bar")
3860  * Not a method if bar is a filehandle or package, but is quoted with
3861  *   =>
3862  */
3863
3864 STATIC int
3865 S_intuit_method(pTHX_ char *start, SV *ioname, CV *cv)
3866 {
3867     char *s = start + (*start == '$');
3868     char tmpbuf[sizeof PL_tokenbuf];
3869     STRLEN len;
3870     GV* indirgv;
3871         /* Mustn't actually add anything to a symbol table.
3872            But also don't want to "initialise" any placeholder
3873            constants that might already be there into full
3874            blown PVGVs with attached PVCV.  */
3875     GV * const gv =
3876         ioname ? gv_fetchsv(ioname, GV_NOADD_NOINIT, SVt_PVCV) : NULL;
3877
3878     PERL_ARGS_ASSERT_INTUIT_METHOD;
3879
3880     if (gv && SvTYPE(gv) == SVt_PVGV && GvIO(gv))
3881             return 0;
3882     if (cv && SvPOK(cv)) {
3883         const char *proto = CvPROTO(cv);
3884         if (proto) {
3885             while (*proto && (isSPACE(*proto) || *proto == ';'))
3886                 proto++;
3887             if (*proto == '*')
3888                 return 0;
3889         }
3890     }
3891
3892     if (*start == '$') {
3893         if (cv || PL_last_lop_op == OP_PRINT || PL_last_lop_op == OP_SAY ||
3894                 isUPPER(*PL_tokenbuf))
3895             return 0;
3896         s = skipspace(s);
3897         PL_bufptr = start;
3898         PL_expect = XREF;
3899         return *s == '(' ? FUNCMETH : METHOD;
3900     }
3901
3902     s = scan_word(s, tmpbuf, sizeof tmpbuf, TRUE, &len);
3903     /* start is the beginning of the possible filehandle/object,
3904      * and s is the end of it
3905      * tmpbuf is a copy of it (but with single quotes as double colons)
3906      */
3907
3908     if (!keyword(tmpbuf, len, 0)) {
3909         if (len > 2 && tmpbuf[len - 2] == ':' && tmpbuf[len - 1] == ':') {
3910             len -= 2;
3911             tmpbuf[len] = '\0';
3912             goto bare_package;
3913         }
3914         indirgv = gv_fetchpvn_flags(tmpbuf, len, ( UTF ? SVf_UTF8 : 0 ), SVt_PVCV);
3915         if (indirgv && GvCVu(indirgv))
3916             return 0;
3917         /* filehandle or package name makes it a method */
3918         if (!cv || GvIO(indirgv) || gv_stashpvn(tmpbuf, len, UTF ? SVf_UTF8 : 0)) {
3919             s = skipspace(s);
3920             if ((PL_bufend - s) >= 2 && *s == '=' && *(s+1) == '>')
3921                 return 0;       /* no assumptions -- "=>" quotes bareword */
3922       bare_package:
3923             NEXTVAL_NEXTTOKE.opval = (OP*)newSVOP(OP_CONST, 0,
3924                                                   S_newSV_maybe_utf8(aTHX_ tmpbuf, len));
3925             NEXTVAL_NEXTTOKE.opval->op_private = OPpCONST_BARE;
3926             PL_expect = XTERM;
3927             force_next(WORD);
3928             PL_bufptr = s;
3929             return *s == '(' ? FUNCMETH : METHOD;
3930         }
3931     }
3932     return 0;
3933 }
3934
3935 /* Encoded script support. filter_add() effectively inserts a
3936  * 'pre-processing' function into the current source input stream.
3937  * Note that the filter function only applies to the current source file
3938  * (e.g., it will not affect files 'require'd or 'use'd by this one).
3939  *
3940  * The datasv parameter (which may be NULL) can be used to pass
3941  * private data to this instance of the filter. The filter function
3942  * can recover the SV using the FILTER_DATA macro and use it to
3943  * store private buffers and state information.
3944  *
3945  * The supplied datasv parameter is upgraded to a PVIO type
3946  * and the IoDIRP/IoANY field is used to store the function pointer,
3947  * and IOf_FAKE_DIRP is enabled on datasv to mark this as such.
3948  * Note that IoTOP_NAME, IoFMT_NAME, IoBOTTOM_NAME, if set for
3949  * private use must be set using malloc'd pointers.
3950  */
3951
3952 SV *
3953 Perl_filter_add(pTHX_ filter_t funcp, SV *datasv)
3954 {
3955     if (!funcp)
3956         return NULL;
3957
3958     if (!PL_parser)
3959         return NULL;
3960
3961     if (PL_parser->lex_flags & LEX_IGNORE_UTF8_HINTS)
3962         Perl_croak(aTHX_ "Source filters apply only to byte streams");
3963
3964     if (!PL_rsfp_filters)
3965         PL_rsfp_filters = newAV();
3966     if (!datasv)
3967         datasv = newSV(0);
3968     SvUPGRADE(datasv, SVt_PVIO);
3969     IoANY(datasv) = FPTR2DPTR(void *, funcp); /* stash funcp into spare field */
3970     IoFLAGS(datasv) |= IOf_FAKE_DIRP;
3971     DEBUG_P(PerlIO_printf(Perl_debug_log, "filter_add func %p (%s)\n",
3972                           FPTR2DPTR(void *, IoANY(datasv)),
3973                           SvPV_nolen(datasv)));
3974     av_unshift(PL_rsfp_filters, 1);
3975     av_store(PL_rsfp_filters, 0, datasv) ;
3976     if (
3977         !PL_parser->filtered
3978      && PL_parser->lex_flags & LEX_EVALBYTES
3979      && PL_bufptr < PL_bufend
3980     ) {
3981         const char *s = PL_bufptr;
3982         while (s < PL_bufend) {
3983             if (*s == '\n') {
3984                 SV *linestr = PL_parser->linestr;
3985                 char *buf = SvPVX(linestr);
3986                 STRLEN const bufptr_pos = PL_parser->bufptr - buf;
3987                 STRLEN const oldbufptr_pos = PL_parser->oldbufptr - buf;
3988                 STRLEN const oldoldbufptr_pos=PL_parser->oldoldbufptr-buf;
3989                 STRLEN const linestart_pos = PL_parser->linestart - buf;
3990                 STRLEN const last_uni_pos =
3991                     PL_parser->last_uni ? PL_parser->last_uni - buf : 0;
3992                 STRLEN const last_lop_pos =
3993                     PL_parser->last_lop ? PL_parser->last_lop - buf : 0;
3994                 av_push(PL_rsfp_filters, linestr);
3995                 PL_parser->linestr = 
3996                     newSVpvn(SvPVX(linestr), ++s-SvPVX(linestr));
3997                 buf = SvPVX(PL_parser->linestr);
3998                 PL_parser->bufend = buf + SvCUR(PL_parser->linestr);
3999                 PL_parser->bufptr = buf + bufptr_pos;
4000                 PL_parser->oldbufptr = buf + oldbufptr_pos;
4001                 PL_parser->oldoldbufptr = buf + oldoldbufptr_pos;
4002                 PL_parser->linestart = buf + linestart_pos;
4003                 if (PL_parser->last_uni)
4004                     PL_parser->last_uni = buf + last_uni_pos;
4005                 if (PL_parser->last_lop)
4006                     PL_parser->last_lop = buf + last_lop_pos;
4007                 SvLEN(linestr) = SvCUR(linestr);
4008                 SvCUR(linestr) = s-SvPVX(linestr);
4009                 PL_parser->filtered = 1;
4010                 break;
4011             }
4012             s++;
4013         }
4014     }
4015     return(datasv);
4016 }
4017
4018
4019 /* Delete most recently added instance of this filter function. */
4020 void
4021 Perl_filter_del(pTHX_ filter_t funcp)
4022 {
4023     SV *datasv;
4024
4025     PERL_ARGS_ASSERT_FILTER_DEL;
4026
4027 #ifdef DEBUGGING
4028     DEBUG_P(PerlIO_printf(Perl_debug_log, "filter_del func %p",
4029                           FPTR2DPTR(void*, funcp)));
4030 #endif
4031     if (!PL_parser || !PL_rsfp_filters || AvFILLp(PL_rsfp_filters)<0)
4032         return;
4033     /* if filter is on top of stack (usual case) just pop it off */
4034     datasv = FILTER_DATA(AvFILLp(PL_rsfp_filters));
4035     if (IoANY(datasv) == FPTR2DPTR(void *, funcp)) {
4036         sv_free(av_pop(PL_rsfp_filters));
4037
4038         return;
4039     }
4040     /* we need to search for the correct entry and clear it     */
4041     Perl_die(aTHX_ "filter_del can only delete in reverse order (currently)");
4042 }
4043
4044
4045 /* Invoke the idxth filter function for the current rsfp.        */
4046 /* maxlen 0 = read one text line */
4047 I32
4048 Perl_filter_read(pTHX_ int idx, SV *buf_sv, int maxlen)
4049 {
4050     filter_t funcp;
4051     SV *datasv = NULL;
4052     /* This API is bad. It should have been using unsigned int for maxlen.
4053        Not sure if we want to change the API, but if not we should sanity
4054        check the value here.  */
4055     unsigned int correct_length = maxlen < 0 ?  PERL_INT_MAX : maxlen;
4056
4057     PERL_ARGS_ASSERT_FILTER_READ;
4058
4059     if (!PL_parser || !PL_rsfp_filters)
4060         return -1;
4061     if (idx > AvFILLp(PL_rsfp_filters)) {       /* Any more filters?    */
4062         /* Provide a default input filter to make life easy.    */
4063         /* Note that we append to the line. This is handy.      */
4064         DEBUG_P(PerlIO_printf(Perl_debug_log,
4065                               "filter_read %d: from rsfp\n", idx));
4066         if (correct_length) {
4067             /* Want a block */
4068             int len ;
4069             const int old_len = SvCUR(buf_sv);
4070
4071             /* ensure buf_sv is large enough */
4072             SvGROW(buf_sv, (STRLEN)(old_len + correct_length + 1)) ;
4073             if ((len = PerlIO_read(PL_rsfp, SvPVX(buf_sv) + old_len,
4074                                    correct_length)) <= 0) {
4075                 if (PerlIO_error(PL_rsfp))
4076                     return -1;          /* error */
4077                 else
4078                     return 0 ;          /* end of file */
4079             }
4080             SvCUR_set(buf_sv, old_len + len) ;
4081             SvPVX(buf_sv)[old_len + len] = '\0';
4082         } else {
4083             /* Want a line */
4084             if (sv_gets(buf_sv, PL_rsfp, SvCUR(buf_sv)) == NULL) {
4085                 if (PerlIO_error(PL_rsfp))
4086                     return -1;          /* error */
4087                 else
4088                     return 0 ;          /* end of file */
4089             }
4090         }
4091         return SvCUR(buf_sv);
4092     }
4093     /* Skip this filter slot if filter has been deleted */
4094     if ( (datasv = FILTER_DATA(idx)) == &PL_sv_undef) {
4095         DEBUG_P(PerlIO_printf(Perl_debug_log,
4096                               "filter_read %d: skipped (filter deleted)\n",
4097                               idx));
4098         return FILTER_READ(idx+1, buf_sv, correct_length); /* recurse */
4099     }
4100     if (SvTYPE(datasv) != SVt_PVIO) {
4101         if (correct_length) {
4102             /* Want a block */
4103             const STRLEN remainder = SvLEN(datasv) - SvCUR(datasv);
4104             if (!remainder) return 0; /* eof */
4105             if (correct_length > remainder) correct_length = remainder;
4106             sv_catpvn(buf_sv, SvEND(datasv), correct_length);
4107             SvCUR_set(datasv, SvCUR(datasv) + correct_length);
4108         } else {
4109             /* Want a line */
4110             const char *s = SvEND(datasv);
4111             const char *send = SvPVX(datasv) + SvLEN(datasv);
4112             while (s < send) {
4113                 if (*s == '\n') {
4114                     s++;
4115                     break;
4116                 }
4117                 s++;
4118             }
4119             if (s == send) return 0; /* eof */
4120             sv_catpvn(buf_sv, SvEND(datasv), s-SvEND(datasv));
4121             SvCUR_set(datasv, s-SvPVX(datasv));
4122         }
4123         return SvCUR(buf_sv);
4124     }
4125     /* Get function pointer hidden within datasv        */
4126     funcp = DPTR2FPTR(filter_t, IoANY(datasv));
4127     DEBUG_P(PerlIO_printf(Perl_debug_log,
4128                           "filter_read %d: via function %p (%s)\n",
4129                           idx, (void*)datasv, SvPV_nolen_const(datasv)));
4130     /* Call function. The function is expected to       */
4131     /* call "FILTER_READ(idx+1, buf_sv)" first.         */
4132     /* Return: <0:error, =0:eof, >0:not eof             */
4133     return (*funcp)(aTHX_ idx, buf_sv, correct_length);
4134 }
4135
4136 STATIC char *
4137 S_filter_gets(pTHX_ SV *sv, STRLEN append)
4138 {
4139     PERL_ARGS_ASSERT_FILTER_GETS;
4140
4141 #ifdef PERL_CR_FILTER
4142     if (!PL_rsfp_filters) {
4143         filter_add(S_cr_textfilter,NULL);
4144     }
4145 #endif
4146     if (PL_rsfp_filters) {
4147         if (!append)
4148             SvCUR_set(sv, 0);   /* start with empty line        */
4149         if (FILTER_READ(0, sv, 0) > 0)
4150             return ( SvPVX(sv) ) ;
4151         else
4152             return NULL ;
4153     }
4154     else
4155         return (sv_gets(sv, PL_rsfp, append));
4156 }
4157
4158 STATIC HV *
4159 S_find_in_my_stash(pTHX_ const char *pkgname, STRLEN len)
4160 {
4161     GV *gv;
4162
4163     PERL_ARGS_ASSERT_FIND_IN_MY_STASH;
4164
4165     if (len == 11 && *pkgname == '_' && strEQ(pkgname, "__PACKAGE__"))
4166         return PL_curstash;
4167
4168     if (len > 2 &&
4169         (pkgname[len - 2] == ':' && pkgname[len - 1] == ':') &&
4170         (gv = gv_fetchpvn_flags(pkgname, len, ( UTF ? SVf_UTF8 : 0 ), SVt_PVHV)))
4171     {
4172         return GvHV(gv);                        /* Foo:: */
4173     }
4174
4175     /* use constant CLASS => 'MyClass' */
4176     gv = gv_fetchpvn_flags(pkgname, len, UTF ? SVf_UTF8 : 0, SVt_PVCV);
4177     if (gv && GvCV(gv)) {
4178         SV * const sv = cv_const_sv(GvCV(gv));
4179         if (sv)
4180             return gv_stashsv(sv, 0);
4181     }
4182
4183     return gv_stashpvn(pkgname, len, UTF ? SVf_UTF8 : 0);
4184 }
4185
4186
4187 STATIC char *
4188 S_tokenize_use(pTHX_ int is_use, char *s) {
4189     PERL_ARGS_ASSERT_TOKENIZE_USE;
4190
4191     if (PL_expect != XSTATE)
4192         yyerror(Perl_form(aTHX_ "\"%s\" not allowed in expression",
4193                     is_use ? "use" : "no"));
4194     PL_expect = XTERM;
4195     s = skipspace(s);
4196     if (isDIGIT(*s) || (*s == 'v' && isDIGIT(s[1]))) {
4197         s = force_version(s, TRUE);
4198         if (*s == ';' || *s == '}'
4199                 || (s = skipspace(s), (*s == ';' || *s == '}'))) {
4200             NEXTVAL_NEXTTOKE.opval = NULL;
4201             force_next(WORD);
4202         }
4203         else if (*s == 'v') {
4204             s = force_word(s,WORD,FALSE,TRUE);
4205             s = force_version(s, FALSE);
4206         }
4207     }
4208     else {
4209         s = force_word(s,WORD,FALSE,TRUE);
4210         s = force_version(s, FALSE);
4211     }
4212     pl_yylval.ival = is_use;
4213     return s;
4214 }
4215 #ifdef DEBUGGING
4216     static const char* const exp_name[] =
4217         { "OPERATOR", "TERM", "REF", "STATE", "BLOCK", "ATTRBLOCK",
4218           "ATTRTERM", "TERMBLOCK", "XBLOCKTERM", "POSTDEREF",
4219           "TERMORDORDOR"
4220         };
4221 #endif
4222
4223 #define word_takes_any_delimeter(p,l) S_word_takes_any_delimeter(p,l)
4224 STATIC bool
4225 S_word_takes_any_delimeter(char *p, STRLEN len)
4226 {
4227     return (len == 1 && strchr("msyq", p[0])) ||
4228            (len == 2 && (
4229             (p[0] == 't' && p[1] == 'r') ||
4230             (p[0] == 'q' && strchr("qwxr", p[1]))));
4231 }
4232
4233 static void
4234 S_check_scalar_slice(pTHX_ char *s)
4235 {
4236     s++;
4237     while (*s == ' ' || *s == '\t') s++;
4238     if (*s == 'q' && s[1] == 'w'
4239      && !isWORDCHAR_lazy_if(s+2,UTF))
4240         return;
4241     while (*s && (isWORDCHAR_lazy_if(s,UTF) || strchr(" \t$#+-'\"", *s)))
4242         s += UTF ? UTF8SKIP(s) : 1;
4243     if (*s == '}' || *s == ']')
4244         pl_yylval.ival = OPpSLICEWARNING;
4245 }
4246
4247 /*
4248   yylex
4249
4250   Works out what to call the token just pulled out of the input
4251   stream.  The yacc parser takes care of taking the ops we return and
4252   stitching them into a tree.
4253
4254   Returns:
4255     The type of the next token
4256
4257   Structure:
4258       Switch based on the current state:
4259           - if we already built the token before, use it
4260           - if we have a case modifier in a string, deal with that
4261           - handle other cases of interpolation inside a string
4262           - scan the next line if we are inside a format
4263       In the normal state switch on the next character:
4264           - default:
4265             if alphabetic, go to key lookup
4266             unrecoginized character - croak
4267           - 0/4/26: handle end-of-line or EOF
4268           - cases for whitespace
4269           - \n and #: handle comments and line numbers
4270           - various operators, brackets and sigils
4271           - numbers
4272           - quotes
4273           - 'v': vstrings (or go to key lookup)
4274           - 'x' repetition operator (or go to key lookup)
4275           - other ASCII alphanumerics (key lookup begins here):
4276               word before => ?
4277               keyword plugin
4278               scan built-in keyword (but do nothing with it yet)
4279               check for statement label
4280               check for lexical subs
4281                   goto just_a_word if there is one
4282               see whether built-in keyword is overridden
4283               switch on keyword number:
4284                   - default: just_a_word:
4285                       not a built-in keyword; handle bareword lookup
4286                       disambiguate between method and sub call
4287                       fall back to bareword
4288                   - cases for built-in keywords
4289 */
4290
4291
4292 int
4293 Perl_yylex(pTHX)
4294 {
4295     dVAR;
4296     char *s = PL_bufptr;
4297     char *d;
4298     STRLEN len;
4299     bool bof = FALSE;
4300     const bool saw_infix_sigil = cBOOL(PL_parser->saw_infix_sigil);
4301     U8 formbrack = 0;
4302     U32 fake_eof = 0;
4303
4304     /* orig_keyword, gvp, and gv are initialized here because
4305      * jump to the label just_a_word_zero can bypass their
4306      * initialization later. */
4307     I32 orig_keyword = 0;
4308     GV *gv = NULL;
4309     GV **gvp = NULL;
4310
4311     DEBUG_T( {
4312         SV* tmp = newSVpvs("");
4313         PerlIO_printf(Perl_debug_log, "### %"IVdf":LEX_%s/X%s %s\n",
4314             (IV)CopLINE(PL_curcop),
4315             lex_state_names[PL_lex_state],
4316             exp_name[PL_expect],
4317             pv_display(tmp, s, strlen(s), 0, 60));
4318         SvREFCNT_dec(tmp);
4319     } );
4320
4321     /* when we've already built the next token, just pull it out of the queue */
4322     if (PL_nexttoke) {
4323         PL_nexttoke--;
4324         pl_yylval = PL_nextval[PL_nexttoke];
4325         if (!PL_nexttoke) {
4326             PL_lex_state = PL_lex_defer;
4327             PL_lex_defer = LEX_NORMAL;
4328         }
4329         {
4330             I32 next_type;
4331             next_type = PL_nexttype[PL_nexttoke];
4332             if (next_type & (7<<24)) {
4333                 if (next_type & (1<<24)) {
4334                     if (PL_lex_brackets > 100)
4335                         Renew(PL_lex_brackstack, PL_lex_brackets + 10, char);
4336                     PL_lex_brackstack[PL_lex_brackets++] =
4337                         (char) ((next_type >> 16) & 0xff);
4338                 }
4339                 if (next_type & (2<<24))
4340                     PL_lex_allbrackets++;
4341                 if (next_type & (4<<24))
4342                     PL_lex_allbrackets--;
4343                 next_type &= 0xffff;
4344             }
4345             return REPORT(next_type == 'p' ? pending_ident() : next_type);
4346         }
4347     }
4348
4349     switch (PL_lex_state) {
4350     case LEX_NORMAL:
4351     case LEX_INTERPNORMAL:
4352         break;
4353
4354     /* interpolated case modifiers like \L \U, including \Q and \E.
4355        when we get here, PL_bufptr is at the \
4356     */
4357     case LEX_INTERPCASEMOD:
4358 #ifdef DEBUGGING
4359         if (PL_bufptr != PL_bufend && *PL_bufptr != '\\')
4360             Perl_croak(aTHX_
4361                        "panic: INTERPCASEMOD bufptr=%p, bufend=%p, *bufptr=%u",
4362                        PL_bufptr, PL_bufend, *PL_bufptr);
4363 #endif
4364         /* handle \E or end of string */
4365         if (PL_bufptr == PL_bufend || PL_bufptr[1] == 'E') {
4366             /* if at a \E */
4367             if (PL_lex_casemods) {
4368                 const char oldmod = PL_lex_casestack[--PL_lex_casemods];
4369                 PL_lex_casestack[PL_lex_casemods] = '\0';
4370
4371                 if (PL_bufptr != PL_bufend
4372                     && (oldmod == 'L' || oldmod == 'U' || oldmod == 'Q'
4373                         || oldmod == 'F')) {
4374                     PL_bufptr += 2;
4375                     PL_lex_state = LEX_INTERPCONCAT;
4376                 }
4377                 PL_lex_allbrackets--;
4378                 return REPORT(')');
4379             }
4380             else if ( PL_bufptr != PL_bufend && PL_bufptr[1] == 'E' ) {
4381                /* Got an unpaired \E */
4382                Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4383                         "Useless use of \\E");
4384             }
4385             if (PL_bufptr != PL_bufend)
4386                 PL_bufptr += 2;
4387             PL_lex_state = LEX_INTERPCONCAT;
4388             return yylex();
4389         }
4390         else {
4391             DEBUG_T({ PerlIO_printf(Perl_debug_log,
4392               "### Saw case modifier\n"); });
4393             s = PL_bufptr + 1;
4394             if (s[1] == '\\' && s[2] == 'E') {
4395                 PL_bufptr = s + 3;
4396                 PL_lex_state = LEX_INTERPCONCAT;
4397                 return yylex();
4398             }
4399             else {
4400                 I32 tmp;
4401                 if (strnEQ(s, "L\\u", 3) || strnEQ(s, "U\\l", 3))
4402                     tmp = *s, *s = s[2], s[2] = (char)tmp;      /* misordered... */
4403                 if ((*s == 'L' || *s == 'U' || *s == 'F') &&
4404                     (strchr(PL_lex_casestack, 'L')
4405                         || strchr(PL_lex_casestack, 'U')
4406                         || strchr(PL_lex_casestack, 'F'))) {
4407                     PL_lex_casestack[--PL_lex_casemods] = '\0';
4408                     PL_lex_allbrackets--;
4409                     return REPORT(')');
4410                 }
4411                 if (PL_lex_casemods > 10)
4412                     Renew(PL_lex_casestack, PL_lex_casemods + 2, char);
4413                 PL_lex_casestack[PL_lex_casemods++] = *s;
4414                 PL_lex_casestack[PL_lex_casemods] = '\0';
4415                 PL_lex_state = LEX_INTERPCONCAT;
4416                 NEXTVAL_NEXTTOKE.ival = 0;
4417                 force_next((2<<24)|'(');
4418                 if (*s == 'l')
4419                     NEXTVAL_NEXTTOKE.ival = OP_LCFIRST;
4420                 else if (*s == 'u')
4421                     NEXTVAL_NEXTTOKE.ival = OP_UCFIRST;
4422                 else if (*s == 'L')
4423                     NEXTVAL_NEXTTOKE.ival = OP_LC;
4424                 else if (*s == 'U')
4425                     NEXTVAL_NEXTTOKE.ival = OP_UC;
4426                 else if (*s == 'Q')
4427                     NEXTVAL_NEXTTOKE.ival = OP_QUOTEMETA;
4428                 else if (*s == 'F')
4429                     NEXTVAL_NEXTTOKE.ival = OP_FC;
4430                 else
4431                     Perl_croak(aTHX_ "panic: yylex, *s=%u", *s);
4432                 PL_bufptr = s + 1;
4433             }
4434             force_next(FUNC);
4435             if (PL_lex_starts) {
4436                 s = PL_bufptr;
4437                 PL_lex_starts = 0;
4438                 /* commas only at base level: /$a\Ub$c/ => ($a,uc(b.$c)) */
4439                 if (PL_lex_casemods == 1 && PL_lex_inpat)
4440                     TOKEN(',');
4441                 else
4442                     AopNOASSIGN(OP_CONCAT);
4443             }
4444             else
4445                 return yylex();
4446         }
4447
4448     case LEX_INTERPPUSH:
4449         return REPORT(sublex_push());
4450
4451     case LEX_INTERPSTART:
4452         if (PL_bufptr == PL_bufend)
4453             return REPORT(sublex_done());
4454         DEBUG_T({ if(*PL_bufptr != '(') PerlIO_printf(Perl_debug_log,
4455               "### Interpolated variable\n"); });
4456         PL_expect = XTERM;
4457         /* for /@a/, we leave the joining for the regex engine to do
4458          * (unless we're within \Q etc) */
4459         PL_lex_dojoin = (*PL_bufptr == '@'
4460                             && (!PL_lex_inpat || PL_lex_casemods));
4461         PL_lex_state = LEX_INTERPNORMAL;
4462         if (PL_lex_dojoin) {
4463             NEXTVAL_NEXTTOKE.ival = 0;
4464             force_next(',');
4465             force_ident("\"", '$');
4466             NEXTVAL_NEXTTOKE.ival = 0;
4467             force_next('$');
4468             NEXTVAL_NEXTTOKE.ival = 0;
4469             force_next((2<<24)|'(');
4470             NEXTVAL_NEXTTOKE.ival = OP_JOIN;    /* emulate join($", ...) */
4471             force_next(FUNC);
4472         }
4473         /* Convert (?{...}) and friends to 'do {...}' */
4474         if (PL_lex_inpat && *PL_bufptr == '(') {
4475             PL_parser->lex_shared->re_eval_start = PL_bufptr;
4476             PL_bufptr += 2;
4477             if (*PL_bufptr != '{')
4478                 PL_bufptr++;
4479             PL_expect = XTERMBLOCK;
4480             force_next(DO);
4481         }
4482
4483         if (PL_lex_starts++) {
4484             s = PL_bufptr;
4485             /* commas only at base level: /$a\Ub$c/ => ($a,uc(b.$c)) */
4486             if (!PL_lex_casemods && PL_lex_inpat)
4487                 TOKEN(',');
4488             else
4489                 AopNOASSIGN(OP_CONCAT);
4490         }
4491         return yylex();
4492
4493     case LEX_INTERPENDMAYBE:
4494         if (intuit_more(PL_bufptr)) {
4495             PL_lex_state = LEX_INTERPNORMAL;    /* false alarm, more expr */
4496             break;
4497         }
4498         /* FALLTHROUGH */
4499
4500     case LEX_INTERPEND:
4501         /* Treat state as LEX_NORMAL if we have no inner lexing scope.
4502            XXX This hack can be removed if we stop setting PL_lex_state to
4503            LEX_KNOWNEXT, as can the hack under LEX_INTREPCONCAT below.  */
4504         if (UNLIKELY(!PL_lex_inwhat)) {
4505             PL_lex_state = LEX_NORMAL;
4506             break;
4507         }
4508
4509         if (PL_lex_dojoin) {
4510             const U8 dojoin_was = PL_lex_dojoin;
4511             PL_lex_dojoin = FALSE;
4512             PL_lex_state = LEX_INTERPCONCAT;
4513             PL_lex_allbrackets--;
4514             return REPORT(dojoin_was == 1 ? ')' : POSTJOIN);
4515         }
4516         if (PL_lex_inwhat == OP_SUBST && PL_linestr == PL_lex_repl
4517             && SvEVALED(PL_lex_repl))
4518         {
4519             if (PL_bufptr != PL_bufend)
4520                 Perl_croak(aTHX_ "Bad evalled substitution pattern");
4521             PL_lex_repl = NULL;
4522         }
4523         /* Paranoia.  re_eval_start is adjusted when S_scan_heredoc sets
4524            re_eval_str.  If the here-doc body’s length equals the previous
4525            value of re_eval_start, re_eval_start will now be null.  So
4526            check re_eval_str as well. */
4527         if (PL_parser->lex_shared->re_eval_start
4528          || PL_parser->lex_shared->re_eval_str) {
4529             SV *sv;
4530             if (*PL_bufptr != ')')
4531                 Perl_croak(aTHX_ "Sequence (?{...}) not terminated with ')'");
4532             PL_bufptr++;
4533             /* having compiled a (?{..}) expression, return the original
4534              * text too, as a const */
4535             if (PL_parser->lex_shared->re_eval_str) {
4536                 sv = PL_parser->lex_shared->re_eval_str;
4537                 PL_parser->lex_shared->re_eval_str = NULL;
4538                 SvCUR_set(sv,
4539                          PL_bufptr - PL_parser->lex_shared->re_eval_start);
4540                 SvPV_shrink_to_cur(sv);
4541             }
4542             else sv = newSVpvn(PL_parser->lex_shared->re_eval_start,
4543                          PL_bufptr - PL_parser->lex_shared->re_eval_start);
4544             NEXTVAL_NEXTTOKE.opval =
4545                     (OP*)newSVOP(OP_CONST, 0,
4546                                  sv);
4547             force_next(THING);
4548             PL_parser->lex_shared->re_eval_start = NULL;
4549             PL_expect = XTERM;
4550             return REPORT(',');
4551         }
4552
4553         /* FALLTHROUGH */
4554     case LEX_INTERPCONCAT:
4555 #ifdef DEBUGGING
4556         if (PL_lex_brackets)
4557             Perl_croak(aTHX_ "panic: INTERPCONCAT, lex_brackets=%ld",
4558                        (long) PL_lex_brackets);
4559 #endif
4560         /* Treat state as LEX_NORMAL when not in an inner lexing scope.
4561            XXX This hack can be removed if we stop setting PL_lex_state to
4562            LEX_KNOWNEXT.  */
4563         if (UNLIKELY(!PL_lex_inwhat)) {
4564             PL_lex_state = LEX_NORMAL;
4565             break;
4566         }
4567
4568         if (PL_bufptr == PL_bufend)
4569             return REPORT(sublex_done());
4570
4571         /* m'foo' still needs to be parsed for possible (?{...}) */
4572         if (SvIVX(PL_linestr) == '\'' && !PL_lex_inpat) {
4573             SV *sv = newSVsv(PL_linestr);
4574             sv = tokeq(sv);
4575             pl_yylval.opval = (OP*)newSVOP(OP_CONST, 0, sv);
4576             s = PL_bufend;
4577         }
4578         else {
4579             s = scan_const(PL_bufptr);
4580             if (*s == '\\')
4581                 PL_lex_state = LEX_INTERPCASEMOD;
4582             else
4583                 PL_lex_state = LEX_INTERPSTART;
4584         }
4585
4586         if (s != PL_bufptr) {
4587             NEXTVAL_NEXTTOKE = pl_yylval;
4588             PL_expect = XTERM;
4589             force_next(THING);
4590             if (PL_lex_starts++) {
4591                 /* commas only at base level: /$a\Ub$c/ => ($a,uc(b.$c)) */
4592                 if (!PL_lex_casemods && PL_lex_inpat)
4593                     TOKEN(',');
4594                 else
4595                     AopNOASSIGN(OP_CONCAT);
4596             }
4597             else {
4598                 PL_bufptr = s;
4599                 return yylex();
4600             }
4601         }
4602
4603         return yylex();
4604     case LEX_FORMLINE:
4605         s = scan_formline(PL_bufptr);
4606         if (!PL_lex_formbrack)
4607         {
4608             formbrack = 1;
4609             goto rightbracket;
4610         }
4611         PL_bufptr = s;
4612         return yylex();
4613     }
4614
4615     /* We really do *not* want PL_linestr ever becoming a COW. */
4616     assert (!SvIsCOW(PL_linestr));
4617     s = PL_bufptr;
4618     PL_oldoldbufptr = PL_oldbufptr;
4619     PL_oldbufptr = s;
4620     PL_parser->saw_infix_sigil = 0;
4621
4622   retry:
4623     switch (*s) {
4624     default:
4625         if (UTF ? isIDFIRST_utf8((U8*)s) : isALNUMC(*s))
4626             goto keylookup;
4627         {
4628         SV *dsv = newSVpvs_flags("", SVs_TEMP);
4629         const char *c = UTF ? sv_uni_display(dsv, newSVpvn_flags(s,
4630                                                     UTF8SKIP(s),
4631                                                     SVs_TEMP | SVf_UTF8),
4632                                             10, UNI_DISPLAY_ISPRINT)
4633                             : Perl_form(aTHX_ "\\x%02X", (unsigned char)*s);
4634         len = UTF ? Perl_utf8_length(aTHX_ (U8 *) PL_linestart, (U8 *) s) : (STRLEN) (s - PL_linestart);
4635         if (len > UNRECOGNIZED_PRECEDE_COUNT) {
4636             d = UTF ? (char *) utf8_hop((U8 *) s, -UNRECOGNIZED_PRECEDE_COUNT) : s - UNRECOGNIZED_PRECEDE_COUNT;
4637         } else {
4638             d = PL_linestart;
4639         }
4640         Perl_croak(aTHX_  "Unrecognized character %s; marked by <-- HERE after %"UTF8f"<-- HERE near column %d", c,
4641                           UTF8fARG(UTF, (s - d), d),
4642                          (int) len + 1);
4643     }
4644     case 4:
4645     case 26:
4646         goto fake_eof;                  /* emulate EOF on ^D or ^Z */
4647     case 0:
4648         if ((!PL_rsfp || PL_lex_inwhat)
4649          && (!PL_parser->filtered || s+1 < PL_bufend)) {
4650             PL_last_uni = 0;
4651             PL_last_lop = 0;
4652             if (PL_lex_brackets &&
4653                     PL_lex_brackstack[PL_lex_brackets-1] != XFAKEEOF) {
4654                 yyerror((const char *)
4655                         (PL_lex_formbrack
4656                          ? "Format not terminated"
4657                          : "Missing right curly or square bracket"));
4658             }
4659             DEBUG_T( { PerlIO_printf(Perl_debug_log,
4660                         "### Tokener got EOF\n");
4661             } );
4662             TOKEN(0);
4663         }
4664         if (s++ < PL_bufend)
4665             goto retry;                 /* ignore stray nulls */
4666         PL_last_uni = 0;
4667         PL_last_lop = 0;
4668         if (!PL_in_eval && !PL_preambled) {
4669             PL_preambled = TRUE;
4670             if (PL_perldb) {
4671                 /* Generate a string of Perl code to load the debugger.
4672                  * If PERL5DB is set, it will return the contents of that,
4673                  * otherwise a compile-time require of perl5db.pl.  */
4674
4675                 const char * const pdb = PerlEnv_getenv("PERL5DB");
4676
4677                 if (pdb) {
4678                     sv_setpv(PL_linestr, pdb);
4679                     sv_catpvs(PL_linestr,";");
4680                 } else {
4681                     SETERRNO(0,SS_NORMAL);
4682                     sv_setpvs(PL_linestr, "BEGIN { require 'perl5db.pl' };");
4683                 }
4684                 PL_parser->preambling = CopLINE(PL_curcop);
4685             } else
4686                 sv_setpvs(PL_linestr,"");
4687             if (PL_preambleav) {
4688                 SV **svp = AvARRAY(PL_preambleav);
4689                 SV **const end = svp + AvFILLp(PL_preambleav);
4690                 while(svp <= end) {
4691                     sv_catsv(PL_linestr, *svp);
4692                     ++svp;
4693                     sv_catpvs(PL_linestr, ";");
4694                 }
4695                 sv_free(MUTABLE_SV(PL_preambleav));
4696                 PL_preambleav = NULL;
4697             }
4698             if (PL_minus_E)
4699                 sv_catpvs(PL_linestr,
4700                           "use feature ':5." STRINGIFY(PERL_VERSION) "';");
4701             if (PL_minus_n || PL_minus_p) {
4702                 sv_catpvs(PL_linestr, "LINE: while (<>) {"/*}*/);
4703                 if (PL_minus_l)
4704                     sv_catpvs(PL_linestr,"chomp;");
4705                 if (PL_minus_a) {
4706                     if (PL_minus_F) {
4707                         if ((*PL_splitstr == '/' || *PL_splitstr == '\''
4708                              || *PL_splitstr == '"')
4709                               && strchr(PL_splitstr + 1, *PL_splitstr))
4710                             Perl_sv_catpvf(aTHX_ PL_linestr, "our @F=split(%s);", PL_splitstr);
4711                         else {
4712                             /* "q\0${splitstr}\0" is legal perl. Yes, even NUL
4713                                bytes can be used as quoting characters.  :-) */
4714                             const char *splits = PL_splitstr;
4715                             sv_catpvs(PL_linestr, "our @F=split(q\0");
4716                             do {
4717                                 /* Need to \ \s  */
4718                                 if (*splits == '\\')
4719                                     sv_catpvn(PL_linestr, splits, 1);
4720                                 sv_catpvn(PL_linestr, splits, 1);
4721                             } while (*splits++);
4722                             /* This loop will embed the trailing NUL of
4723                                PL_linestr as the last thing it does before
4724                                terminating.  */
4725                             sv_catpvs(PL_linestr, ");");
4726                         }
4727                     }
4728                     else
4729                         sv_catpvs(PL_linestr,"our @F=split(' ');");
4730                 }
4731             }
4732             sv_catpvs(PL_linestr, "\n");
4733             PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
4734             PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
4735             PL_last_lop = PL_last_uni = NULL;
4736             if ((PERLDB_LINE || PERLDB_SAVESRC) && PL_curstash != PL_debstash)
4737                 update_debugger_info(PL_linestr, NULL, 0);
4738             goto retry;
4739         }
4740         do {
4741             fake_eof = 0;
4742             bof = PL_rsfp ? TRUE : FALSE;
4743             if (0) {
4744               fake_eof:
4745                 fake_eof = LEX_FAKE_EOF;
4746             }
4747             PL_bufptr = PL_bufend;
4748             COPLINE_INC_WITH_HERELINES;
4749             if (!lex_next_chunk(fake_eof)) {
4750                 CopLINE_dec(PL_curcop);
4751                 s = PL_bufptr;
4752                 TOKEN(';');     /* not infinite loop because rsfp is NULL now */
4753             }
4754             CopLINE_dec(PL_curcop);
4755             s = PL_bufptr;
4756             /* If it looks like the start of a BOM or raw UTF-16,
4757              * check if it in fact is. */
4758             if (bof && PL_rsfp &&
4759                      (*s == 0 ||
4760                       *(U8*)s == BOM_UTF8_FIRST_BYTE ||
4761                       *(U8*)s >= 0xFE ||
4762                       s[1] == 0)) {
4763                 Off_t offset = (IV)PerlIO_tell(PL_rsfp);
4764                 bof = (offset == (Off_t)SvCUR(PL_linestr));
4765 #if defined(PERLIO_USING_CRLF) && defined(PERL_TEXTMODE_SCRIPTS)
4766                 /* offset may include swallowed CR */
4767                 if (!bof)
4768                     bof = (offset == (Off_t)SvCUR(PL_linestr)+1);
4769 #endif
4770                 if (bof) {
4771                     PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
4772                     s = swallow_bom((U8*)s);
4773                 }
4774             }
4775             if (PL_parser->in_pod) {
4776                 /* Incest with pod. */
4777                 if (*s == '=' && strnEQ(s, "=cut", 4) && !isALPHA(s[4])) {
4778                     sv_setpvs(PL_linestr, "");
4779                     PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
4780                     PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
4781                     PL_last_lop = PL_last_uni = NULL;
4782                     PL_parser->in_pod = 0;
4783                 }
4784             }
4785             if (PL_rsfp || PL_parser->filtered)
4786                 incline(s);
4787         } while (PL_parser->in_pod);
4788         PL_oldoldbufptr = PL_oldbufptr = PL_bufptr = PL_linestart = s;
4789         PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
4790         PL_last_lop = PL_last_uni = NULL;
4791         if (CopLINE(PL_curcop) == 1) {
4792             while (s < PL_bufend && isSPACE(*s))
4793                 s++;
4794             if (*s == ':' && s[1] != ':') /* for csh execing sh scripts */
4795                 s++;
4796             d = NULL;
4797             if (!PL_in_eval) {
4798                 if (*s == '#' && *(s+1) == '!')
4799                     d = s + 2;
4800 #ifdef ALTERNATE_SHEBANG
4801                 else {
4802                     static char const as[] = ALTERNATE_SHEBANG;
4803                     if (*s == as[0] && strnEQ(s, as, sizeof(as) - 1))
4804                         d = s + (sizeof(as) - 1);
4805                 }
4806 #endif /* ALTERNATE_SHEBANG */
4807             }
4808             if (d) {
4809                 char *ipath;
4810                 char *ipathend;
4811
4812                 while (isSPACE(*d))
4813                     d++;
4814                 ipath = d;
4815                 while (*d && !isSPACE(*d))
4816                     d++;
4817                 ipathend = d;
4818
4819 #ifdef ARG_ZERO_IS_SCRIPT
4820                 if (ipathend > ipath) {
4821                     /*
4822                      * HP-UX (at least) sets argv[0] to the script name,
4823                      * which makes $^X incorrect.  And Digital UNIX and Linux,
4824                      * at least, set argv[0] to the basename of the Perl
4825                      * interpreter. So, having found "#!", we'll set it right.
4826                      */
4827                     SV* copfilesv = CopFILESV(PL_curcop);
4828                     if (copfilesv) {
4829                         SV * const x =
4830                             GvSV(gv_fetchpvs("\030", GV_ADD|GV_NOTQUAL,
4831                                              SVt_PV)); /* $^X */
4832                         assert(SvPOK(x) || SvGMAGICAL(x));
4833                         if (sv_eq(x, copfilesv)) {
4834                             sv_setpvn(x, ipath, ipathend - ipath);
4835                             SvSETMAGIC(x);
4836                         }
4837                         else {
4838                             STRLEN blen;
4839                             STRLEN llen;
4840                             const char *bstart = SvPV_const(copfilesv, blen);
4841                             const char * const lstart = SvPV_const(x, llen);
4842                             if (llen < blen) {
4843                                 bstart += blen - llen;
4844                                 if (strnEQ(bstart, lstart, llen) &&     bstart[-1] == '/') {
4845                                     sv_setpvn(x, ipath, ipathend - ipath);
4846                                     SvSETMAGIC(x);
4847                                 }
4848                             }
4849                         }
4850                     }
4851                     else {
4852                         /* Anything to do if no copfilesv? */
4853                     }
4854                     TAINT_NOT;  /* $^X is always tainted, but that's OK */
4855                 }
4856 #endif /* ARG_ZERO_IS_SCRIPT */
4857
4858                 /*
4859                  * Look for options.
4860                  */
4861                 d = instr(s,"perl -");
4862                 if (!d) {
4863                     d = instr(s,"perl");
4864 #if defined(DOSISH)
4865                     /* avoid getting into infinite loops when shebang
4866                      * line contains "Perl" rather than "perl" */
4867                     if (!d) {
4868                         for (d = ipathend-4; d >= ipath; --d) {
4869                             if (isALPHA_FOLD_EQ(*d, 'p')
4870                                 && !ibcmp(d, "perl", 4))
4871                             {
4872                                 break;
4873                             }
4874                         }
4875                         if (d < ipath)
4876                             d = NULL;
4877                     }
4878 #endif
4879                 }
4880 #ifdef ALTERNATE_SHEBANG
4881                 /*
4882                  * If the ALTERNATE_SHEBANG on this system starts with a
4883                  * character that can be part of a Perl expression, then if
4884                  * we see it but not "perl", we're probably looking at the
4885                  * start of Perl code, not a request to hand off to some
4886                  * other interpreter.  Similarly, if "perl" is there, but
4887                  * not in the first 'word' of the line, we assume the line
4888                  * contains the start of the Perl program.
4889                  */
4890                 if (d && *s != '#') {
4891                     const char *c = ipath;
4892                     while (*c && !strchr("; \t\r\n\f\v#", *c))
4893                         c++;
4894                     if (c < d)
4895                         d = NULL;       /* "perl" not in first word; ignore */
4896                     else
4897                         *s = '#';       /* Don't try to parse shebang line */
4898                 }
4899 #endif /* ALTERNATE_SHEBANG */
4900                 if (!d &&
4901                     *s == '#' &&
4902                     ipathend > ipath &&
4903                     !PL_minus_c &&
4904                     !instr(s,"indir") &&
4905                     instr(PL_origargv[0],"perl"))
4906                 {
4907                     dVAR;
4908                     char **newargv;
4909
4910                     *ipathend = '\0';
4911                     s = ipathend + 1;
4912                     while (s < PL_bufend && isSPACE(*s))
4913                         s++;
4914                     if (s < PL_bufend) {
4915                         Newx(newargv,PL_origargc+3,char*);
4916                         newargv[1] = s;
4917                         while (s < PL_bufend && !isSPACE(*s))
4918                             s++;
4919                         *s = '\0';
4920                         Copy(PL_origargv+1, newargv+2, PL_origargc+1, char*);
4921                     }
4922                     else
4923                         newargv = PL_origargv;
4924                     newargv[0] = ipath;
4925                     PERL_FPU_PRE_EXEC
4926                     PerlProc_execv(ipath, EXEC_ARGV_CAST(newargv));
4927                     PERL_FPU_POST_EXEC
4928                     Perl_croak(aTHX_ "Can't exec %s", ipath);
4929                 }
4930                 if (d) {
4931                     while (*d && !isSPACE(*d))
4932                         d++;
4933                     while (SPACE_OR_TAB(*d))
4934                         d++;
4935
4936                     if (*d++ == '-') {
4937                         const bool switches_done = PL_doswitches;
4938                         const U32 oldpdb = PL_perldb;
4939                         const bool oldn = PL_minus_n;
4940                         const bool oldp = PL_minus_p;
4941                         const char *d1 = d;
4942
4943                         do {
4944                             bool baduni = FALSE;
4945                             if (*d1 == 'C') {
4946                                 const char *d2 = d1 + 1;
4947                                 if (parse_unicode_opts((const char **)&d2)
4948                                     != PL_unicode)
4949                                     baduni = TRUE;
4950                             }
4951                             if (baduni || isALPHA_FOLD_EQ(*d1, 'M')) {
4952                                 const char * const m = d1;
4953                                 while (*d1 && !isSPACE(*d1))
4954                                     d1++;
4955                                 Perl_croak(aTHX_ "Too late for \"-%.*s\" option",
4956                                       (int)(d1 - m), m);
4957                             }
4958                             d1 = moreswitches(d1);
4959                         } while (d1);
4960                         if (PL_doswitches && !switches_done) {
4961                             int argc = PL_origargc;
4962                             char **argv = PL_origargv;
4963                             do {
4964                                 argc--,argv++;
4965                             } while (argc && argv[0][0] == '-' && argv[0][1]);
4966                             init_argv_symbols(argc,argv);
4967                         }
4968                         if (((PERLDB_LINE || PERLDB_SAVESRC) && !oldpdb) ||
4969                             ((PL_minus_n || PL_minus_p) && !(oldn || oldp)))
4970                               /* if we have already added "LINE: while (<>) {",
4971                                  we must not do it again */
4972                         {
4973                             sv_setpvs(PL_linestr, "");
4974                             PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
4975                             PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
4976                             PL_last_lop = PL_last_uni = NULL;
4977                             PL_preambled = FALSE;
4978                             if (PERLDB_LINE || PERLDB_SAVESRC)
4979                                 (void)gv_fetchfile(PL_origfilename);
4980                             goto retry;
4981                         }
4982                     }
4983                 }
4984             }
4985         }
4986         if (PL_lex_formbrack && PL_lex_brackets <= PL_lex_formbrack) {
4987             PL_lex_state = LEX_FORMLINE;
4988             force_next(FORMRBRACK);
4989             TOKEN(';');
4990         }
4991         goto retry;
4992     case '\r':
4993 #ifdef PERL_STRICT_CR
4994         Perl_warn(aTHX_ "Illegal character \\%03o (carriage return)", '\r');
4995         Perl_croak(aTHX_
4996       "\t(Maybe you didn't strip carriage returns after a network transfer?)\n");
4997 #endif
4998     case ' ': case '\t': case '\f': case '\v':
4999         s++;
5000         goto retry;
5001     case '#':
5002     case '\n':
5003         if (PL_lex_state != LEX_NORMAL ||
5004              (PL_in_eval && !PL_rsfp && !PL_parser->filtered)) {
5005             const bool in_comment = *s == '#';
5006             if (*s == '#' && s == PL_linestart && PL_in_eval
5007              && !PL_rsfp && !PL_parser->filtered) {
5008                 /* handle eval qq[#line 1 "foo"\n ...] */
5009                 CopLINE_dec(PL_curcop);
5010                 incline(s);
5011             }
5012             d = s;
5013             while (d < PL_bufend && *d != '\n')
5014                 d++;
5015             if (d < PL_bufend)
5016                 d++;
5017             else if (d > PL_bufend)
5018                 /* Found by Ilya: feed random input to Perl. */
5019                 Perl_croak(aTHX_ "panic: input overflow, %p > %p",
5020                            d, PL_bufend);
5021             s = d;
5022             if (in_comment && d == PL_bufend
5023                 && PL_lex_state == LEX_INTERPNORMAL
5024                 && PL_lex_inwhat == OP_SUBST && PL_lex_repl == PL_linestr
5025                 && SvEVALED(PL_lex_repl) && d[-1] == '}') s--;
5026             else
5027                 incline(s);
5028             if (PL_lex_formbrack && PL_lex_brackets <= PL_lex_formbrack) {
5029                 PL_lex_state = LEX_FORMLINE;
5030                 force_next(FORMRBRACK);
5031                 TOKEN(';');
5032             }
5033         }
5034         else {
5035             while (s < PL_bufend && *s != '\n')
5036                 s++;
5037             if (s < PL_bufend)
5038                 {
5039                     s++;
5040                     if (s < PL_bufend)
5041                         incline(s);
5042                 }
5043             else if (s > PL_bufend)
5044                 /* Found by Ilya: feed random input to Perl. */
5045                 Perl_croak(aTHX_ "panic: input overflow");
5046         }
5047         goto retry;
5048     case '-':
5049         if (s[1] && isALPHA(s[1]) && !isWORDCHAR(s[2])) {
5050             I32 ftst = 0;
5051             char tmp;
5052
5053             s++;
5054             PL_bufptr = s;
5055             tmp = *s++;
5056
5057             while (s < PL_bufend && SPACE_OR_TAB(*s))
5058                 s++;
5059
5060             if (strnEQ(s,"=>",2)) {
5061                 s = force_word(PL_bufptr,WORD,FALSE,FALSE);
5062                 DEBUG_T( { printbuf("### Saw unary minus before =>, forcing word %s\n", s); } );
5063                 OPERATOR('-');          /* unary minus */
5064             }
5065             switch (tmp) {
5066             case 'r': ftst = OP_FTEREAD;        break;
5067             case 'w': ftst = OP_FTEWRITE;       break;
5068             case 'x': ftst = OP_FTEEXEC;        break;
5069             case 'o': ftst = OP_FTEOWNED;       break;
5070             case 'R': ftst = OP_FTRREAD;        break;
5071             case 'W': ftst = OP_FTRWRITE;       break;
5072             case 'X': ftst = OP_FTREXEC;        break;
5073             case 'O': ftst = OP_FTROWNED;       break;
5074             case 'e': ftst = OP_FTIS;           break;
5075             case 'z': ftst = OP_FTZERO;         break;
5076             case 's': ftst = OP_FTSIZE;         break;
5077             case 'f': ftst = OP_FTFILE;         break;
5078             case 'd': ftst = OP_FTDIR;          break;
5079             case 'l': ftst = OP_FTLINK;         break;
5080             case 'p': ftst = OP_FTPIPE;         break;
5081             case 'S': ftst = OP_FTSOCK;         break;
5082             case 'u': ftst = OP_FTSUID;         break;
5083             case 'g': ftst = OP_FTSGID;         break;
5084             case 'k': ftst = OP_FTSVTX;         break;
5085             case 'b': ftst = OP_FTBLK;          break;
5086             case 'c': ftst = OP_FTCHR;          break;
5087             case 't': ftst = OP_FTTTY;          break;
5088             case 'T': ftst = OP_FTTEXT;         break;
5089             case 'B': ftst = OP_FTBINARY;       break;
5090             case 'M': case 'A': case 'C':
5091                 gv_fetchpvs("\024", GV_ADD|GV_NOTQUAL, SVt_PV);
5092                 switch (tmp) {
5093                 case 'M': ftst = OP_FTMTIME;    break;
5094                 case 'A': ftst = OP_FTATIME;    break;
5095                 case 'C': ftst = OP_FTCTIME;    break;
5096                 default:                        break;
5097                 }
5098                 break;
5099             default:
5100                 break;
5101             }
5102             if (ftst) {
5103                 PL_last_uni = PL_oldbufptr;
5104                 PL_last_lop_op = (OPCODE)ftst;
5105                 DEBUG_T( { PerlIO_printf(Perl_debug_log,
5106                         "### Saw file test %c\n", (int)tmp);
5107                 } );
5108                 FTST(ftst);
5109             }
5110             else {
5111                 /* Assume it was a minus followed by a one-letter named
5112                  * subroutine call (or a -bareword), then. */
5113                 DEBUG_T( { PerlIO_printf(Perl_debug_log,
5114                         "### '-%c' looked like a file test but was not\n",
5115                         (int) tmp);
5116                 } );
5117                 s = --PL_bufptr;
5118             }
5119         }
5120         {
5121             const char tmp = *s++;
5122             if (*s == tmp) {
5123                 s++;
5124                 if (PL_expect == XOPERATOR)
5125                     TERM(POSTDEC);
5126                 else
5127                     OPERATOR(PREDEC);
5128             }
5129             else if (*s == '>') {
5130                 s++;
5131                 s = skipspace(s);
5132                 if (FEATURE_POSTDEREF_IS_ENABLED && (
5133                     ((*s == '$' || *s == '&') && s[1] == '*')
5134                   ||(*s == '$' && s[1] == '#' && s[2] == '*')
5135                   ||((*s == '@' || *s == '%') && strchr("*[{", s[1]))
5136                   ||(*s == '*' && (s[1] == '*' || s[1] == '{'))
5137                  ))
5138                 {
5139                     Perl_ck_warner_d(aTHX_
5140                         packWARN(WARN_EXPERIMENTAL__POSTDEREF),
5141                         "Postfix dereference is experimental"
5142                     );
5143                     PL_expect = XPOSTDEREF;
5144                     TOKEN(ARROW);
5145                 }
5146                 if (isIDFIRST_lazy_if(s,UTF)) {
5147                     s = force_word(s,METHOD,FALSE,TRUE);
5148                     TOKEN(ARROW);
5149                 }
5150                 else if (*s == '$')
5151                     OPERATOR(ARROW);
5152                 else
5153                     TERM(ARROW);
5154             }
5155             if (PL_expect == XOPERATOR) {
5156                 if (*s == '=' && !PL_lex_allbrackets &&
5157                         PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN) {
5158                     s--;
5159                     TOKEN(0);
5160                 }
5161                 Aop(OP_SUBTRACT);
5162             }
5163             else {
5164                 if (isSPACE(*s) || !isSPACE(*PL_bufptr))
5165                     check_uni();
5166                 OPERATOR('-');          /* unary minus */
5167             }
5168         }
5169
5170     case '+':
5171         {
5172             const char tmp = *s++;
5173             if (*s == tmp) {
5174                 s++;
5175                 if (PL_expect == XOPERATOR)
5176                     TERM(POSTINC);
5177                 else
5178                     OPERATOR(PREINC);
5179             }
5180             if (PL_expect == XOPERATOR) {
5181                 if (*s == '=' && !PL_lex_allbrackets &&
5182                         PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN) {
5183                     s--;
5184                     TOKEN(0);
5185                 }
5186                 Aop(OP_ADD);
5187             }
5188             else {
5189                 if (isSPACE(*s) || !isSPACE(*PL_bufptr))
5190                     check_uni();
5191                 OPERATOR('+');
5192             }
5193         }
5194
5195     case '*':
5196         if (PL_expect == XPOSTDEREF) POSTDEREF('*');
5197         if (PL_expect != XOPERATOR) {
5198             s = scan_ident(s, PL_tokenbuf, sizeof PL_tokenbuf, TRUE);
5199             PL_expect = XOPERATOR;
5200             force_ident(PL_tokenbuf, '*');
5201             if (!*PL_tokenbuf)
5202                 PREREF('*');
5203             TERM('*');
5204         }
5205         s++;
5206         if (*s == '*') {
5207             s++;
5208             if (*s == '=' && !PL_lex_allbrackets &&
5209                     PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN) {
5210                 s -= 2;
5211                 TOKEN(0);
5212             }
5213             PWop(OP_POW);
5214         }
5215         if (*s == '=' && !PL_lex_allbrackets &&
5216                 PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN) {
5217             s--;
5218             TOKEN(0);
5219         }
5220         PL_parser->saw_infix_sigil = 1;
5221         Mop(OP_MULTIPLY);
5222
5223     case '%':
5224     {
5225         if (PL_expect == XOPERATOR) {
5226             if (s[1] == '=' && !PL_lex_allbrackets &&
5227                     PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN)
5228                 TOKEN(0);
5229             ++s;
5230             PL_parser->saw_infix_sigil = 1;
5231             Mop(OP_MODULO);
5232         }
5233         else if (PL_expect == XPOSTDEREF) POSTDEREF('%');
5234         PL_tokenbuf[0] = '%';
5235         s = scan_ident(s, PL_tokenbuf + 1,
5236                 sizeof PL_tokenbuf - 1, FALSE);
5237         pl_yylval.ival = 0;
5238         if (!PL_tokenbuf[1]) {
5239             PREREF('%');
5240         }
5241         if ((PL_expect != XREF || PL_oldoldbufptr == PL_last_lop) && intuit_more(s)) {
5242             if (*s == '[')
5243                 PL_tokenbuf[0] = '@';
5244         }
5245         PL_expect = XOPERATOR;
5246         force_ident_maybe_lex('%');
5247         TERM('%');
5248     }
5249     case '^':
5250         d = s;
5251         bof = FEATURE_BITWISE_IS_ENABLED;
5252         if (bof && s[1] == '.')
5253             s++;
5254         if (!PL_lex_allbrackets && PL_lex_fakeeof >=
5255                 (s[1] == '=' ? LEX_FAKEEOF_ASSIGN : LEX_FAKEEOF_BITWISE))
5256         {
5257             s = d;
5258             TOKEN(0);
5259         }
5260         s++;
5261         BOop(bof ? d == s-2 ? OP_SBIT_XOR : OP_NBIT_XOR : OP_BIT_XOR);
5262     case '[':
5263         if (PL_lex_brackets > 100)
5264             Renew(PL_lex_brackstack, PL_lex_brackets + 10, char);
5265         PL_lex_brackstack[PL_lex_brackets++] = 0;
5266         PL_lex_allbrackets++;
5267         {
5268             const char tmp = *s++;
5269             OPERATOR(tmp);
5270         }
5271     case '~':
5272         if (s[1] == '~'
5273             && (PL_expect == XOPERATOR || PL_expect == XTERMORDORDOR))
5274         {
5275             if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE)
5276                 TOKEN(0);
5277             s += 2;
5278             Perl_ck_warner_d(aTHX_
5279                 packWARN(WARN_EXPERIMENTAL__SMARTMATCH),
5280                 "Smartmatch is experimental");
5281             Eop(OP_SMARTMATCH);
5282         }
5283         s++;
5284         if ((bof = FEATURE_BITWISE_IS_ENABLED) && *s == '.') {
5285             s++;
5286             BCop(OP_SCOMPLEMENT);
5287         }
5288         BCop(bof ? OP_NCOMPLEMENT : OP_COMPLEMENT);
5289     case ',':
5290         if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_COMMA)
5291             TOKEN(0);
5292         s++;
5293         OPERATOR(',');
5294     case ':':
5295         if (s[1] == ':') {
5296             len = 0;
5297             goto just_a_word_zero_gv;
5298         }
5299         s++;
5300         {
5301         OP *attrs;
5302
5303         switch (PL_expect) {
5304         case XOPERATOR:
5305             if (!PL_in_my || PL_lex_state != LEX_NORMAL)
5306                 break;
5307             PL_bufptr = s;      /* update in case we back off */
5308             if (*s == '=') {
5309                 Perl_croak(aTHX_
5310                            "Use of := for an empty attribute list is not allowed");
5311             }
5312             goto grabattrs;
5313         case XATTRBLOCK:
5314             PL_expect = XBLOCK;
5315             goto grabattrs;
5316         case XATTRTERM:
5317             PL_expect = XTERMBLOCK;
5318          grabattrs:
5319             s = skipspace(s);
5320             attrs = NULL;
5321             while (isIDFIRST_lazy_if(s,UTF)) {
5322                 I32 tmp;
5323                 SV *sv;
5324                 d = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, FALSE, &len);
5325                 if (isLOWER(*s) && (tmp = keyword(PL_tokenbuf, len, 0))) {
5326                     if (tmp < 0) tmp = -tmp;
5327                     switch (tmp) {
5328                     case KEY_or:
5329                     case KEY_and:
5330                     case KEY_for:
5331                     case KEY_foreach:
5332                     case KEY_unless:
5333                     case KEY_if:
5334                     case KEY_while:
5335                     case KEY_until:
5336                         goto got_attrs;
5337                     default:
5338                         break;
5339                     }
5340                 }
5341                 sv = newSVpvn_flags(s, len, UTF ? SVf_UTF8 : 0);
5342                 if (*d == '(') {
5343                     d = scan_str(d,TRUE,TRUE,FALSE,NULL);
5344                     COPLINE_SET_FROM_MULTI_END;
5345                     if (!d) {
5346                         /* MUST advance bufptr here to avoid bogus
5347                            "at end of line" context messages from yyerror().
5348                          */
5349                         PL_bufptr = s + len;
5350                         yyerror("Unterminated attribute parameter in attribute list");
5351                         if (attrs)
5352                             op_free(attrs);
5353                         sv_free(sv);
5354                         return REPORT(0);       /* EOF indicator */
5355                     }
5356                 }
5357                 if (PL_lex_stuff) {
5358                     sv_catsv(sv, PL_lex_stuff);
5359                     attrs = op_append_elem(OP_LIST, attrs,
5360                                         newSVOP(OP_CONST, 0, sv));
5361                     SvREFCNT_dec_NN(PL_lex_stuff);
5362                     PL_lex_stuff = NULL;
5363                 }
5364                 else {
5365                     if (len == 6 && strnEQ(SvPVX(sv), "unique", len)) {
5366                         sv_free(sv);
5367                         if (PL_in_my == KEY_our) {
5368                             deprecate(":unique");
5369                         }
5370                         else
5371                             Perl_croak(aTHX_ "The 'unique' attribute may only be applied to 'our' variables");
5372                     }
5373
5374                     /* NOTE: any CV attrs applied here need to be part of
5375                        the CVf_BUILTIN_ATTRS define in cv.h! */
5376                     else if (!PL_in_my && len == 6 && strnEQ(SvPVX(sv), "lvalue", len)) {
5377                         sv_free(sv);
5378                         CvLVALUE_on(PL_compcv);
5379                     }
5380                     else if (!PL_in_my && len == 6 && strnEQ(SvPVX(sv), "locked", len)) {
5381                         sv_free(sv);
5382                         deprecate(":locked");
5383                     }
5384                     else if (!PL_in_my && len == 6 && strnEQ(SvPVX(sv), "method", len)) {
5385                         sv_free(sv);
5386                         CvMETHOD_on(PL_compcv);
5387                     }
5388                     else if (!PL_in_my && len == 5
5389                           && strnEQ(SvPVX(sv), "const", len))
5390                     {
5391                         sv_free(sv);
5392                         Perl_ck_warner_d(aTHX_
5393                             packWARN(WARN_EXPERIMENTAL__CONST_ATTR),
5394                            ":const is experimental"
5395                         );
5396                         CvANONCONST_on(PL_compcv);
5397                         if (!CvANON(PL_compcv))
5398                             yyerror(":const is not permitted on named "
5399                                     "subroutines");
5400                     }
5401                     /* After we've set the flags, it could be argued that
5402                        we don't need to do the attributes.pm-based setting
5403                        process, and shouldn't bother appending recognized
5404                        flags.  To experiment with that, uncomment the
5405                        following "else".  (Note that's already been
5406                        uncommented.  That keeps the above-applied built-in
5407                        attributes from being intercepted (and possibly
5408                        rejected) by a package's attribute routines, but is
5409                        justified by the performance win for the common case
5410                        of applying only built-in attributes.) */
5411                     else
5412                         attrs = op_append_elem(OP_LIST, attrs,
5413                                             newSVOP(OP_CONST, 0,
5414                                                     sv));
5415                 }
5416                 s = skipspace(d);
5417                 if (*s == ':' && s[1] != ':')
5418                     s = skipspace(s+1);
5419                 else if (s == d)
5420                     break;      /* require real whitespace or :'s */
5421                 /* XXX losing whitespace on sequential attributes here */
5422             }
5423             {
5424                 if (*s != ';' && *s != '}' &&
5425                     !(PL_expect == XOPERATOR
5426                         ? (*s == '=' ||  *s == ')')
5427                         : (*s == '{' ||  *s == '('))) {
5428                     const char q = ((*s == '\'') ? '"' : '\'');
5429                     /* If here for an expression, and parsed no attrs, back
5430                        off. */
5431                     if (PL_expect == XOPERATOR && !attrs) {
5432                         s = PL_bufptr;
5433                         break;
5434                     }
5435                     /* MUST advance bufptr here to avoid bogus "at end of line"
5436                        context messages from yyerror().
5437                     */
5438                     PL_bufptr = s;
5439                     yyerror( (const char *)
5440                              (*s
5441                               ? Perl_form(aTHX_ "Invalid separator character "
5442                                           "%c%c%c in attribute list", q, *s, q)
5443                               : "Unterminated attribute list" ) );
5444                     if (attrs)
5445                         op_free(attrs);
5446                     OPERATOR(':');
5447                 }
5448             }
5449         got_attrs:
5450             if (attrs) {
5451                 NEXTVAL_NEXTTOKE.opval = attrs;
5452                 force_next(THING);
5453             }
5454             TOKEN(COLONATTR);
5455         }
5456         }
5457         if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_CLOSING) {
5458             s--;
5459             TOKEN(0);
5460         }
5461         PL_lex_allbrackets--;
5462         OPERATOR(':');
5463     case '(':
5464         s++;
5465         if (PL_last_lop == PL_oldoldbufptr || PL_last_uni == PL_oldoldbufptr)
5466             PL_oldbufptr = PL_oldoldbufptr;             /* allow print(STDOUT 123) */
5467         else
5468             PL_expect = XTERM;
5469         s = skipspace(s);
5470         PL_lex_allbrackets++;
5471         TOKEN('(');
5472     case ';':
5473         if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_NONEXPR)
5474             TOKEN(0);
5475         CLINE;
5476         s++;
5477         PL_expect = XSTATE;
5478         TOKEN(';');
5479     case ')':
5480         if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_CLOSING)
5481             TOKEN(0);
5482         s++;
5483         PL_lex_allbrackets--;
5484         s = skipspace(s);
5485         if (*s == '{')
5486             PREBLOCK(')');
5487         TERM(')');
5488     case ']':
5489         if (PL_lex_brackets && PL_lex_brackstack[PL_lex_brackets-1] == XFAKEEOF)
5490             TOKEN(0);
5491         s++;
5492         if (PL_lex_brackets <= 0)
5493             /* diag_listed_as: Unmatched right %s bracket */
5494             yyerror("Unmatched right square bracket");
5495         else
5496             --PL_lex_brackets;
5497         PL_lex_allbrackets--;
5498         if (PL_lex_state == LEX_INTERPNORMAL) {
5499             if (PL_lex_brackets == 0) {
5500                 if (*s == '-' && s[1] == '>')
5501                     PL_lex_state = LEX_INTERPENDMAYBE;
5502                 else if (*s != '[' && *s != '{')
5503                     PL_lex_state = LEX_INTERPEND;
5504             }
5505         }
5506         TERM(']');
5507     case '{':
5508         s++;
5509       leftbracket:
5510         if (PL_lex_brackets > 100) {
5511             Renew(PL_lex_brackstack, PL_lex_brackets + 10, char);
5512         }
5513         switch (PL_expect) {
5514         case XTERM:
5515         case XTERMORDORDOR:
5516             PL_lex_brackstack[PL_lex_brackets++] = XOPERATOR;
5517             PL_lex_allbrackets++;
5518             OPERATOR(HASHBRACK);
5519         case XOPERATOR:
5520             while (s < PL_bufend && SPACE_OR_TAB(*s))
5521                 s++;
5522             d = s;
5523             PL_tokenbuf[0] = '\0';
5524             if (d < PL_bufend && *d == '-') {
5525                 PL_tokenbuf[0] = '-';
5526                 d++;
5527                 while (d < PL_bufend && SPACE_OR_TAB(*d))
5528                     d++;
5529             }
5530             if (d < PL_bufend && isIDFIRST_lazy_if(d,UTF)) {
5531                 d = scan_word(d, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1,
5532                               FALSE, &len);
5533                 while (d < PL_bufend && SPACE_OR_TAB(*d))
5534                     d++;
5535                 if (*d == '}') {
5536                     const char minus = (PL_tokenbuf[0] == '-');
5537                     s = force_word(s + minus, WORD, FALSE, TRUE);
5538                     if (minus)
5539                         force_next('-');
5540                 }
5541             }
5542             /* FALLTHROUGH */
5543         case XATTRTERM:
5544         case XTERMBLOCK:
5545             PL_lex_brackstack[PL_lex_brackets++] = XOPERATOR;
5546             PL_lex_allbrackets++;
5547             PL_expect = XSTATE;
5548             break;
5549         case XATTRBLOCK:
5550         case XBLOCK:
5551             PL_lex_brackstack[PL_lex_brackets++] = XSTATE;
5552             PL_lex_allbrackets++;
5553             PL_expect = XSTATE;
5554             break;
5555         case XBLOCKTERM:
5556             PL_lex_brackstack[PL_lex_brackets++] = XTERM;
5557             PL_lex_allbrackets++;
5558             PL_expect = XSTATE;
5559             break;
5560         default: {
5561                 const char *t;
5562                 if (PL_oldoldbufptr == PL_last_lop)
5563                     PL_lex_brackstack[PL_lex_brackets++] = XTERM;
5564                 else
5565                     PL_lex_brackstack[PL_lex_brackets++] = XOPERATOR;
5566                 PL_lex_allbrackets++;
5567                 s = skipspace(s);
5568                 if (*s == '}') {
5569                     if (PL_expect == XREF && PL_lex_state == LEX_INTERPNORMAL) {
5570                         PL_expect = XTERM;
5571                         /* This hack is to get the ${} in the message. */
5572                         PL_bufptr = s+1;
5573                         yyerror("syntax error");
5574                         break;
5575                     }
5576                     OPERATOR(HASHBRACK);
5577                 }
5578                 if (PL_expect == XREF && PL_oldoldbufptr != PL_last_lop) {
5579                     /* ${...} or @{...} etc., but not print {...}
5580                      * Skip the disambiguation and treat this as a block.
5581                      */
5582                     goto block_expectation;
5583                 }
5584                 /* This hack serves to disambiguate a pair of curlies
5585                  * as being a block or an anon hash.  Normally, expectation
5586                  * determines that, but in cases where we're not in a
5587                  * position to expect anything in particular (like inside
5588                  * eval"") we have to resolve the ambiguity.  This code
5589                  * covers the case where the first term in the curlies is a
5590                  * quoted string.  Most other cases need to be explicitly
5591                  * disambiguated by prepending a "+" before the opening
5592                  * curly in order to force resolution as an anon hash.
5593                  *
5594                  * XXX should probably propagate the outer expectation
5595                  * into eval"" to rely less on this hack, but that could
5596                  * potentially break current behavior of eval"".
5597                  * GSAR 97-07-21
5598                  */
5599                 t = s;
5600                 if (*s == '\'' || *s == '"' || *s == '`') {
5601                     /* common case: get past first string, handling escapes */
5602                     for (t++; t < PL_bufend && *t != *s;)
5603                         if (*t++ == '\\')
5604                             t++;
5605                     t++;
5606                 }
5607                 else if (*s == 'q') {
5608                     if (++t < PL_bufend
5609                         && (!isWORDCHAR(*t)
5610                             || ((*t == 'q' || *t == 'x') && ++t < PL_bufend
5611                                 && !isWORDCHAR(*t))))
5612                     {
5613                         /* skip q//-like construct */
5614                         const char *tmps;
5615                         char open, close, term;
5616                         I32 brackets = 1;
5617
5618                         while (t < PL_bufend && isSPACE(*t))
5619                             t++;
5620                         /* check for q => */
5621                         if (t+1 < PL_bufend && t[0] == '=' && t[1] == '>') {
5622                             OPERATOR(HASHBRACK);
5623                         }
5624                         term = *t;
5625                         open = term;
5626                         if (term && (tmps = strchr("([{< )]}> )]}>",term)))
5627                             term = tmps[5];
5628                         close = term;
5629                         if (open == close)
5630                             for (t++; t < PL_bufend; t++) {
5631                                 if (*t == '\\' && t+1 < PL_bufend && open != '\\')
5632                                     t++;
5633                                 else if (*t == open)
5634                                     break;
5635                             }
5636                         else {
5637                             for (t++; t < PL_bufend; t++) {
5638                                 if (*t == '\\' && t+1 < PL_bufend)
5639                                     t++;
5640                                 else if (*t == close && --brackets <= 0)
5641                                     break;
5642                                 else if (*t == open)
5643                                     brackets++;
5644                             }
5645                         }
5646                         t++;
5647                     }
5648                     else
5649                         /* skip plain q word */
5650                         while (t < PL_bufend && isWORDCHAR_lazy_if(t,UTF))
5651                              t += UTF8SKIP(t);
5652                 }
5653                 else if (isWORDCHAR_lazy_if(t,UTF)) {
5654                     t += UTF8SKIP(t);
5655                     while (t < PL_bufend && isWORDCHAR_lazy_if(t,UTF))
5656                          t += UTF8SKIP(t);
5657                 }
5658                 while (t < PL_bufend && isSPACE(*t))
5659                     t++;
5660                 /* if comma follows first term, call it an anon hash */
5661                 /* XXX it could be a comma expression with loop modifiers */
5662                 if (t < PL_bufend && ((*t == ',' && (*s == 'q' || !isLOWER(*s)))
5663                                    || (*t == '=' && t[1] == '>')))
5664                     OPERATOR(HASHBRACK);
5665                 if (PL_expect == XREF)
5666                 {
5667                   block_expectation:
5668                     /* If there is an opening brace or 'sub:', treat it
5669                        as a term to make ${{...}}{k} and &{sub:attr...}
5670                        dwim.  Otherwise, treat it as a statement, so
5671                        map {no strict; ...} works.
5672                      */
5673                     s = skipspace(s);
5674                     if (*s == '{') {
5675                         PL_expect = XTERM;
5676                         break;
5677                     }
5678                     if (strnEQ(s, "sub", 3)) {
5679                         d = s + 3;
5680                         d = skipspace(d);
5681                         if (*d == ':') {
5682                             PL_expect = XTERM;
5683                             break;
5684                         }
5685                     }
5686                     PL_expect = XSTATE;
5687                 }
5688                 else {
5689                     PL_lex_brackstack[PL_lex_brackets-1] = XSTATE;
5690                     PL_expect = XSTATE;
5691                 }
5692             }
5693             break;
5694         }
5695         pl_yylval.ival = CopLINE(PL_curcop);
5696         PL_copline = NOLINE;   /* invalidate current command line number */
5697         TOKEN(formbrack ? '=' : '{');
5698     case '}':
5699         if (PL_lex_brackets && PL_lex_brackstack[PL_lex_brackets-1] == XFAKEEOF)
5700             TOKEN(0);
5701       rightbracket:
5702         s++;
5703         if (PL_lex_brackets <= 0)
5704             /* diag_listed_as: Unmatched right %s bracket */
5705             yyerror("Unmatched right curly bracket");
5706         else
5707             PL_expect = (expectation)PL_lex_brackstack[--PL_lex_brackets];
5708         PL_lex_allbrackets--;
5709         if (PL_lex_state == LEX_INTERPNORMAL) {
5710             if (PL_lex_brackets == 0) {
5711                 if (PL_expect & XFAKEBRACK) {
5712                     PL_expect &= XENUMMASK;
5713                     PL_lex_state = LEX_INTERPEND;
5714                     PL_bufptr = s;
5715                     return yylex();     /* ignore fake brackets */
5716                 }
5717                 if (PL_lex_inwhat == OP_SUBST && PL_lex_repl == PL_linestr
5718                  && SvEVALED(PL_lex_repl))
5719                     PL_lex_state = LEX_INTERPEND;
5720                 else if (*s == '-' && s[1] == '>')
5721                     PL_lex_state = LEX_INTERPENDMAYBE;
5722                 else if (*s != '[' && *s != '{')
5723                     PL_lex_state = LEX_INTERPEND;
5724             }
5725         }
5726         if (PL_expect & XFAKEBRACK) {
5727             PL_expect &= XENUMMASK;
5728             PL_bufptr = s;
5729             return yylex();             /* ignore fake brackets */
5730         }
5731         force_next(formbrack ? '.' : '}');
5732         if (formbrack) LEAVE;
5733         if (formbrack == 2) { /* means . where arguments were expected */
5734             force_next(';');
5735             TOKEN(FORMRBRACK);
5736         }
5737         TOKEN(';');
5738     case '&':
5739         if (PL_expect == XPOSTDEREF) POSTDEREF('&');
5740         s++;
5741         if (*s++ == '&') {
5742             if (!PL_lex_allbrackets && PL_lex_fakeeof >=
5743                     (*s == '=' ? LEX_FAKEEOF_ASSIGN : LEX_FAKEEOF_LOGIC)) {
5744                 s -= 2;
5745                 TOKEN(0);
5746             }
5747             AOPERATOR(ANDAND);
5748         }
5749         s--;
5750         if (PL_expect == XOPERATOR) {
5751             if (PL_bufptr == PL_linestart && ckWARN(WARN_SEMICOLON)
5752                 && isIDFIRST_lazy_if(s,UTF))
5753             {
5754                 CopLINE_dec(PL_curcop);
5755                 Perl_warner(aTHX_ packWARN(WARN_SEMICOLON), "%s", PL_warn_nosemi);
5756                 CopLINE_inc(PL_curcop);
5757             }
5758             d = s;
5759             if ((bof = FEATURE_BITWISE_IS_ENABLED) && *s == '.')
5760                 s++;
5761             if (!PL_lex_allbrackets && PL_lex_fakeeof >=
5762                     (*s == '=' ? LEX_FAKEEOF_ASSIGN : LEX_FAKEEOF_BITWISE)) {
5763                 s = d;
5764                 s--;
5765                 TOKEN(0);
5766             }
5767             if (d == s) {
5768                 PL_parser->saw_infix_sigil = 1;
5769                 BAop(bof ? OP_NBIT_AND : OP_BIT_AND);
5770             }
5771             else
5772                 BAop(OP_SBIT_AND);
5773         }
5774
5775         PL_tokenbuf[0] = '&';
5776         s = scan_ident(s - 1, PL_tokenbuf + 1,
5777                        sizeof PL_tokenbuf - 1, TRUE);
5778         pl_yylval.ival = (OPpENTERSUB_AMPER<<8);
5779         if (PL_tokenbuf[1]) {
5780             force_ident_maybe_lex('&');
5781         }
5782         else
5783             PREREF('&');
5784         TERM('&');
5785
5786     case '|':
5787         s++;
5788         if (*s++ == '|') {
5789             if (!PL_lex_allbrackets && PL_lex_fakeeof >=
5790                     (*s == '=' ? LEX_FAKEEOF_ASSIGN : LEX_FAKEEOF_LOGIC)) {
5791                 s -= 2;
5792                 TOKEN(0);
5793             }
5794             AOPERATOR(OROR);
5795         }
5796         s--;
5797         d = s;
5798         if ((bof = FEATURE_BITWISE_IS_ENABLED) && *s == '.')
5799             s++;
5800         if (!PL_lex_allbrackets && PL_lex_fakeeof >=
5801                 (*s == '=' ? LEX_FAKEEOF_ASSIGN : LEX_FAKEEOF_BITWISE)) {
5802             s = d - 1;
5803             TOKEN(0);
5804         }
5805         BOop(bof ? s == d ? OP_NBIT_OR : OP_SBIT_OR : OP_BIT_OR);
5806     case '=':
5807         s++;
5808         {
5809             const char tmp = *s++;
5810             if (tmp == '=') {
5811                 if (!PL_lex_allbrackets &&
5812                         PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE) {
5813                     s -= 2;
5814                     TOKEN(0);
5815                 }
5816                 Eop(OP_EQ);
5817             }
5818             if (tmp == '>') {
5819                 if (!PL_lex_allbrackets &&
5820                         PL_lex_fakeeof >= LEX_FAKEEOF_COMMA) {
5821                     s -= 2;
5822                     TOKEN(0);
5823                 }
5824                 OPERATOR(',');
5825             }
5826             if (tmp == '~')
5827                 PMop(OP_MATCH);
5828             if (tmp && isSPACE(*s) && ckWARN(WARN_SYNTAX)
5829                 && strchr("+-*/%.^&|<",tmp))
5830                 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
5831                             "Reversed %c= operator",(int)tmp);
5832             s--;
5833             if (PL_expect == XSTATE && isALPHA(tmp) &&
5834                 (s == PL_linestart+1 || s[-2] == '\n') )
5835             {
5836                 if ((PL_in_eval && !PL_rsfp && !PL_parser->filtered)
5837                     || PL_lex_state != LEX_NORMAL) {
5838                     d = PL_bufend;
5839                     while (s < d) {
5840                         if (*s++ == '\n') {
5841                             incline(s);
5842                             if (strnEQ(s,"=cut",4)) {
5843                                 s = strchr(s,'\n');
5844                                 if (s)
5845                                     s++;
5846                                 else
5847                                     s = d;
5848                                 incline(s);
5849                                 goto retry;
5850                             }
5851                         }
5852                     }
5853                     goto retry;
5854                 }
5855                 s = PL_bufend;
5856                 PL_parser->in_pod = 1;
5857                 goto retry;
5858             }
5859         }
5860         if (PL_expect == XBLOCK) {
5861             const char *t = s;
5862 #ifdef PERL_STRICT_CR
5863             while (SPACE_OR_TAB(*t))
5864 #else
5865             while (SPACE_OR_TAB(*t) || *t == '\r')
5866 #endif
5867                 t++;
5868             if (*t == '\n' || *t == '#') {
5869                 formbrack = 1;
5870                 ENTER;
5871                 SAVEI8(PL_parser->form_lex_state);
5872                 SAVEI32(PL_lex_formbrack);
5873                 PL_parser->form_lex_state = PL_lex_state;
5874                 PL_lex_formbrack = PL_lex_brackets + 1;
5875                 goto leftbracket;
5876             }
5877         }
5878         if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN) {
5879             s--;
5880             TOKEN(0);
5881         }
5882         pl_yylval.ival = 0;
5883         OPERATOR(ASSIGNOP);
5884     case '!':
5885         s++;
5886         {
5887             const char tmp = *s++;
5888             if (tmp == '=') {
5889                 /* was this !=~ where !~ was meant?
5890                  * warn on m:!=~\s+([/?]|[msy]\W|tr\W): */
5891
5892                 if (*s == '~' && ckWARN(WARN_SYNTAX)) {
5893                     const char *t = s+1;
5894
5895                     while (t < PL_bufend && isSPACE(*t))
5896                         ++t;
5897
5898                     if (*t == '/' || *t == '?' ||
5899                         ((*t == 'm' || *t == 's' || *t == 'y')
5900                          && !isWORDCHAR(t[1])) ||
5901                         (*t == 't' && t[1] == 'r' && !isWORDCHAR(t[2])))
5902                         Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
5903                                     "!=~ should be !~");
5904                 }
5905                 if (!PL_lex_allbrackets &&
5906                         PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE) {
5907                     s -= 2;
5908                     TOKEN(0);
5909                 }
5910                 Eop(OP_NE);
5911             }
5912             if (tmp == '~')
5913                 PMop(OP_NOT);
5914         }
5915         s--;
5916         OPERATOR('!');
5917     case '<':
5918         if (PL_expect != XOPERATOR) {
5919             if (s[1] != '<' && !strchr(s,'>'))
5920                 check_uni();
5921             if (s[1] == '<' && s[2] != '>')
5922                 s = scan_heredoc(s);
5923             else
5924                 s = scan_inputsymbol(s);
5925             PL_expect = XOPERATOR;
5926             TOKEN(sublex_start());
5927         }
5928         s++;
5929         {
5930             char tmp = *s++;
5931             if (tmp == '<') {
5932                 if (*s == '=' && !PL_lex_allbrackets &&
5933                         PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN) {
5934                     s -= 2;
5935                     TOKEN(0);
5936                 }
5937                 SHop(OP_LEFT_SHIFT);
5938             }
5939             if (tmp == '=') {
5940                 tmp = *s++;
5941                 if (tmp == '>') {
5942                     if (!PL_lex_allbrackets &&
5943                             PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE) {
5944                         s -= 3;
5945                         TOKEN(0);
5946                     }
5947                     Eop(OP_NCMP);
5948                 }
5949                 s--;
5950                 if (!PL_lex_allbrackets &&
5951                         PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE) {
5952                     s -= 2;
5953                     TOKEN(0);
5954                 }
5955                 Rop(OP_LE);
5956             }
5957         }
5958         s--;
5959         if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE) {
5960             s--;
5961             TOKEN(0);
5962         }
5963         Rop(OP_LT);
5964     case '>':
5965         s++;
5966         {
5967             const char tmp = *s++;
5968             if (tmp == '>') {
5969                 if (*s == '=' && !PL_lex_allbrackets &&
5970                         PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN) {
5971                     s -= 2;
5972                     TOKEN(0);
5973                 }
5974                 SHop(OP_RIGHT_SHIFT);
5975             }
5976             else if (tmp == '=') {
5977                 if (!PL_lex_allbrackets &&
5978                         PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE) {
5979                     s -= 2;
5980                     TOKEN(0);
5981                 }
5982                 Rop(OP_GE);
5983             }
5984         }
5985         s--;
5986         if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE) {
5987             s--;
5988             TOKEN(0);
5989         }
5990         Rop(OP_GT);
5991
5992     case '$':
5993         CLINE;
5994
5995         if (PL_expect == XOPERATOR) {
5996             if (PL_lex_formbrack && PL_lex_brackets == PL_lex_formbrack) {
5997                 return deprecate_commaless_var_list();
5998             }
5999         }
6000         else if (PL_expect == XPOSTDEREF) {
6001             if (s[1] == '#') {
6002                 s++;
6003                 POSTDEREF(DOLSHARP);
6004             }
6005             POSTDEREF('$');
6006         }
6007
6008         if (s[1] == '#' && (isIDFIRST_lazy_if(s+2,UTF) || strchr("{$:+-@", s[2]))) {
6009             PL_tokenbuf[0] = '@';
6010             s = scan_ident(s + 1, PL_tokenbuf + 1,
6011                            sizeof PL_tokenbuf - 1, FALSE);
6012             if (PL_expect == XOPERATOR)
6013                 no_op("Array length", s);
6014             if (!PL_tokenbuf[1])
6015                 PREREF(DOLSHARP);
6016             PL_expect = XOPERATOR;
6017             force_ident_maybe_lex('#');
6018             TOKEN(DOLSHARP);
6019         }
6020
6021         PL_tokenbuf[0] = '$';
6022         s = scan_ident(s, PL_tokenbuf + 1,
6023                        sizeof PL_tokenbuf - 1, FALSE);
6024         if (PL_expect == XOPERATOR) {
6025             d = s;
6026             if (PL_bufptr > s) {
6027                 d = PL_bufptr-1;
6028                 PL_bufptr = PL_oldbufptr;
6029             }
6030             no_op("Scalar", d);
6031         }
6032         if (!PL_tokenbuf[1]) {
6033             if (s == PL_bufend)
6034                 yyerror("Final $ should be \\$ or $name");
6035             PREREF('$');
6036         }
6037
6038         d = s;
6039         {
6040             const char tmp = *s;
6041             if (PL_lex_state == LEX_NORMAL || PL_lex_brackets)
6042                 s = skipspace(s);
6043
6044             if ((PL_expect != XREF || PL_oldoldbufptr == PL_last_lop)
6045                 && intuit_more(s)) {
6046                 if (*s == '[') {
6047                     PL_tokenbuf[0] = '@';
6048                     if (ckWARN(WARN_SYNTAX)) {
6049                         char *t = s+1;
6050
6051                         while (isSPACE(*t) || isWORDCHAR_lazy_if(t,UTF) || *t == '$')
6052                             t += UTF ? UTF8SKIP(t) : 1;
6053                         if (*t++ == ',') {
6054                             PL_bufptr = skipspace(PL_bufptr); /* XXX can realloc */
6055                             while (t < PL_bufend && *t != ']')
6056                                 t++;
6057                             Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
6058                                         "Multidimensional syntax %.*s not supported",
6059                                     (int)((t - PL_bufptr) + 1), PL_bufptr);
6060                         }
6061                     }
6062                 }
6063                 else if (*s == '{') {
6064                     char *t;
6065                     PL_tokenbuf[0] = '%';
6066                     if (strEQ(PL_tokenbuf+1, "SIG")  && ckWARN(WARN_SYNTAX)
6067                         && (t = strchr(s, '}')) && (t = strchr(t, '=')))
6068                         {
6069                             char tmpbuf[sizeof PL_tokenbuf];
6070                             do {
6071                                 t++;
6072                             } while (isSPACE(*t));
6073                             if (isIDFIRST_lazy_if(t,UTF)) {
6074                                 STRLEN len;
6075                                 t = scan_word(t, tmpbuf, sizeof tmpbuf, TRUE,
6076                                               &len);
6077                                 while (isSPACE(*t))
6078                                     t++;
6079                                 if (*t == ';'
6080                                        && get_cvn_flags(tmpbuf, len, UTF ? SVf_UTF8 : 0))
6081                                     Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
6082                                         "You need to quote \"%"UTF8f"\"",
6083                                          UTF8fARG(UTF, len, tmpbuf));
6084                             }
6085                         }
6086                 }
6087             }
6088
6089             PL_expect = XOPERATOR;
6090             if (PL_lex_state == LEX_NORMAL && isSPACE((char)tmp)) {
6091                 const bool islop = (PL_last_lop == PL_oldoldbufptr);
6092                 if (!islop || PL_last_lop_op == OP_GREPSTART)
6093                     PL_expect = XOPERATOR;
6094                 else if (strchr("$@\"'`q", *s))
6095                     PL_expect = XTERM;          /* e.g. print $fh "foo" */
6096                 else if (strchr("&*<%", *s) && isIDFIRST_lazy_if(s+1,UTF))
6097                     PL_expect = XTERM;          /* e.g. print $fh &sub */
6098                 else if (isIDFIRST_lazy_if(s,UTF)) {
6099                     char tmpbuf[sizeof PL_tokenbuf];
6100                     int t2;
6101                     scan_word(s, tmpbuf, sizeof tmpbuf, TRUE, &len);
6102                     if ((t2 = keyword(tmpbuf, len, 0))) {
6103                         /* binary operators exclude handle interpretations */
6104                         switch (t2) {
6105                         case -KEY_x:
6106                         case -KEY_eq:
6107                         case -KEY_ne:
6108                         case -KEY_gt:
6109                         case -KEY_lt:
6110                         case -KEY_ge:
6111                         case -KEY_le:
6112                         case -KEY_cmp:
6113                             break;
6114                         default:
6115                             PL_expect = XTERM;  /* e.g. print $fh length() */
6116                             break;
6117                         }
6118                     }
6119                     else {
6120                         PL_expect = XTERM;      /* e.g. print $fh subr() */
6121                     }
6122                 }
6123                 else if (isDIGIT(*s))
6124                     PL_expect = XTERM;          /* e.g. print $fh 3 */
6125                 else if (*s == '.' && isDIGIT(s[1]))
6126                     PL_expect = XTERM;          /* e.g. print $fh .3 */
6127                 else if ((*s == '?' || *s == '-' || *s == '+')
6128                          && !isSPACE(s[1]) && s[1] != '=')
6129                     PL_expect = XTERM;          /* e.g. print $fh -1 */
6130                 else if (*s == '/' && !isSPACE(s[1]) && s[1] != '='
6131                          && s[1] != '/')
6132                     PL_expect = XTERM;          /* e.g. print $fh /.../
6133                                                    XXX except DORDOR operator
6134                                                 */
6135                 else if (*s == '<' && s[1] == '<' && !isSPACE(s[2])
6136                          && s[2] != '=')
6137                     PL_expect = XTERM;          /* print $fh <<"EOF" */
6138             }
6139         }
6140         force_ident_maybe_lex('$');
6141         TOKEN('$');
6142
6143     case '@':
6144         if (PL_expect == XOPERATOR)
6145             no_op("Array", s);
6146         else if (PL_expect == XPOSTDEREF) POSTDEREF('@');
6147         PL_tokenbuf[0] = '@';
6148         s = scan_ident(s, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1, FALSE);
6149         pl_yylval.ival = 0;
6150         if (!PL_tokenbuf[1]) {
6151             PREREF('@');
6152         }
6153         if (PL_lex_state == LEX_NORMAL)
6154             s = skipspace(s);
6155         if ((PL_expect != XREF || PL_oldoldbufptr == PL_last_lop) && intuit_more(s)) {
6156             if (*s == '{')
6157                 PL_tokenbuf[0] = '%';
6158
6159             /* Warn about @ where they meant $. */
6160             if (*s == '[' || *s == '{') {
6161                 if (ckWARN(WARN_SYNTAX)) {
6162                     S_check_scalar_slice(aTHX_ s);
6163                 }
6164             }
6165         }
6166         PL_expect = XOPERATOR;
6167         force_ident_maybe_lex('@');
6168         TERM('@');
6169
6170      case '/':                  /* may be division, defined-or, or pattern */
6171         if ((PL_expect == XOPERATOR || PL_expect == XTERMORDORDOR) && s[1] == '/') {
6172             if (!PL_lex_allbrackets && PL_lex_fakeeof >=
6173                     (s[2] == '=' ? LEX_FAKEEOF_ASSIGN : LEX_FAKEEOF_LOGIC))
6174                 TOKEN(0);
6175             s += 2;
6176             AOPERATOR(DORDOR);
6177         }
6178         else if (PL_expect == XOPERATOR) {
6179             s++;
6180             if (*s == '=' && !PL_lex_allbrackets &&
6181                 PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN) {
6182                 s--;
6183                 TOKEN(0);
6184             }
6185             Mop(OP_DIVIDE);
6186         }
6187         else {
6188             /* Disable warning on "study /blah/" */
6189             if (PL_oldoldbufptr == PL_last_uni
6190              && (*PL_last_uni != 's' || s - PL_last_uni < 5
6191                  || memNE(PL_last_uni, "study", 5)
6192                  || isWORDCHAR_lazy_if(PL_last_uni+5,UTF)
6193              ))
6194                 check_uni();
6195             s = scan_pat(s,OP_MATCH);
6196             TERM(sublex_start());
6197         }
6198
6199      case '?':                  /* conditional */
6200         s++;
6201         if (!PL_lex_allbrackets &&
6202             PL_lex_fakeeof >= LEX_FAKEEOF_IFELSE) {
6203             s--;
6204             TOKEN(0);
6205         }
6206         PL_lex_allbrackets++;
6207         OPERATOR('?');
6208
6209     case '.':
6210         if (PL_lex_formbrack && PL_lex_brackets == PL_lex_formbrack
6211 #ifdef PERL_STRICT_CR
6212             && s[1] == '\n'
6213 #else
6214             && (s[1] == '\n' || (s[1] == '\r' && s[2] == '\n'))
6215 #endif
6216             && (s == PL_linestart || s[-1] == '\n') )
6217         {
6218             PL_expect = XSTATE;
6219             formbrack = 2; /* dot seen where arguments expected */
6220             goto rightbracket;
6221         }
6222         if (PL_expect == XSTATE && s[1] == '.' && s[2] == '.') {
6223             s += 3;
6224             OPERATOR(YADAYADA);
6225         }
6226         if (PL_expect == XOPERATOR || !isDIGIT(s[1])) {
6227             char tmp = *s++;
6228             if (*s == tmp) {
6229                 if (!PL_lex_allbrackets &&
6230                         PL_lex_fakeeof >= LEX_FAKEEOF_RANGE) {
6231                     s--;
6232                     TOKEN(0);
6233                 }
6234                 s++;
6235                 if (*s == tmp) {
6236                     s++;
6237                     pl_yylval.ival = OPf_SPECIAL;
6238                 }
6239                 else
6240                     pl_yylval.ival = 0;
6241                 OPERATOR(DOTDOT);
6242             }
6243             if (*s == '=' && !PL_lex_allbrackets &&
6244                     PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN) {
6245                 s--;
6246                 TOKEN(0);
6247             }
6248             Aop(OP_CONCAT);
6249         }
6250         /* FALLTHROUGH */
6251     case '0': case '1': case '2': case '3': case '4':
6252     case '5': case '6': case '7': case '8': case '9':
6253         s = scan_num(s, &pl_yylval);
6254         DEBUG_T( { printbuf("### Saw number in %s\n", s); } );
6255         if (PL_expect == XOPERATOR)
6256             no_op("Number",s);
6257         TERM(THING);
6258
6259     case '\'':
6260         s = scan_str(s,FALSE,FALSE,FALSE,NULL);
6261         if (!s)
6262             missingterm(NULL);
6263         COPLINE_SET_FROM_MULTI_END;
6264         DEBUG_T( { printbuf("### Saw string before %s\n", s); } );
6265         if (PL_expect == XOPERATOR) {
6266             if (PL_lex_formbrack && PL_lex_brackets == PL_lex_formbrack) {
6267                 return deprecate_commaless_var_list();
6268             }
6269             else
6270                 no_op("String",s);
6271         }
6272         pl_yylval.ival = OP_CONST;
6273         TERM(sublex_start());
6274
6275     case '"':
6276         s = scan_str(s,FALSE,FALSE,FALSE,NULL);
6277         DEBUG_T( {
6278             if (s)
6279                 printbuf("### Saw string before %s\n", s);
6280             else
6281                 PerlIO_printf(Perl_debug_log,
6282                              "### Saw unterminated string\n");
6283         } );
6284         if (PL_expect == XOPERATOR) {
6285             if (PL_lex_formbrack && PL_lex_brackets == PL_lex_formbrack) {
6286                 return deprecate_commaless_var_list();
6287             }
6288             else
6289                 no_op("String",s);
6290         }
6291         if (!s)
6292             missingterm(NULL);
6293         pl_yylval.ival = OP_CONST;
6294         /* FIXME. I think that this can be const if char *d is replaced by
6295            more localised variables.  */
6296         for (d = SvPV(PL_lex_stuff, len); len; len--, d++) {
6297             if (*d == '$' || *d == '@' || *d == '\\' || !UTF8_IS_INVARIANT((U8)*d)) {
6298                 pl_yylval.ival = OP_STRINGIFY;
6299                 break;
6300             }
6301         }
6302         if (pl_yylval.ival == OP_CONST)
6303             COPLINE_SET_FROM_MULTI_END;
6304         TERM(sublex_start());
6305
6306     case '`':
6307         s = scan_str(s,FALSE,FALSE,FALSE,NULL);
6308         DEBUG_T( { printbuf("### Saw backtick string before %s\n", s); } );
6309         if (PL_expect == XOPERATOR)
6310             no_op("Backticks",s);
6311         if (!s)
6312             missingterm(NULL);
6313         pl_yylval.ival = OP_BACKTICK;
6314         TERM(sublex_start());
6315
6316     case '\\':
6317         s++;
6318         if (PL_lex_inwhat == OP_SUBST && PL_lex_repl == PL_linestr
6319          && isDIGIT(*s))
6320             Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),"Can't use \\%c to mean $%c in expression",
6321                            *s, *s);
6322         if (PL_expect == XOPERATOR)
6323             no_op("Backslash",s);
6324         OPERATOR(REFGEN);
6325
6326     case 'v':
6327         if (isDIGIT(s[1]) && PL_expect != XOPERATOR) {
6328             char *start = s + 2;
6329             while (isDIGIT(*start) || *start == '_')
6330                 start++;
6331             if (*start == '.' && isDIGIT(start[1])) {
6332                 s = scan_num(s, &pl_yylval);
6333                 TERM(THING);
6334             }
6335             else if ((*start == ':' && start[1] == ':')
6336                   || (PL_expect == XSTATE && *start == ':'))
6337                 goto keylookup;
6338             else if (PL_expect == XSTATE) {
6339                 d = start;
6340                 while (d < PL_bufend && isSPACE(*d)) d++;
6341                 if (*d == ':') goto keylookup;
6342             }
6343             /* avoid v123abc() or $h{v1}, allow C<print v10;> */
6344             if (!isALPHA(*start) && (PL_expect == XTERM
6345                         || PL_expect == XREF || PL_expect == XSTATE
6346                         || PL_expect == XTERMORDORDOR)) {
6347                 GV *const gv = gv_fetchpvn_flags(s, start - s,
6348                                                     UTF ? SVf_UTF8 : 0, SVt_PVCV);
6349                 if (!gv) {
6350                     s = scan_num(s, &pl_yylval);
6351                     TERM(THING);
6352                 }
6353             }
6354         }
6355         goto keylookup;
6356     case 'x':
6357         if (isDIGIT(s[1]) && PL_expect == XOPERATOR) {
6358             s++;
6359             Mop(OP_REPEAT);
6360         }
6361         goto keylookup;
6362
6363     case '_':
6364     case 'a': case 'A':
6365     case 'b': case 'B':
6366     case 'c': case 'C':
6367     case 'd': case 'D':
6368     case 'e': case 'E':
6369     case 'f': case 'F':
6370     case 'g': case 'G':
6371     case 'h': case 'H':
6372     case 'i': case 'I':
6373     case 'j': case 'J':
6374     case 'k': case 'K':
6375     case 'l': case 'L':
6376     case 'm': case 'M':
6377     case 'n': case 'N':
6378     case 'o': case 'O':
6379     case 'p': case 'P':
6380     case 'q': case 'Q':
6381     case 'r': case 'R':
6382     case 's': case 'S':
6383     case 't': case 'T':
6384     case 'u': case 'U':
6385               case 'V':
6386     case 'w': case 'W':
6387               case 'X':
6388     case 'y': case 'Y':
6389     case 'z': case 'Z':
6390
6391       keylookup: {
6392         bool anydelim;
6393         bool lex;
6394         I32 tmp;
6395         SV *sv;
6396         CV *cv;
6397         PADOFFSET off;
6398         OP *rv2cv_op;
6399
6400         lex = FALSE;
6401         orig_keyword = 0;
6402         off = 0;
6403         sv = NULL;
6404         cv = NULL;
6405         gv = NULL;
6406         gvp = NULL;
6407         rv2cv_op = NULL;
6408
6409         PL_bufptr = s;
6410         s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, FALSE, &len);
6411
6412         /* Some keywords can be followed by any delimiter, including ':' */
6413         anydelim = word_takes_any_delimeter(PL_tokenbuf, len);
6414
6415         /* x::* is just a word, unless x is "CORE" */
6416         if (!anydelim && *s == ':' && s[1] == ':') {
6417             if (strEQ(PL_tokenbuf, "CORE")) goto case_KEY_CORE;
6418             goto just_a_word;
6419         }
6420
6421         d = s;
6422         while (d < PL_bufend && isSPACE(*d))
6423                 d++;    /* no comments skipped here, or s### is misparsed */
6424
6425         /* Is this a word before a => operator? */
6426         if (*d == '=' && d[1] == '>') {
6427           fat_arrow:
6428             CLINE;
6429             pl_yylval.opval
6430                 = (OP*)newSVOP(OP_CONST, 0,
6431                                S_newSV_maybe_utf8(aTHX_ PL_tokenbuf, len));
6432             pl_yylval.opval->op_private = OPpCONST_BARE;
6433             TERM(WORD);
6434         }
6435
6436         /* Check for plugged-in keyword */
6437         {
6438             OP *o;
6439             int result;
6440             char *saved_bufptr = PL_bufptr;
6441             PL_bufptr = s;
6442             result = PL_keyword_plugin(aTHX_ PL_tokenbuf, len, &o);
6443             s = PL_bufptr;
6444             if (result == KEYWORD_PLUGIN_DECLINE) {
6445                 /* not a plugged-in keyword */
6446                 PL_bufptr = saved_bufptr;
6447             } else if (result == KEYWORD_PLUGIN_STMT) {
6448                 pl_yylval.opval = o;
6449                 CLINE;
6450                 if (!PL_nexttoke) PL_expect = XSTATE;
6451                 return REPORT(PLUGSTMT);
6452             } else if (result == KEYWORD_PLUGIN_EXPR) {
6453                 pl_yylval.opval = o;
6454                 CLINE;
6455                 if (!PL_nexttoke) PL_expect = XOPERATOR;
6456                 return REPORT(PLUGEXPR);
6457             } else {
6458                 Perl_croak(aTHX_ "Bad plugin affecting keyword '%s'",
6459                                         PL_tokenbuf);
6460             }
6461         }
6462
6463         /* Check for built-in keyword */
6464         tmp = keyword(PL_tokenbuf, len, 0);
6465
6466         /* Is this a label? */
6467         if (!anydelim && PL_expect == XSTATE
6468               && d < PL_bufend && *d == ':' && *(d + 1) != ':') {
6469             s = d + 1;
6470             pl_yylval.pval = savepvn(PL_tokenbuf, len+1);
6471             pl_yylval.pval[len] = '\0';
6472             pl_yylval.pval[len+1] = UTF ? 1 : 0;
6473             CLINE;
6474             TOKEN(LABEL);
6475         }
6476
6477         /* Check for lexical sub */
6478         if (PL_expect != XOPERATOR) {
6479             char tmpbuf[sizeof PL_tokenbuf + 1];
6480             *tmpbuf = '&';
6481             Copy(PL_tokenbuf, tmpbuf+1, len, char);
6482             off = pad_findmy_pvn(tmpbuf, len+1, 0);
6483             if (off != NOT_IN_PAD) {
6484                 assert(off); /* we assume this is boolean-true below */
6485                 if (PAD_COMPNAME_FLAGS_isOUR(off)) {
6486                     HV *  const stash = PAD_COMPNAME_OURSTASH(off);
6487                     HEK * const stashname = HvNAME_HEK(stash);
6488                     sv = newSVhek(stashname);
6489                     sv_catpvs(sv, "::");
6490                     sv_catpvn_flags(sv, PL_tokenbuf, len,
6491                                     (UTF ? SV_CATUTF8 : SV_CATBYTES));
6492                     gv = gv_fetchsv(sv, GV_NOADD_NOINIT | SvUTF8(sv),
6493                                     SVt_PVCV);
6494                     off = 0;
6495                     if (!gv) {
6496                         sv_free(sv);
6497                         sv = NULL;
6498                         goto just_a_word;
6499                     }
6500                 }
6501                 else {
6502                     rv2cv_op = newOP(OP_PADANY, 0);
6503                     rv2cv_op->op_targ = off;
6504                     cv = find_lexical_cv(off);
6505                 }
6506                 lex = TRUE;
6507                 goto just_a_word;
6508             }
6509             off = 0;
6510         }
6511
6512         if (tmp < 0) {                  /* second-class keyword? */
6513             GV *ogv = NULL;     /* override (winner) */
6514             GV *hgv = NULL;     /* hidden (loser) */
6515             if (PL_expect != XOPERATOR && (*s != ':' || s[1] != ':')) {
6516                 CV *cv;
6517                 if ((gv = gv_fetchpvn_flags(PL_tokenbuf, len,
6518                                             (UTF ? SVf_UTF8 : 0)|GV_NOTQUAL,
6519                                             SVt_PVCV)) &&
6520                     (cv = GvCVu(gv)))
6521                 {
6522                     if (GvIMPORTED_CV(gv))
6523                         ogv = gv;
6524                     else if (! CvMETHOD(cv))
6525                         hgv = gv;
6526                 }
6527                 if (!ogv &&
6528                     (gvp = (GV**)hv_fetch(PL_globalstash, PL_tokenbuf,
6529                                           len, FALSE)) &&
6530                     (gv = *gvp) && (
6531                         isGV_with_GP(gv)
6532                             ? GvCVu(gv) && GvIMPORTED_CV(gv)
6533                             :   SvPCS_IMPORTED(gv)
6534                              && (gv_init(gv, PL_globalstash, PL_tokenbuf,
6535                                          len, 0), 1)
6536                    ))
6537                 {
6538                     ogv = gv;
6539                 }
6540             }
6541             if (ogv) {
6542                 orig_keyword = tmp;
6543                 tmp = 0;                /* overridden by import or by GLOBAL */
6544             }
6545             else if (gv && !gvp
6546                      && -tmp==KEY_lock  /* XXX generalizable kludge */
6547                      && GvCVu(gv))
6548             {
6549                 tmp = 0;                /* any sub overrides "weak" keyword */
6550             }
6551             else {                      /* no override */
6552                 tmp = -tmp;
6553                 if (tmp == KEY_dump) {
6554                     Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
6555                                    "dump() better written as CORE::dump()");
6556                 }
6557                 gv = NULL;
6558                 gvp = 0;
6559                 if (hgv && tmp != KEY_x)        /* never ambiguous */
6560                     Perl_ck_warner(aTHX_ packWARN(WARN_AMBIGUOUS),
6561                                    "Ambiguous call resolved as CORE::%s(), "
6562                                    "qualify as such or use &",
6563                                    GvENAME(hgv));
6564             }
6565         }
6566
6567         if (tmp && tmp != KEY___DATA__ && tmp != KEY___END__
6568          && (!anydelim || *s != '#')) {
6569             /* no override, and not s### either; skipspace is safe here
6570              * check for => on following line */
6571             bool arrow;
6572             STRLEN bufoff = PL_bufptr - SvPVX(PL_linestr);
6573             STRLEN   soff = s         - SvPVX(PL_linestr);
6574             s = skipspace_flags(s, LEX_NO_INCLINE);
6575             arrow = *s == '=' && s[1] == '>';
6576             PL_bufptr = SvPVX(PL_linestr) + bufoff;
6577             s         = SvPVX(PL_linestr) +   soff;
6578             if (arrow)
6579                 goto fat_arrow;
6580         }
6581
6582       reserved_word:
6583         switch (tmp) {
6584
6585         default:                        /* not a keyword */
6586             /* Trade off - by using this evil construction we can pull the
6587                variable gv into the block labelled keylookup. If not, then
6588                we have to give it function scope so that the goto from the
6589                earlier ':' case doesn't bypass the initialisation.  */
6590             if (0) {
6591             just_a_word_zero_gv:
6592                 sv = NULL;
6593                 cv = NULL;
6594                 gv = NULL;
6595                 gvp = NULL;
6596                 rv2cv_op = NULL;
6597                 orig_keyword = 0;
6598                 lex = 0;
6599                 off = 0;
6600             }
6601           just_a_word: {
6602                 int pkgname = 0;
6603                 const char lastchar = (PL_bufptr == PL_oldoldbufptr ? 0 : PL_bufptr[-1]);
6604                 bool safebw;
6605
6606
6607                 /* Get the rest if it looks like a package qualifier */
6608
6609                 if (*s == '\'' || (*s == ':' && s[1] == ':')) {
6610                     STRLEN morelen;
6611                     s = scan_word(s, PL_tokenbuf + len, sizeof PL_tokenbuf - len,
6612                                   TRUE, &morelen);
6613                     if (!morelen)
6614                         Perl_croak(aTHX_ "Bad name after %"UTF8f"%s",
6615                                 UTF8fARG(UTF, len, PL_tokenbuf),
6616                                 *s == '\'' ? "'" : "::");
6617                     len += morelen;
6618                     pkgname = 1;
6619                 }
6620
6621                 if (PL_expect == XOPERATOR) {
6622                     if (PL_bufptr == PL_linestart) {
6623                         CopLINE_dec(PL_curcop);
6624                         Perl_warner(aTHX_ packWARN(WARN_SEMICOLON), "%s", PL_warn_nosemi);
6625                         CopLINE_inc(PL_curcop);
6626                     }
6627                     else
6628                         no_op("Bareword",s);
6629                 }
6630
6631                 /* See if the name is "Foo::",
6632                    in which case Foo is a bareword
6633                    (and a package name). */
6634
6635                 if (len > 2 &&
6636                     PL_tokenbuf[len - 2] == ':' && PL_tokenbuf[len - 1] == ':')
6637                 {
6638                     if (ckWARN(WARN_BAREWORD)
6639                         && ! gv_fetchpvn_flags(PL_tokenbuf, len, UTF ? SVf_UTF8 : 0, SVt_PVHV))
6640                         Perl_warner(aTHX_ packWARN(WARN_BAREWORD),
6641                           "Bareword \"%"UTF8f"\" refers to nonexistent package",
6642                            UTF8fARG(UTF, len, PL_tokenbuf));
6643                     len -= 2;
6644                     PL_tokenbuf[len] = '\0';
6645                     gv = NULL;
6646                     gvp = 0;
6647                     safebw = TRUE;
6648                 }
6649                 else {
6650                     safebw = FALSE;
6651                 }
6652
6653                 /* if we saw a global override before, get the right name */
6654
6655                 if (!sv)
6656                   sv = S_newSV_maybe_utf8(aTHX_ PL_tokenbuf,
6657                                                 len);
6658                 if (gvp) {
6659                     SV * const tmp_sv = sv;
6660                     sv = newSVpvs("CORE::GLOBAL::");
6661                     sv_catsv(sv, tmp_sv);
6662                     SvREFCNT_dec(tmp_sv);
6663                 }
6664
6665
6666                 /* Presume this is going to be a bareword of some sort. */
6667                 CLINE;
6668                 pl_yylval.opval = (OP*)newSVOP(OP_CONST, 0, sv);
6669                 pl_yylval.opval->op_private = OPpCONST_BARE;
6670
6671                 /* And if "Foo::", then that's what it certainly is. */
6672                 if (safebw)
6673                     goto safe_bareword;
6674
6675                 if (!off)
6676                 {
6677                     OP *const_op = newSVOP(OP_CONST, 0, SvREFCNT_inc_NN(sv));
6678                     const_op->op_private = OPpCONST_BARE;
6679                     rv2cv_op =
6680                         newCVREF(OPpMAY_RETURN_CONSTANT<<8, const_op);
6681                     cv = lex
6682                         ? isGV(gv)
6683                             ? GvCV(gv)
6684                             : SvROK(gv) && SvTYPE(SvRV(gv)) == SVt_PVCV
6685                                 ? (CV *)SvRV(gv)
6686                                 : ((CV *)gv)
6687                         : rv2cv_op_cv(rv2cv_op, RV2CVOPCV_RETURN_STUB);
6688                 }
6689
6690                 /* Use this var to track whether intuit_method has been
6691                    called.  intuit_method returns 0 or > 255.  */
6692                 tmp = 1;
6693
6694                 /* See if it's the indirect object for a list operator. */
6695
6696                 if (PL_oldoldbufptr &&
6697                     PL_oldoldbufptr < PL_bufptr &&
6698                     (PL_oldoldbufptr == PL_last_lop
6699                      || PL_oldoldbufptr == PL_last_uni) &&
6700                     /* NO SKIPSPACE BEFORE HERE! */
6701                     (PL_expect == XREF ||
6702                      ((PL_opargs[PL_last_lop_op] >> OASHIFT)& 7) == OA_FILEREF))
6703                 {
6704                     bool immediate_paren = *s == '(';
6705
6706                     /* (Now we can afford to cross potential line boundary.) */
6707                     s = skipspace(s);
6708
6709                     /* Two barewords in a row may indicate method call. */
6710
6711                     if ((isIDFIRST_lazy_if(s,UTF) || *s == '$') &&
6712                         (tmp = intuit_method(s, lex ? NULL : sv, cv))) {
6713                         goto method;
6714                     }
6715
6716                     /* If not a declared subroutine, it's an indirect object. */
6717                     /* (But it's an indir obj regardless for sort.) */
6718                     /* Also, if "_" follows a filetest operator, it's a bareword */
6719
6720                     if (
6721                         ( !immediate_paren && (PL_last_lop_op == OP_SORT ||
6722                          (!cv &&
6723                         (PL_last_lop_op != OP_MAPSTART &&
6724                          PL_last_lop_op != OP_GREPSTART))))
6725                        || (PL_tokenbuf[0] == '_' && PL_tokenbuf[1] == '\0'
6726                             && ((PL_opargs[PL_last_lop_op] & OA_CLASS_MASK) == OA_FILESTATOP))
6727                        )
6728                     {
6729                         PL_expect = (PL_last_lop == PL_oldoldbufptr) ? XTERM : XOPERATOR;
6730                         goto bareword;
6731                     }
6732                 }
6733
6734                 PL_expect = XOPERATOR;
6735                 s = skipspace(s);
6736
6737                 /* Is this a word before a => operator? */
6738                 if (*s == '=' && s[1] == '>' && !pkgname) {
6739                     op_free(rv2cv_op);
6740                     CLINE;
6741                     if (gvp || (lex && !off)) {
6742                         assert (cSVOPx(pl_yylval.opval)->op_sv == sv);
6743                         /* This is our own scalar, created a few lines
6744                            above, so this is safe. */
6745                         SvREADONLY_off(sv);
6746                         sv_setpv(sv, PL_tokenbuf);
6747                         if (UTF && !IN_BYTES
6748                          && is_utf8_string((U8*)PL_tokenbuf, len))
6749                               SvUTF8_on(sv);
6750                         SvREADONLY_on(sv);
6751                     }
6752                     TERM(WORD);
6753                 }
6754
6755                 /* If followed by a paren, it's certainly a subroutine. */
6756                 if (*s == '(') {
6757                     CLINE;
6758                     if (cv) {
6759                         d = s + 1;
6760                         while (SPACE_OR_TAB(*d))
6761                             d++;
6762                         if (*d == ')' && (sv = cv_const_sv_or_av(cv))) {
6763                             s = d + 1;
6764                             goto its_constant;
6765                         }
6766                     }
6767                     NEXTVAL_NEXTTOKE.opval =
6768                         off ? rv2cv_op : pl_yylval.opval;
6769                     if (off)
6770                          op_free(pl_yylval.opval), force_next(PRIVATEREF);
6771                     else op_free(rv2cv_op),        force_next(WORD);
6772                     pl_yylval.ival = 0;
6773                     TOKEN('&');
6774                 }
6775
6776                 /* If followed by var or block, call it a method (unless sub) */
6777
6778                 if ((*s == '$' || *s == '{') && !cv) {
6779                     op_free(rv2cv_op);
6780                     PL_last_lop = PL_oldbufptr;
6781                     PL_last_lop_op = OP_METHOD;
6782                     if (!PL_lex_allbrackets &&
6783                             PL_lex_fakeeof > LEX_FAKEEOF_LOWLOGIC)
6784                         PL_lex_fakeeof = LEX_FAKEEOF_LOWLOGIC;
6785                     PL_expect = XBLOCKTERM;
6786                     PL_bufptr = s;
6787                     return REPORT(METHOD);
6788                 }
6789
6790                 /* If followed by a bareword, see if it looks like indir obj. */
6791
6792                 if (tmp == 1 && !orig_keyword
6793                         && (isIDFIRST_lazy_if(s,UTF) || *s == '$')
6794                         && (tmp = intuit_method(s, lex ? NULL : sv, cv))) {
6795                   method:
6796                     if (lex && !off) {
6797                         assert(cSVOPx(pl_yylval.opval)->op_sv == sv);
6798                         SvREADONLY_off(sv);
6799                         sv_setpvn(sv, PL_tokenbuf, len);
6800                         if (UTF && !IN_BYTES
6801                          && is_utf8_string((U8*)PL_tokenbuf, len))
6802                             SvUTF8_on (sv);
6803                         else SvUTF8_off(sv);
6804                     }
6805                     op_free(rv2cv_op);
6806                     if (tmp == METHOD && !PL_lex_allbrackets &&
6807                             PL_lex_fakeeof > LEX_FAKEEOF_LOWLOGIC)
6808                         PL_lex_fakeeof = LEX_FAKEEOF_LOWLOGIC;
6809                     return REPORT(tmp);
6810                 }
6811
6812                 /* Not a method, so call it a subroutine (if defined) */
6813
6814                 if (cv) {
6815                     /* Check for a constant sub */
6816                     if ((sv = cv_const_sv_or_av(cv))) {
6817                   its_constant:
6818                         op_free(rv2cv_op);
6819                         SvREFCNT_dec(((SVOP*)pl_yylval.opval)->op_sv);
6820                         ((SVOP*)pl_yylval.opval)->op_sv = SvREFCNT_inc_simple(sv);
6821                         if (SvTYPE(sv) == SVt_PVAV)
6822                             pl_yylval.opval = newUNOP(OP_RV2AV, OPf_PARENS,
6823                                                       pl_yylval.opval);
6824                         else {
6825                             pl_yylval.opval->op_private = 0;
6826                             pl_yylval.opval->op_folded = 1;
6827                             pl_yylval.opval->op_flags |= OPf_SPECIAL;
6828                         }
6829                         TOKEN(WORD);
6830                     }
6831
6832                     op_free(pl_yylval.opval);
6833                     pl_yylval.opval =
6834                         off ? (OP *)newCVREF(0, rv2cv_op) : rv2cv_op;
6835                     pl_yylval.opval->op_private |= OPpENTERSUB_NOPAREN;
6836                     PL_last_lop = PL_oldbufptr;
6837                     PL_last_lop_op = OP_ENTERSUB;
6838                     /* Is there a prototype? */
6839                     if (
6840                         SvPOK(cv))
6841                     {
6842                         STRLEN protolen = CvPROTOLEN(cv);
6843                         const char *proto = CvPROTO(cv);
6844                         bool optional;
6845                         proto = S_strip_spaces(aTHX_ proto, &protolen);
6846                         if (!protolen)
6847                             TERM(FUNC0SUB);
6848                         if ((optional = *proto == ';'))
6849                           do
6850                             proto++;
6851                           while (*proto == ';');
6852                         if (
6853                             (
6854                                 (
6855                                     *proto == '$' || *proto == '_'
6856                                  || *proto == '*' || *proto == '+'
6857                                 )
6858                              && proto[1] == '\0'
6859                             )
6860                          || (
6861                              *proto == '\\' && proto[1] && proto[2] == '\0'
6862                             )
6863                         )
6864                             UNIPROTO(UNIOPSUB,optional);
6865                         if (*proto == '\\' && proto[1] == '[') {
6866                             const char *p = proto + 2;
6867                             while(*p && *p != ']')
6868                                 ++p;
6869                             if(*p == ']' && !p[1])
6870                                 UNIPROTO(UNIOPSUB,optional);
6871                         }
6872                         if (*proto == '&' && *s == '{') {
6873                             if (PL_curstash)
6874                                 sv_setpvs(PL_subname, "__ANON__");
6875                             else
6876                                 sv_setpvs(PL_subname, "__ANON__::__ANON__");
6877                             if (!PL_lex_allbrackets &&
6878                                     PL_lex_fakeeof > LEX_FAKEEOF_LOWLOGIC)
6879                                 PL_lex_fakeeof = LEX_FAKEEOF_LOWLOGIC;
6880                             PREBLOCK(LSTOPSUB);
6881                         }
6882                     }
6883                     NEXTVAL_NEXTTOKE.opval = pl_yylval.opval;
6884                     PL_expect = XTERM;
6885                     force_next(off ? PRIVATEREF : WORD);
6886                     if (!PL_lex_allbrackets &&
6887                             PL_lex_fakeeof > LEX_FAKEEOF_LOWLOGIC)
6888                         PL_lex_fakeeof = LEX_FAKEEOF_LOWLOGIC;
6889                     TOKEN(NOAMP);
6890                 }
6891
6892                 /* Call it a bare word */
6893
6894                 if (PL_hints & HINT_STRICT_SUBS)
6895                     pl_yylval.opval->op_private |= OPpCONST_STRICT;
6896                 else {
6897                 bareword:
6898                     /* after "print" and similar functions (corresponding to
6899                      * "F? L" in opcode.pl), whatever wasn't already parsed as
6900                      * a filehandle should be subject to "strict subs".
6901                      * Likewise for the optional indirect-object argument to system
6902                      * or exec, which can't be a bareword */
6903                     if ((PL_last_lop_op == OP_PRINT
6904                             || PL_last_lop_op == OP_PRTF
6905                             || PL_last_lop_op == OP_SAY
6906                             || PL_last_lop_op == OP_SYSTEM
6907                             || PL_last_lop_op == OP_EXEC)
6908                             && (PL_hints & HINT_STRICT_SUBS))
6909                         pl_yylval.opval->op_private |= OPpCONST_STRICT;
6910                     if (lastchar != '-') {
6911                         if (ckWARN(WARN_RESERVED)) {
6912                             d = PL_tokenbuf;
6913                             while (isLOWER(*d))
6914                                 d++;
6915                             if (!*d && !gv_stashpv(PL_tokenbuf, UTF ? SVf_UTF8 : 0))
6916                             {
6917                                 /* PL_warn_reserved is constant */
6918                                 GCC_DIAG_IGNORE(-Wformat-nonliteral);
6919                                 Perl_warner(aTHX_ packWARN(WARN_RESERVED), PL_warn_reserved,
6920                                        PL_tokenbuf);
6921                                 GCC_DIAG_RESTORE;
6922                             }
6923                         }
6924                     }
6925                 }
6926                 op_free(rv2cv_op);
6927
6928             safe_bareword:
6929                 if ((lastchar == '*' || lastchar == '%' || lastchar == '&')
6930                  && saw_infix_sigil) {
6931                     Perl_ck_warner_d(aTHX_ packWARN(WARN_AMBIGUOUS),
6932                                      "Operator or semicolon missing before %c%"UTF8f,
6933                                      lastchar,
6934                                      UTF8fARG(UTF, strlen(PL_tokenbuf),
6935                                               PL_tokenbuf));
6936                     Perl_ck_warner_d(aTHX_ packWARN(WARN_AMBIGUOUS),
6937                                      "Ambiguous use of %c resolved as operator %c",
6938                                      lastchar, lastchar);
6939                 }
6940                 TOKEN(WORD);
6941             }
6942
6943         case KEY___FILE__:
6944             FUN0OP(
6945                 (OP*)newSVOP(OP_CONST, 0, newSVpv(CopFILE(PL_curcop),0))
6946             );
6947
6948         case KEY___LINE__:
6949             FUN0OP(
6950                 (OP*)newSVOP(OP_CONST, 0,
6951                     Perl_newSVpvf(aTHX_ "%"IVdf, (IV)CopLINE(PL_curcop)))
6952             );
6953
6954         case KEY___PACKAGE__:
6955             FUN0OP(
6956                 (OP*)newSVOP(OP_CONST, 0,
6957                                         (PL_curstash
6958                                          ? newSVhek(HvNAME_HEK(PL_curstash))
6959                                          : &PL_sv_undef))
6960             );
6961
6962         case KEY___DATA__:
6963         case KEY___END__: {
6964             GV *gv;
6965             if (PL_rsfp && (!PL_in_eval || PL_tokenbuf[2] == 'D')) {
6966                 HV * const stash = PL_tokenbuf[2] == 'D' && PL_curstash
6967                                         ? PL_curstash
6968                                         : PL_defstash;
6969                 gv = (GV *)*hv_fetchs(stash, "DATA", 1);
6970                 if (!isGV(gv))
6971                     gv_init(gv,stash,"DATA",4,0);
6972                 GvMULTI_on(gv);
6973                 if (!GvIO(gv))
6974                     GvIOp(gv) = newIO();
6975                 IoIFP(GvIOp(gv)) = PL_rsfp;
6976 #if defined(HAS_FCNTL) && defined(F_SETFD)
6977                 {
6978                     const int fd = PerlIO_fileno(PL_rsfp);
6979                     fcntl(fd,F_SETFD,fd >= 3);
6980                 }
6981 #endif
6982                 /* Mark this internal pseudo-handle as clean */
6983                 IoFLAGS(GvIOp(gv)) |= IOf_UNTAINT;
6984                 if ((PerlIO*)PL_rsfp == PerlIO_stdin())
6985                     IoTYPE(GvIOp(gv)) = IoTYPE_STD;
6986                 else
6987                     IoTYPE(GvIOp(gv)) = IoTYPE_RDONLY;
6988 #if defined(WIN32) && !defined(PERL_TEXTMODE_SCRIPTS)
6989                 /* if the script was opened in binmode, we need to revert
6990                  * it to text mode for compatibility; but only iff it has CRs
6991                  * XXX this is a questionable hack at best. */
6992                 if (PL_bufend-PL_bufptr > 2
6993                     && PL_bufend[-1] == '\n' && PL_bufend[-2] == '\r')
6994                 {
6995                     Off_t loc = 0;
6996                     if (IoTYPE(GvIOp(gv)) == IoTYPE_RDONLY) {
6997                         loc = PerlIO_tell(PL_rsfp);
6998                         (void)PerlIO_seek(PL_rsfp, 0L, 0);
6999                     }
7000 #ifdef NETWARE
7001                         if (PerlLIO_setmode(PL_rsfp, O_TEXT) != -1) {
7002 #else
7003                     if (PerlLIO_setmode(PerlIO_fileno(PL_rsfp), O_TEXT) != -1) {
7004 #endif  /* NETWARE */
7005                         if (loc > 0)
7006                             PerlIO_seek(PL_rsfp, loc, 0);
7007                     }
7008                 }
7009 #endif
7010 #ifdef PERLIO_LAYERS
7011                 if (!IN_BYTES) {
7012                     if (UTF)
7013                         PerlIO_apply_layers(aTHX_ PL_rsfp, NULL, ":utf8");
7014                     else if (IN_ENCODING) {
7015                         SV *name;
7016                         dSP;
7017                         ENTER;
7018                         SAVETMPS;
7019                         PUSHMARK(sp);
7020                         XPUSHs(_get_encoding());
7021                         PUTBACK;
7022                         call_method("name", G_SCALAR);
7023                         SPAGAIN;
7024                         name = POPs;
7025                         PUTBACK;
7026                         PerlIO_apply_layers(aTHX_ PL_rsfp, NULL,
7027                                             Perl_form(aTHX_ ":encoding(%"SVf")",
7028                                                       SVfARG(name)));
7029                         FREETMPS;
7030                         LEAVE;
7031                     }
7032                 }
7033 #endif
7034                 PL_rsfp = NULL;
7035             }
7036             goto fake_eof;
7037         }
7038
7039         case KEY___SUB__:
7040             FUN0OP(CvCLONE(PL_compcv)
7041                         ? newOP(OP_RUNCV, 0)
7042                         : newPVOP(OP_RUNCV,0,NULL));
7043
7044         case KEY_AUTOLOAD:
7045         case KEY_DESTROY:
7046         case KEY_BEGIN:
7047         case KEY_UNITCHECK:
7048         case KEY_CHECK:
7049         case KEY_INIT:
7050         case KEY_END:
7051             if (PL_expect == XSTATE) {
7052                 s = PL_bufptr;
7053                 goto really_sub;
7054             }
7055             goto just_a_word;
7056
7057         case_KEY_CORE:
7058             {
7059                 STRLEN olen = len;
7060                 d = s;
7061                 s += 2;
7062                 s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, FALSE, &len);
7063                 if ((*s == ':' && s[1] == ':')
7064                  || (!(tmp = keyword(PL_tokenbuf, len, 1)) && *s == '\''))
7065                 {
7066                     s = d;
7067                     len = olen;
7068                     Copy(PL_bufptr, PL_tokenbuf, olen, char);
7069                     goto just_a_word;
7070                 }
7071                 if (!tmp)
7072                     Perl_croak(aTHX_ "CORE::%"UTF8f" is not a keyword",
7073                                       UTF8fARG(UTF, len, PL_tokenbuf));
7074                 if (tmp < 0)
7075                     tmp = -tmp;
7076                 else if (tmp == KEY_require || tmp == KEY_do
7077                       || tmp == KEY_glob)
7078                     /* that's a way to remember we saw "CORE::" */
7079                     orig_keyword = tmp;
7080                 goto reserved_word;
7081             }
7082
7083         case KEY_abs:
7084             UNI(OP_ABS);
7085
7086         case KEY_alarm:
7087             UNI(OP_ALARM);
7088
7089         case KEY_accept:
7090             LOP(OP_ACCEPT,XTERM);
7091
7092         case KEY_and:
7093             if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_LOWLOGIC)
7094                 return REPORT(0);
7095             OPERATOR(ANDOP);
7096
7097         case KEY_atan2:
7098             LOP(OP_ATAN2,XTERM);
7099
7100         case KEY_bind:
7101             LOP(OP_BIND,XTERM);
7102
7103         case KEY_binmode:
7104             LOP(OP_BINMODE,XTERM);
7105
7106         case KEY_bless:
7107             LOP(OP_BLESS,XTERM);
7108
7109         case KEY_break:
7110             FUN0(OP_BREAK);
7111
7112         case KEY_chop:
7113             UNI(OP_CHOP);
7114
7115         case KEY_continue:
7116                     /* We have to disambiguate the two senses of
7117                       "continue". If the next token is a '{' then
7118                       treat it as the start of a continue block;
7119                       otherwise treat it as a control operator.
7120                      */
7121                     s = skipspace(s);
7122                     if (*s == '{')
7123             PREBLOCK(CONTINUE);
7124                     else
7125                         FUN0(OP_CONTINUE);
7126
7127         case KEY_chdir:
7128             /* may use HOME */
7129             (void)gv_fetchpvs("ENV", GV_ADD|GV_NOTQUAL, SVt_PVHV);
7130             UNI(OP_CHDIR);
7131
7132         case KEY_close:
7133             UNI(OP_CLOSE);
7134
7135         case KEY_closedir:
7136             UNI(OP_CLOSEDIR);
7137
7138         case KEY_cmp:
7139             if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE)
7140                 return REPORT(0);
7141             Eop(OP_SCMP);
7142
7143         case KEY_caller:
7144             UNI(OP_CALLER);
7145
7146         case KEY_crypt:
7147 #ifdef FCRYPT
7148             if (!PL_cryptseen) {
7149                 PL_cryptseen = TRUE;
7150                 init_des();
7151             }
7152 #endif
7153             LOP(OP_CRYPT,XTERM);
7154
7155         case KEY_chmod:
7156             LOP(OP_CHMOD,XTERM);
7157
7158         case KEY_chown:
7159             LOP(OP_CHOWN,XTERM);
7160
7161         case KEY_connect:
7162             LOP(OP_CONNECT,XTERM);
7163
7164         case KEY_chr:
7165             UNI(OP_CHR);
7166
7167         case KEY_cos:
7168             UNI(OP_COS);
7169
7170         case KEY_chroot:
7171             UNI(OP_CHROOT);
7172
7173         case KEY_default:
7174             PREBLOCK(DEFAULT);
7175
7176         case KEY_do:
7177             s = skipspace(s);
7178             if (*s == '{')
7179                 PRETERMBLOCK(DO);
7180             if (*s != '\'') {
7181                 *PL_tokenbuf = '&';
7182                 d = scan_word(s, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1,
7183                               1, &len);
7184                 if (len && (len != 4 || strNE(PL_tokenbuf+1, "CORE"))
7185                  && !keyword(PL_tokenbuf + 1, len, 0)) {
7186                     d = skipspace(d);
7187                     if (*d == '(') {
7188                         force_ident_maybe_lex('&');
7189                         s = d;
7190                     }
7191                 }
7192             }
7193             if (orig_keyword == KEY_do) {
7194                 orig_keyword = 0;
7195                 pl_yylval.ival = 1;
7196             }
7197             else
7198                 pl_yylval.ival = 0;
7199             OPERATOR(DO);
7200
7201         case KEY_die:
7202             PL_hints |= HINT_BLOCK_SCOPE;
7203             LOP(OP_DIE,XTERM);
7204
7205         case KEY_defined:
7206             UNI(OP_DEFINED);
7207
7208         case KEY_delete:
7209             UNI(OP_DELETE);
7210
7211         case KEY_dbmopen:
7212             Perl_populate_isa(aTHX_ STR_WITH_LEN("AnyDBM_File::ISA"),
7213                               STR_WITH_LEN("NDBM_File::"),
7214                               STR_WITH_LEN("DB_File::"),
7215                               STR_WITH_LEN("GDBM_File::"),
7216                               STR_WITH_LEN("SDBM_File::"),
7217                               STR_WITH_LEN("ODBM_File::"),
7218                               NULL);
7219             LOP(OP_DBMOPEN,XTERM);
7220
7221         case KEY_dbmclose:
7222             UNI(OP_DBMCLOSE);
7223
7224         case KEY_dump:
7225             LOOPX(OP_DUMP);
7226
7227         case KEY_else:
7228             PREBLOCK(ELSE);
7229
7230         case KEY_elsif:
7231             pl_yylval.ival = CopLINE(PL_curcop);
7232             OPERATOR(ELSIF);
7233
7234         case KEY_eq:
7235             if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE)
7236                 return REPORT(0);
7237             Eop(OP_SEQ);
7238
7239         case KEY_exists:
7240             UNI(OP_EXISTS);
7241         
7242         case KEY_exit:
7243             UNI(OP_EXIT);
7244
7245         case KEY_eval:
7246             s = skipspace(s);
7247             if (*s == '{') { /* block eval */
7248                 PL_expect = XTERMBLOCK;
7249                 UNIBRACK(OP_ENTERTRY);
7250             }
7251             else { /* string eval */
7252                 PL_expect = XTERM;
7253                 UNIBRACK(OP_ENTEREVAL);
7254             }
7255
7256         case KEY_evalbytes:
7257             PL_expect = XTERM;
7258             UNIBRACK(-OP_ENTEREVAL);
7259
7260         case KEY_eof:
7261             UNI(OP_EOF);
7262
7263         case KEY_exp:
7264             UNI(OP_EXP);
7265
7266         case KEY_each:
7267             UNI(OP_EACH);
7268
7269         case KEY_exec:
7270             LOP(OP_EXEC,XREF);
7271
7272         case KEY_endhostent:
7273             FUN0(OP_EHOSTENT);
7274
7275         case KEY_endnetent:
7276             FUN0(OP_ENETENT);
7277
7278         case KEY_endservent:
7279             FUN0(OP_ESERVENT);
7280
7281         case KEY_endprotoent:
7282             FUN0(OP_EPROTOENT);
7283
7284         case KEY_endpwent:
7285             FUN0(OP_EPWENT);
7286
7287         case KEY_endgrent:
7288             FUN0(OP_EGRENT);
7289
7290         case KEY_for:
7291         case KEY_foreach:
7292             if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_NONEXPR)
7293                 return REPORT(0);
7294             pl_yylval.ival = CopLINE(PL_curcop);
7295             s = skipspace(s);
7296             if (PL_expect == XSTATE && isIDFIRST_lazy_if(s,UTF)) {
7297                 char *p = s;
7298
7299                 if ((PL_bufend - p) >= 3 &&
7300                     strnEQ(p, "my", 2) && isSPACE(*(p + 2)))
7301                     p += 2;
7302                 else if ((PL_bufend - p) >= 4 &&
7303                     strnEQ(p, "our", 3) && isSPACE(*(p + 3)))
7304                     p += 3;
7305                 p = skipspace(p);
7306                 /* skip optional package name, as in "for my abc $x (..)" */
7307                 if (isIDFIRST_lazy_if(p,UTF)) {
7308                     p = scan_word(p, PL_tokenbuf, sizeof PL_tokenbuf, TRUE, &len);
7309                     p = skipspace(p);
7310                 }
7311                 if (*p != '$')
7312                     Perl_croak(aTHX_ "Missing $ on loop variable");
7313             }
7314             OPERATOR(FOR);
7315
7316         case KEY_formline:
7317             LOP(OP_FORMLINE,XTERM);
7318
7319         case KEY_fork:
7320             FUN0(OP_FORK);
7321
7322         case KEY_fc:
7323             UNI(OP_FC);
7324
7325         case KEY_fcntl:
7326             LOP(OP_FCNTL,XTERM);
7327
7328         case KEY_fileno:
7329             UNI(OP_FILENO);
7330
7331         case KEY_flock:
7332             LOP(OP_FLOCK,XTERM);
7333
7334         case KEY_gt:
7335             if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE)
7336                 return REPORT(0);
7337             Rop(OP_SGT);
7338
7339         case KEY_ge:
7340             if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE)
7341                 return REPORT(0);
7342             Rop(OP_SGE);
7343
7344         case KEY_grep:
7345             LOP(OP_GREPSTART, XREF);
7346
7347         case KEY_goto:
7348             LOOPX(OP_GOTO);
7349
7350         case KEY_gmtime:
7351             UNI(OP_GMTIME);
7352
7353         case KEY_getc:
7354             UNIDOR(OP_GETC);
7355
7356         case KEY_getppid:
7357             FUN0(OP_GETPPID);
7358
7359         case KEY_getpgrp:
7360             UNI(OP_GETPGRP);
7361
7362         case KEY_getpriority:
7363             LOP(OP_GETPRIORITY,XTERM);
7364
7365         case KEY_getprotobyname:
7366             UNI(OP_GPBYNAME);
7367
7368         case KEY_getprotobynumber:
7369             LOP(OP_GPBYNUMBER,XTERM);
7370
7371         case KEY_getprotoent:
7372             FUN0(OP_GPROTOENT);
7373
7374         case KEY_getpwent:
7375             FUN0(OP_GPWENT);
7376
7377         case KEY_getpwnam:
7378             UNI(OP_GPWNAM);
7379
7380         case KEY_getpwuid:
7381             UNI(OP_GPWUID);
7382
7383         case KEY_getpeername:
7384             UNI(OP_GETPEERNAME);
7385
7386         case KEY_gethostbyname:
7387             UNI(OP_GHBYNAME);
7388
7389         case KEY_gethostbyaddr:
7390             LOP(OP_GHBYADDR,XTERM);
7391
7392         case KEY_gethostent:
7393             FUN0(OP_GHOSTENT);
7394
7395         case KEY_getnetbyname:
7396             UNI(OP_GNBYNAME);
7397
7398         case KEY_getnetbyaddr:
7399             LOP(OP_GNBYADDR,XTERM);
7400
7401         case KEY_getnetent:
7402             FUN0(OP_GNETENT);
7403
7404         case KEY_getservbyname:
7405             LOP(OP_GSBYNAME,XTERM);
7406
7407         case KEY_getservbyport:
7408             LOP(OP_GSBYPORT,XTERM);
7409
7410         case KEY_getservent:
7411             FUN0(OP_GSERVENT);
7412
7413         case KEY_getsockname:
7414             UNI(OP_GETSOCKNAME);
7415
7416         case KEY_getsockopt:
7417             LOP(OP_GSOCKOPT,XTERM);
7418
7419         case KEY_getgrent:
7420             FUN0(OP_GGRENT);
7421
7422         case KEY_getgrnam:
7423             UNI(OP_GGRNAM);
7424
7425         case KEY_getgrgid:
7426             UNI(OP_GGRGID);
7427
7428         case KEY_getlogin:
7429             FUN0(OP_GETLOGIN);
7430
7431         case KEY_given:
7432             pl_yylval.ival = CopLINE(PL_curcop);
7433             Perl_ck_warner_d(aTHX_
7434                 packWARN(WARN_EXPERIMENTAL__SMARTMATCH),
7435                 "given is experimental");
7436             OPERATOR(GIVEN);
7437
7438         case KEY_glob:
7439             LOP(
7440              orig_keyword==KEY_glob ? -OP_GLOB : OP_GLOB,
7441              XTERM
7442             );
7443
7444         case KEY_hex:
7445             UNI(OP_HEX);
7446
7447         case KEY_if:
7448             if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_NONEXPR)
7449                 return REPORT(0);
7450             pl_yylval.ival = CopLINE(PL_curcop);
7451             OPERATOR(IF);
7452
7453         case KEY_index:
7454             LOP(OP_INDEX,XTERM);
7455
7456         case KEY_int:
7457             UNI(OP_INT);
7458
7459         case KEY_ioctl:
7460             LOP(OP_IOCTL,XTERM);
7461
7462         case KEY_join:
7463             LOP(OP_JOIN,XTERM);
7464
7465         case KEY_keys:
7466             UNI(OP_KEYS);
7467
7468         case KEY_kill:
7469             LOP(OP_KILL,XTERM);
7470
7471         case KEY_last:
7472             LOOPX(OP_LAST);
7473         
7474         case KEY_lc:
7475             UNI(OP_LC);
7476
7477         case KEY_lcfirst:
7478             UNI(OP_LCFIRST);
7479
7480         case KEY_local:
7481             pl_yylval.ival = 0;
7482             OPERATOR(LOCAL);
7483
7484         case KEY_length:
7485             UNI(OP_LENGTH);
7486
7487         case KEY_lt:
7488             if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE)
7489                 return REPORT(0);
7490             Rop(OP_SLT);
7491
7492         case KEY_le:
7493             if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE)
7494                 return REPORT(0);
7495             Rop(OP_SLE);
7496
7497         case KEY_localtime:
7498             UNI(OP_LOCALTIME);
7499
7500         case KEY_log:
7501             UNI(OP_LOG);
7502
7503         case KEY_link:
7504             LOP(OP_LINK,XTERM);
7505
7506         case KEY_listen:
7507             LOP(OP_LISTEN,XTERM);
7508
7509         case KEY_lock:
7510             UNI(OP_LOCK);
7511
7512         case KEY_lstat:
7513             UNI(OP_LSTAT);
7514
7515         case KEY_m:
7516             s = scan_pat(s,OP_MATCH);
7517             TERM(sublex_start());
7518
7519         case KEY_map:
7520             LOP(OP_MAPSTART, XREF);
7521
7522         case KEY_mkdir:
7523             LOP(OP_MKDIR,XTERM);
7524
7525         case KEY_msgctl:
7526             LOP(OP_MSGCTL,XTERM);
7527
7528         case KEY_msgget:
7529             LOP(OP_MSGGET,XTERM);
7530
7531         case KEY_msgrcv:
7532             LOP(OP_MSGRCV,XTERM);
7533
7534         case KEY_msgsnd:
7535             LOP(OP_MSGSND,XTERM);
7536
7537         case KEY_our:
7538         case KEY_my:
7539         case KEY_state:
7540             PL_in_my = (U16)tmp;
7541             s = skipspace(s);
7542             if (isIDFIRST_lazy_if(s,UTF)) {
7543                 s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, TRUE, &len);
7544                 if (len == 3 && strnEQ(PL_tokenbuf, "sub", 3))
7545                 {
7546                     if (!FEATURE_LEXSUBS_IS_ENABLED)
7547                         Perl_croak(aTHX_
7548                                   "Experimental \"%s\" subs not enabled",
7549                                    tmp == KEY_my    ? "my"    :
7550                                    tmp == KEY_state ? "state" : "our");
7551                     Perl_ck_warner_d(aTHX_
7552                         packWARN(WARN_EXPERIMENTAL__LEXICAL_SUBS),
7553                         "The lexical_subs feature is experimental");
7554                     goto really_sub;
7555                 }
7556                 PL_in_my_stash = find_in_my_stash(PL_tokenbuf, len);
7557                 if (!PL_in_my_stash) {
7558                     char tmpbuf[1024];
7559                     int len;
7560                     PL_bufptr = s;
7561                     len = my_snprintf(tmpbuf, sizeof(tmpbuf), "No such class %.1000s", PL_tokenbuf);
7562                     PERL_MY_SNPRINTF_POST_GUARD(len, sizeof(tmpbuf));
7563                     yyerror_pv(tmpbuf, UTF ? SVf_UTF8 : 0);
7564                 }
7565             }
7566             pl_yylval.ival = 1;
7567             OPERATOR(MY);
7568
7569         case KEY_next:
7570             LOOPX(OP_NEXT);
7571
7572         case KEY_ne:
7573             if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE)
7574                 return REPORT(0);
7575             Eop(OP_SNE);
7576
7577         case KEY_no:
7578             s = tokenize_use(0, s);
7579             TOKEN(USE);
7580
7581         case KEY_not:
7582             if (*s == '(' || (s = skipspace(s), *s == '('))
7583                 FUN1(OP_NOT);
7584             else {
7585                 if (!PL_lex_allbrackets &&
7586                         PL_lex_fakeeof > LEX_FAKEEOF_LOWLOGIC)
7587                     PL_lex_fakeeof = LEX_FAKEEOF_LOWLOGIC;
7588                 OPERATOR(NOTOP);
7589             }
7590
7591         case KEY_open:
7592             s = skipspace(s);
7593             if (isIDFIRST_lazy_if(s,UTF)) {
7594           const char *t;
7595           d = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, FALSE,
7596               &len);
7597                 for (t=d; isSPACE(*t);)
7598                     t++;
7599                 if ( *t && strchr("|&*+-=!?:.", *t) && ckWARN_d(WARN_PRECEDENCE)
7600                     /* [perl #16184] */
7601                     && !(t[0] == '=' && t[1] == '>')
7602                     && !(t[0] == ':' && t[1] == ':')
7603                     && !keyword(s, d-s, 0)
7604                 ) {
7605                     Perl_warner(aTHX_ packWARN(WARN_PRECEDENCE),
7606                        "Precedence problem: open %"UTF8f" should be open(%"UTF8f")",
7607                         UTF8fARG(UTF, d-s, s), UTF8fARG(UTF, d-s, s));
7608                 }
7609             }
7610             LOP(OP_OPEN,XTERM);
7611
7612         case KEY_or:
7613             if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_LOWLOGIC)
7614                 return REPORT(0);
7615             pl_yylval.ival = OP_OR;
7616             OPERATOR(OROP);
7617
7618         case KEY_ord:
7619             UNI(OP_ORD);
7620
7621         case KEY_oct:
7622             UNI(OP_OCT);
7623
7624         case KEY_opendir:
7625             LOP(OP_OPEN_DIR,XTERM);
7626
7627         case KEY_print:
7628             checkcomma(s,PL_tokenbuf,"filehandle");
7629             LOP(OP_PRINT,XREF);
7630
7631         case KEY_printf:
7632             checkcomma(s,PL_tokenbuf,"filehandle");
7633             LOP(OP_PRTF,XREF);
7634
7635         case KEY_prototype:
7636             UNI(OP_PROTOTYPE);
7637
7638         case KEY_push:
7639             LOP(OP_PUSH,XTERM);
7640
7641         case KEY_pop:
7642             UNIDOR(OP_POP);
7643
7644         case KEY_pos:
7645             UNIDOR(OP_POS);
7646         
7647         case KEY_pack:
7648             LOP(OP_PACK,XTERM);
7649
7650         case KEY_package:
7651             s = force_word(s,WORD,FALSE,TRUE);
7652             s = skipspace(s);
7653             s = force_strict_version(s);
7654             PREBLOCK(PACKAGE);
7655
7656         case KEY_pipe:
7657             LOP(OP_PIPE_OP,XTERM);
7658
7659         case KEY_q:
7660             s = scan_str(s,FALSE,FALSE,FALSE,NULL);
7661             if (!s)
7662                 missingterm(NULL);
7663             COPLINE_SET_FROM_MULTI_END;
7664             pl_yylval.ival = OP_CONST;
7665             TERM(sublex_start());
7666
7667         case KEY_quotemeta:
7668             UNI(OP_QUOTEMETA);
7669
7670         case KEY_qw: {
7671             OP *words = NULL;
7672             s = scan_str(s,FALSE,FALSE,FALSE,NULL);
7673             if (!s)
7674                 missingterm(NULL);
7675             COPLINE_SET_FROM_MULTI_END;
7676             PL_expect = XOPERATOR;
7677             if (SvCUR(PL_lex_stuff)) {
7678                 int warned_comma = !ckWARN(WARN_QW);
7679                 int warned_comment = warned_comma;
7680                 d = SvPV_force(PL_lex_stuff, len);
7681                 while (len) {
7682                     for (; isSPACE(*d) && len; --len, ++d)
7683                         /**/;
7684                     if (len) {
7685                         SV *sv;
7686                         const char *b = d;
7687                         if (!warned_comma || !warned_comment) {
7688                             for (; !isSPACE(*d) && len; --len, ++d) {
7689                                 if (!warned_comma && *d == ',') {
7690                                     Perl_warner(aTHX_ packWARN(WARN_QW),
7691                                         "Possible attempt to separate words with commas");
7692                                     ++warned_comma;
7693                                 }
7694                                 else if (!warned_comment && *d == '#') {
7695                                     Perl_warner(aTHX_ packWARN(WARN_QW),
7696                                         "Possible attempt to put comments in qw() list");
7697                                     ++warned_comment;
7698                                 }
7699                             }
7700                         }
7701                         else {
7702                             for (; !isSPACE(*d) && len; --len, ++d)
7703                                 /**/;
7704                         }
7705                         sv = newSVpvn_utf8(b, d-b, DO_UTF8(PL_lex_stuff));
7706                         words = op_append_elem(OP_LIST, words,
7707                                             newSVOP(OP_CONST, 0, tokeq(sv)));
7708                     }
7709                 }
7710             }
7711             if (!words)
7712                 words = newNULLLIST();
7713             SvREFCNT_dec_NN(PL_lex_stuff);
7714             PL_lex_stuff = NULL;
7715             PL_expect = XOPERATOR;
7716             pl_yylval.opval = sawparens(words);
7717             TOKEN(QWLIST);
7718         }
7719
7720         case KEY_qq:
7721             s = scan_str(s,FALSE,FALSE,FALSE,NULL);
7722             if (!s)
7723                 missingterm(NULL);
7724             pl_yylval.ival = OP_STRINGIFY;
7725             if (SvIVX(PL_lex_stuff) == '\'')
7726                 SvIV_set(PL_lex_stuff, 0);      /* qq'$foo' should interpolate */
7727             TERM(sublex_start());
7728
7729         case KEY_qr:
7730             s = scan_pat(s,OP_QR);
7731             TERM(sublex_start());
7732
7733         case KEY_qx:
7734             s = scan_str(s,FALSE,FALSE,FALSE,NULL);
7735             if (!s)
7736                 missingterm(NULL);
7737             pl_yylval.ival = OP_BACKTICK;
7738             TERM(sublex_start());
7739
7740         case KEY_return:
7741             OLDLOP(OP_RETURN);
7742
7743         case KEY_require:
7744             s = skipspace(s);
7745             if (isDIGIT(*s)) {
7746                 s = force_version(s, FALSE);
7747             }
7748             else if (*s != 'v' || !isDIGIT(s[1])
7749                     || (s = force_version(s, TRUE), *s == 'v'))
7750             {
7751                 *PL_tokenbuf = '\0';
7752                 s = force_word(s,WORD,TRUE,TRUE);
7753                 if (isIDFIRST_lazy_if(PL_tokenbuf,UTF))
7754                     gv_stashpvn(PL_tokenbuf, strlen(PL_tokenbuf),
7755                                 GV_ADD | (UTF ? SVf_UTF8 : 0));
7756                 else if (*s == '<')
7757                     yyerror("<> at require-statement should be quotes");
7758             }
7759             if (orig_keyword == KEY_require) {
7760                 orig_keyword = 0;
7761                 pl_yylval.ival = 1;
7762             }
7763             else 
7764                 pl_yylval.ival = 0;
7765             PL_expect = PL_nexttoke ? XOPERATOR : XTERM;
7766             PL_bufptr = s;
7767             PL_last_uni = PL_oldbufptr;
7768             PL_last_lop_op = OP_REQUIRE;
7769             s = skipspace(s);
7770             return REPORT( (int)REQUIRE );
7771
7772         case KEY_reset:
7773             UNI(OP_RESET);
7774
7775         case KEY_redo:
7776             LOOPX(OP_REDO);
7777
7778         case KEY_rename:
7779             LOP(OP_RENAME,XTERM);
7780
7781         case KEY_rand:
7782             UNI(OP_RAND);
7783
7784         case KEY_rmdir:
7785             UNI(OP_RMDIR);
7786
7787         case KEY_rindex:
7788             LOP(OP_RINDEX,XTERM);
7789
7790         case KEY_read:
7791             LOP(OP_READ,XTERM);
7792
7793         case KEY_readdir:
7794             UNI(OP_READDIR);
7795
7796         case KEY_readline:
7797             UNIDOR(OP_READLINE);
7798
7799         case KEY_readpipe:
7800             UNIDOR(OP_BACKTICK);
7801
7802         case KEY_rewinddir:
7803             UNI(OP_REWINDDIR);
7804
7805         case KEY_recv:
7806             LOP(OP_RECV,XTERM);
7807
7808         case KEY_reverse:
7809             LOP(OP_REVERSE,XTERM);
7810
7811         case KEY_readlink:
7812             UNIDOR(OP_READLINK);
7813
7814         case KEY_ref:
7815             UNI(OP_REF);
7816
7817         case KEY_s:
7818             s = scan_subst(s);
7819             if (pl_yylval.opval)
7820                 TERM(sublex_start());
7821             else
7822                 TOKEN(1);       /* force error */
7823
7824         case KEY_say:
7825             checkcomma(s,PL_tokenbuf,"filehandle");
7826             LOP(OP_SAY,XREF);
7827
7828         case KEY_chomp:
7829             UNI(OP_CHOMP);
7830         
7831         case KEY_scalar:
7832             UNI(OP_SCALAR);
7833
7834         case KEY_select:
7835             LOP(OP_SELECT,XTERM);
7836
7837         case KEY_seek:
7838             LOP(OP_SEEK,XTERM);
7839
7840         case KEY_semctl:
7841             LOP(OP_SEMCTL,XTERM);
7842
7843         case KEY_semget:
7844             LOP(OP_SEMGET,XTERM);
7845
7846         case KEY_semop:
7847             LOP(OP_SEMOP,XTERM);
7848
7849         case KEY_send:
7850             LOP(OP_SEND,XTERM);
7851
7852         case KEY_setpgrp:
7853             LOP(OP_SETPGRP,XTERM);
7854
7855         case KEY_setpriority:
7856             LOP(OP_SETPRIORITY,XTERM);
7857
7858         case KEY_sethostent:
7859             UNI(OP_SHOSTENT);
7860
7861         case KEY_setnetent:
7862             UNI(OP_SNETENT);
7863
7864         case KEY_setservent:
7865             UNI(OP_SSERVENT);
7866
7867         case KEY_setprotoent:
7868             UNI(OP_SPROTOENT);
7869
7870         case KEY_setpwent:
7871             FUN0(OP_SPWENT);
7872
7873         case KEY_setgrent:
7874             FUN0(OP_SGRENT);
7875
7876         case KEY_seekdir:
7877             LOP(OP_SEEKDIR,XTERM);
7878
7879         case KEY_setsockopt:
7880             LOP(OP_SSOCKOPT,XTERM);
7881
7882         case KEY_shift:
7883             UNIDOR(OP_SHIFT);
7884
7885         case KEY_shmctl:
7886             LOP(OP_SHMCTL,XTERM);
7887
7888         case KEY_shmget:
7889             LOP(OP_SHMGET,XTERM);
7890
7891         case KEY_shmread:
7892             LOP(OP_SHMREAD,XTERM);
7893
7894         case KEY_shmwrite:
7895             LOP(OP_SHMWRITE,XTERM);
7896
7897         case KEY_shutdown:
7898             LOP(OP_SHUTDOWN,XTERM);
7899
7900         case KEY_sin:
7901             UNI(OP_SIN);
7902
7903         case KEY_sleep:
7904             UNI(OP_SLEEP);
7905
7906         case KEY_socket:
7907             LOP(OP_SOCKET,XTERM);
7908
7909         case KEY_socketpair:
7910             LOP(OP_SOCKPAIR,XTERM);
7911
7912         case KEY_sort:
7913             checkcomma(s,PL_tokenbuf,"subroutine name");
7914             s = skipspace(s);
7915             PL_expect = XTERM;
7916             s = force_word(s,WORD,TRUE,TRUE);
7917             LOP(OP_SORT,XREF);
7918
7919         case KEY_split:
7920             LOP(OP_SPLIT,XTERM);
7921
7922         case KEY_sprintf:
7923             LOP(OP_SPRINTF,XTERM);
7924
7925         case KEY_splice:
7926             LOP(OP_SPLICE,XTERM);
7927
7928         case KEY_sqrt:
7929             UNI(OP_SQRT);
7930
7931         case KEY_srand:
7932             UNI(OP_SRAND);
7933
7934         case KEY_stat:
7935             UNI(OP_STAT);
7936
7937         case KEY_study:
7938             UNI(OP_STUDY);
7939
7940         case KEY_substr:
7941             LOP(OP_SUBSTR,XTERM);
7942
7943         case KEY_format:
7944         case KEY_sub:
7945           really_sub:
7946             {
7947                 char * const tmpbuf = PL_tokenbuf + 1;
7948                 expectation attrful;
7949                 bool have_name, have_proto;
7950                 const int key = tmp;
7951                 SV *format_name = NULL;
7952
7953                 d = s;
7954                 s = skipspace(s);
7955
7956                 if (isIDFIRST_lazy_if(s,UTF) || *s == '\'' ||
7957                     (*s == ':' && s[1] == ':'))
7958                 {
7959
7960                     PL_expect = XBLOCK;
7961                     attrful = XATTRBLOCK;
7962                     d = scan_word(s, tmpbuf, sizeof PL_tokenbuf - 1, TRUE,
7963                                   &len);
7964                     if (key == KEY_format)
7965                         format_name = S_newSV_maybe_utf8(aTHX_ s, d - s);
7966                     *PL_tokenbuf = '&';
7967                     if (memchr(tmpbuf, ':', len) || key != KEY_sub
7968                      || pad_findmy_pvn(
7969                             PL_tokenbuf, len + 1, 0
7970                         ) != NOT_IN_PAD)
7971                         sv_setpvn(PL_subname, tmpbuf, len);
7972                     else {
7973                         sv_setsv(PL_subname,PL_curstname);
7974                         sv_catpvs(PL_subname,"::");
7975                         sv_catpvn(PL_subname,tmpbuf,len);
7976                     }
7977                     if (SvUTF8(PL_linestr))
7978                         SvUTF8_on(PL_subname);
7979                     have_name = TRUE;
7980
7981
7982                     s = skipspace(d);
7983                 }
7984                 else {
7985                     if (key == KEY_my || key == KEY_our || key==KEY_state)
7986                     {
7987                         *d = '\0';
7988                         /* diag_listed_as: Missing name in "%s sub" */
7989                         Perl_croak(aTHX_
7990                                   "Missing name in \"%s\"", PL_bufptr);
7991                     }
7992                     PL_expect = XTERMBLOCK;
7993                     attrful = XATTRTERM;
7994                     sv_setpvs(PL_subname,"?");
7995                     have_name = FALSE;
7996                 }
7997
7998                 if (key == KEY_format) {
7999                     if (format_name) {
8000                         NEXTVAL_NEXTTOKE.opval
8001                             = (OP*)newSVOP(OP_CONST,0, format_name);
8002                         NEXTVAL_NEXTTOKE.opval->op_private |= OPpCONST_BARE;
8003                         force_next(WORD);
8004                     }
8005                     PREBLOCK(FORMAT);
8006                 }
8007
8008                 /* Look for a prototype */
8009                 if (*s == '(' && !FEATURE_SIGNATURES_IS_ENABLED) {
8010                     s = scan_str(s,FALSE,FALSE,FALSE,NULL);
8011                     COPLINE_SET_FROM_MULTI_END;
8012                     if (!s)
8013                         Perl_croak(aTHX_ "Prototype not terminated");
8014                     (void)validate_proto(PL_subname, PL_lex_stuff, ckWARN(WARN_ILLEGALPROTO));
8015                     have_proto = TRUE;
8016
8017                     s = skipspace(s);
8018                 }
8019                 else
8020                     have_proto = FALSE;
8021
8022                 if (*s == ':' && s[1] != ':')
8023                     PL_expect = attrful;
8024                 else if ((*s != '{' && *s != '(') && key == KEY_sub) {
8025                     if (!have_name)
8026                         Perl_croak(aTHX_ "Illegal declaration of anonymous subroutine");
8027                     else if (*s != ';' && *s != '}')
8028                         Perl_croak(aTHX_ "Illegal declaration of subroutine %"SVf, SVfARG(PL_subname));
8029                 }
8030
8031                 if (have_proto) {
8032                     NEXTVAL_NEXTTOKE.opval =
8033                         (OP*)newSVOP(OP_CONST, 0, PL_lex_stuff);
8034                     PL_lex_stuff = NULL;
8035                     force_next(THING);
8036                 }
8037                 if (!have_name) {
8038                     if (PL_curstash)
8039                         sv_setpvs(PL_subname, "__ANON__");
8040                     else
8041                         sv_setpvs(PL_subname, "__ANON__::__ANON__");
8042                     TOKEN(ANONSUB);
8043                 }
8044                 force_ident_maybe_lex('&');
8045                 TOKEN(SUB);
8046             }
8047
8048         case KEY_system:
8049             LOP(OP_SYSTEM,XREF);
8050
8051         case KEY_symlink:
8052             LOP(OP_SYMLINK,XTERM);
8053
8054         case KEY_syscall:
8055             LOP(OP_SYSCALL,XTERM);
8056
8057         case KEY_sysopen:
8058             LOP(OP_SYSOPEN,XTERM);
8059
8060         case KEY_sysseek:
8061             LOP(OP_SYSSEEK,XTERM);
8062
8063         case KEY_sysread:
8064             LOP(OP_SYSREAD,XTERM);
8065
8066         case KEY_syswrite:
8067             LOP(OP_SYSWRITE,XTERM);
8068
8069         case KEY_tr:
8070         case KEY_y:
8071             s = scan_trans(s);
8072             TERM(sublex_start());
8073
8074         case KEY_tell:
8075             UNI(OP_TELL);
8076
8077         case KEY_telldir:
8078             UNI(OP_TELLDIR);
8079
8080         case KEY_tie:
8081             LOP(OP_TIE,XTERM);
8082
8083         case KEY_tied:
8084             UNI(OP_TIED);
8085
8086         case KEY_time:
8087             FUN0(OP_TIME);
8088
8089         case KEY_times:
8090             FUN0(OP_TMS);
8091
8092         case KEY_truncate:
8093             LOP(OP_TRUNCATE,XTERM);
8094
8095         case KEY_uc:
8096             UNI(OP_UC);
8097
8098         case KEY_ucfirst:
8099             UNI(OP_UCFIRST);
8100
8101         case KEY_untie:
8102             UNI(OP_UNTIE);
8103
8104         case KEY_until:
8105             if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_NONEXPR)
8106                 return REPORT(0);
8107             pl_yylval.ival = CopLINE(PL_curcop);
8108             OPERATOR(UNTIL);
8109
8110         case KEY_unless:
8111             if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_NONEXPR)
8112                 return REPORT(0);
8113             pl_yylval.ival = CopLINE(PL_curcop);
8114             OPERATOR(UNLESS);
8115
8116         case KEY_unlink:
8117             LOP(OP_UNLINK,XTERM);
8118
8119         case KEY_undef:
8120             UNIDOR(OP_UNDEF);
8121
8122         case KEY_unpack:
8123             LOP(OP_UNPACK,XTERM);
8124
8125         case KEY_utime:
8126             LOP(OP_UTIME,XTERM);
8127
8128         case KEY_umask:
8129             UNIDOR(OP_UMASK);
8130
8131         case KEY_unshift:
8132             LOP(OP_UNSHIFT,XTERM);
8133
8134         case KEY_use:
8135             s = tokenize_use(1, s);
8136             TOKEN(USE);
8137
8138         case KEY_values:
8139             UNI(OP_VALUES);
8140
8141         case KEY_vec:
8142             LOP(OP_VEC,XTERM);
8143
8144         case KEY_when:
8145             if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_NONEXPR)
8146                 return REPORT(0);
8147             pl_yylval.ival = CopLINE(PL_curcop);
8148             Perl_ck_warner_d(aTHX_
8149                 packWARN(WARN_EXPERIMENTAL__SMARTMATCH),
8150                 "when is experimental");
8151             OPERATOR(WHEN);
8152
8153         case KEY_while:
8154             if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_NONEXPR)
8155                 return REPORT(0);
8156             pl_yylval.ival = CopLINE(PL_curcop);
8157             OPERATOR(WHILE);
8158
8159         case KEY_warn:
8160             PL_hints |= HINT_BLOCK_SCOPE;
8161             LOP(OP_WARN,XTERM);
8162
8163         case KEY_wait:
8164             FUN0(OP_WAIT);
8165
8166         case KEY_waitpid:
8167             LOP(OP_WAITPID,XTERM);
8168
8169         case KEY_wantarray:
8170             FUN0(OP_WANTARRAY);
8171
8172         case KEY_write:
8173             /* Make sure $^L is defined. 0x0C is CTRL-L on ASCII platforms, and
8174              * we use the same number on EBCDIC */
8175             gv_fetchpvs("\x0C", GV_ADD|GV_NOTQUAL, SVt_PV);
8176             UNI(OP_ENTERWRITE);
8177
8178         case KEY_x:
8179             if (PL_expect == XOPERATOR) {
8180                 if (*s == '=' && !PL_lex_allbrackets &&
8181                         PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN)
8182                     return REPORT(0);
8183                 Mop(OP_REPEAT);
8184             }
8185             check_uni();
8186             goto just_a_word;
8187
8188         case KEY_xor:
8189             if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_LOWLOGIC)
8190                 return REPORT(0);
8191             pl_yylval.ival = OP_XOR;
8192             OPERATOR(OROP);
8193         }
8194     }}
8195 }
8196
8197 /*
8198   S_pending_ident
8199
8200   Looks up an identifier in the pad or in a package
8201
8202   Returns:
8203     PRIVATEREF if this is a lexical name.
8204     WORD       if this belongs to a package.
8205
8206   Structure:
8207       if we're in a my declaration
8208           croak if they tried to say my($foo::bar)
8209           build the ops for a my() declaration
8210       if it's an access to a my() variable
8211           build ops for access to a my() variable
8212       if in a dq string, and they've said @foo and we can't find @foo
8213           warn
8214       build ops for a bareword
8215 */
8216
8217 static int
8218 S_pending_ident(pTHX)
8219 {
8220     PADOFFSET tmp = 0;
8221     const char pit = (char)pl_yylval.ival;
8222     const STRLEN tokenbuf_len = strlen(PL_tokenbuf);
8223     /* All routes through this function want to know if there is a colon.  */
8224     const char *const has_colon = (const char*) memchr (PL_tokenbuf, ':', tokenbuf_len);
8225
8226     DEBUG_T({ PerlIO_printf(Perl_debug_log,
8227           "### Pending identifier '%s'\n", PL_tokenbuf); });
8228
8229     /* if we're in a my(), we can't allow dynamics here.
8230        $foo'bar has already been turned into $foo::bar, so
8231        just check for colons.
8232
8233        if it's a legal name, the OP is a PADANY.
8234     */
8235     if (PL_in_my) {
8236         if (PL_in_my == KEY_our) {      /* "our" is merely analogous to "my" */
8237             if (has_colon)
8238                 yyerror_pv(Perl_form(aTHX_ "No package name allowed for "
8239                                   "variable %s in \"our\"",
8240                                   PL_tokenbuf), UTF ? SVf_UTF8 : 0);
8241             tmp = allocmy(PL_tokenbuf, tokenbuf_len, UTF ? SVf_UTF8 : 0);
8242         }
8243         else {
8244             if (has_colon) {
8245                 /* "my" variable %s can't be in a package */
8246                 /* PL_no_myglob is constant */
8247                 GCC_DIAG_IGNORE(-Wformat-nonliteral);
8248                 yyerror_pv(Perl_form(aTHX_ PL_no_myglob,
8249                             PL_in_my == KEY_my ? "my" : "state",
8250                             *PL_tokenbuf == '&' ? "subroutin" : "variabl",
8251                             PL_tokenbuf),
8252                             UTF ? SVf_UTF8 : 0);
8253                 GCC_DIAG_RESTORE;
8254             }
8255
8256             pl_yylval.opval = newOP(OP_PADANY, 0);
8257             pl_yylval.opval->op_targ = allocmy(PL_tokenbuf, tokenbuf_len,
8258                                                         UTF ? SVf_UTF8 : 0);
8259             return PRIVATEREF;
8260         }
8261     }
8262
8263     /*
8264        build the ops for accesses to a my() variable.
8265     */
8266
8267     if (!has_colon) {
8268         if (!PL_in_my)
8269             tmp = pad_findmy_pvn(PL_tokenbuf, tokenbuf_len,
8270                                  0);
8271         if (tmp != NOT_IN_PAD) {
8272             /* might be an "our" variable" */
8273             if (PAD_COMPNAME_FLAGS_isOUR(tmp)) {
8274                 /* build ops for a bareword */
8275                 HV *  const stash = PAD_COMPNAME_OURSTASH(tmp);
8276                 HEK * const stashname = HvNAME_HEK(stash);
8277                 SV *  const sym = newSVhek(stashname);
8278                 sv_catpvs(sym, "::");
8279                 sv_catpvn_flags(sym, PL_tokenbuf+1, tokenbuf_len - 1, (UTF ? SV_CATUTF8 : SV_CATBYTES ));
8280                 pl_yylval.opval = (OP*)newSVOP(OP_CONST, 0, sym);
8281                 pl_yylval.opval->op_private = OPpCONST_ENTERED;
8282                 if (pit != '&')
8283                   gv_fetchsv(sym,
8284                     GV_ADDMULTI,
8285                     ((PL_tokenbuf[0] == '$') ? SVt_PV
8286                      : (PL_tokenbuf[0] == '@') ? SVt_PVAV
8287                      : SVt_PVHV));
8288                 return WORD;
8289             }
8290
8291             pl_yylval.opval = newOP(OP_PADANY, 0);
8292             pl_yylval.opval->op_targ = tmp;
8293             return PRIVATEREF;
8294         }
8295     }
8296
8297     /*
8298        Whine if they've said @foo in a doublequoted string,
8299        and @foo isn't a variable we can find in the symbol
8300        table.
8301     */
8302     if (ckWARN(WARN_AMBIGUOUS) &&
8303         pit == '@' && PL_lex_state != LEX_NORMAL && !PL_lex_brackets) {
8304         GV *const gv = gv_fetchpvn_flags(PL_tokenbuf + 1, tokenbuf_len - 1,
8305                                         ( UTF ? SVf_UTF8 : 0 ), SVt_PVAV);
8306         if ((!gv || ((PL_tokenbuf[0] == '@') ? !GvAV(gv) : !GvHV(gv)))
8307                 /* DO NOT warn for @- and @+ */
8308                 && !( PL_tokenbuf[2] == '\0' &&
8309                     ( PL_tokenbuf[1] == '-' || PL_tokenbuf[1] == '+' ))
8310            )
8311         {
8312             /* Downgraded from fatal to warning 20000522 mjd */
8313             Perl_warner(aTHX_ packWARN(WARN_AMBIGUOUS),
8314                         "Possible unintended interpolation of %"UTF8f
8315                         " in string",
8316                         UTF8fARG(UTF, tokenbuf_len, PL_tokenbuf));
8317         }
8318     }
8319
8320     /* build ops for a bareword */
8321     pl_yylval.opval = (OP*)newSVOP(OP_CONST, 0,
8322                                    newSVpvn_flags(PL_tokenbuf + 1,
8323                                                       tokenbuf_len - 1,
8324                                                       UTF ? SVf_UTF8 : 0 ));
8325     pl_yylval.opval->op_private = OPpCONST_ENTERED;
8326     if (pit != '&')
8327         gv_fetchpvn_flags(PL_tokenbuf+1, tokenbuf_len - 1,
8328                      (PL_in_eval ? GV_ADDMULTI : GV_ADD)
8329                      | ( UTF ? SVf_UTF8 : 0 ),
8330                      ((PL_tokenbuf[0] == '$') ? SVt_PV
8331                       : (PL_tokenbuf[0] == '@') ? SVt_PVAV
8332                       : SVt_PVHV));
8333     return WORD;
8334 }
8335
8336 STATIC void
8337 S_checkcomma(pTHX_ const char *s, const char *name, const char *what)
8338 {
8339     PERL_ARGS_ASSERT_CHECKCOMMA;
8340
8341     if (*s == ' ' && s[1] == '(') {     /* XXX gotta be a better way */
8342         if (ckWARN(WARN_SYNTAX)) {
8343             int level = 1;
8344             const char *w;
8345             for (w = s+2; *w && level; w++) {
8346                 if (*w == '(')
8347                     ++level;
8348                 else if (*w == ')')
8349                     --level;
8350             }
8351             while (isSPACE(*w))
8352                 ++w;
8353             /* the list of chars below is for end of statements or
8354              * block / parens, boolean operators (&&, ||, //) and branch
8355              * constructs (or, and, if, until, unless, while, err, for).
8356              * Not a very solid hack... */
8357             if (!*w || !strchr(";&/|})]oaiuwef!=", *w))
8358                 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
8359                             "%s (...) interpreted as function",name);
8360         }
8361     }
8362     while (s < PL_bufend && isSPACE(*s))
8363         s++;
8364     if (*s == '(')
8365         s++;
8366     while (s < PL_bufend && isSPACE(*s))
8367         s++;
8368     if (isIDFIRST_lazy_if(s,UTF)) {
8369         const char * const w = s;
8370         s += UTF ? UTF8SKIP(s) : 1;
8371         while (isWORDCHAR_lazy_if(s,UTF))
8372             s += UTF ? UTF8SKIP(s) : 1;
8373         while (s < PL_bufend && isSPACE(*s))
8374             s++;
8375         if (*s == ',') {
8376             GV* gv;
8377             PADOFFSET off;
8378             if (keyword(w, s - w, 0))
8379                 return;
8380
8381             gv = gv_fetchpvn_flags(w, s - w, ( UTF ? SVf_UTF8 : 0 ), SVt_PVCV);
8382             if (gv && GvCVu(gv))
8383                 return;
8384             if (s - w <= 254) {
8385                 char tmpbuf[256];
8386                 Copy(w, tmpbuf+1, s - w, char);
8387                 *tmpbuf = '&';
8388                 off = pad_findmy_pvn(tmpbuf, s-w+1, 0);
8389                 if (off != NOT_IN_PAD) return;
8390             }
8391             Perl_croak(aTHX_ "No comma allowed after %s", what);
8392         }
8393     }
8394 }
8395
8396 /* S_new_constant(): do any overload::constant lookup.
8397
8398    Either returns sv, or mortalizes/frees sv and returns a new SV*.
8399    Best used as sv=new_constant(..., sv, ...).
8400    If s, pv are NULL, calls subroutine with one argument,
8401    and <type> is used with error messages only.
8402    <type> is assumed to be well formed UTF-8 */
8403
8404 STATIC SV *
8405 S_new_constant(pTHX_ const char *s, STRLEN len, const char *key, STRLEN keylen,
8406                SV *sv, SV *pv, const char *type, STRLEN typelen)
8407 {
8408     dSP;
8409     HV * table = GvHV(PL_hintgv);                /* ^H */
8410     SV *res;
8411     SV *errsv = NULL;
8412     SV **cvp;
8413     SV *cv, *typesv;
8414     const char *why1 = "", *why2 = "", *why3 = "";
8415
8416     PERL_ARGS_ASSERT_NEW_CONSTANT;
8417     /* We assume that this is true: */
8418     if (*key == 'c') { assert (strEQ(key, "charnames")); }
8419     assert(type || s);
8420
8421     /* charnames doesn't work well if there have been errors found */
8422     if (PL_error_count > 0 && *key == 'c')
8423     {
8424         SvREFCNT_dec_NN(sv);
8425         return &PL_sv_undef;
8426     }
8427
8428     sv_2mortal(sv);                     /* Parent created it permanently */
8429     if (!table
8430         || ! (PL_hints & HINT_LOCALIZE_HH)
8431         || ! (cvp = hv_fetch(table, key, keylen, FALSE))
8432         || ! SvOK(*cvp))
8433     {
8434         char *msg;
8435         
8436         /* Here haven't found what we're looking for.  If it is charnames,
8437          * perhaps it needs to be loaded.  Try doing that before giving up */
8438         if (*key == 'c') {
8439             Perl_load_module(aTHX_
8440                             0,
8441                             newSVpvs("_charnames"),
8442                              /* version parameter; no need to specify it, as if
8443                               * we get too early a version, will fail anyway,
8444                               * not being able to find '_charnames' */
8445                             NULL,
8446                             newSVpvs(":full"),
8447                             newSVpvs(":short"),
8448                             NULL);
8449             assert(sp == PL_stack_sp);
8450             table = GvHV(PL_hintgv);
8451             if (table
8452                 && (PL_hints & HINT_LOCALIZE_HH)
8453                 && (cvp = hv_fetch(table, key, keylen, FALSE))
8454                 && SvOK(*cvp))
8455             {
8456                 goto now_ok;
8457             }
8458         }
8459         if (!table || !(PL_hints & HINT_LOCALIZE_HH)) {
8460             msg = Perl_form(aTHX_
8461                                "Constant(%.*s) unknown",
8462                                 (int)(type ? typelen : len),
8463                                 (type ? type: s));
8464         }
8465         else {
8466             why1 = "$^H{";
8467             why2 = key;
8468             why3 = "} is not defined";
8469         report:
8470             if (*key == 'c') {
8471                 msg = Perl_form(aTHX_
8472                             /* The +3 is for '\N{'; -4 for that, plus '}' */
8473                             "Unknown charname '%.*s'", (int)typelen - 4, type + 3
8474                       );
8475             }
8476             else {
8477                 msg = Perl_form(aTHX_ "Constant(%.*s): %s%s%s",
8478                                     (int)(type ? typelen : len),
8479                                     (type ? type: s), why1, why2, why3);
8480             }
8481         }
8482         yyerror_pv(msg, UTF ? SVf_UTF8 : 0);
8483         return SvREFCNT_inc_simple_NN(sv);
8484     }
8485   now_ok:
8486     cv = *cvp;
8487     if (!pv && s)
8488         pv = newSVpvn_flags(s, len, SVs_TEMP);
8489     if (type && pv)
8490         typesv = newSVpvn_flags(type, typelen, SVs_TEMP);
8491     else
8492         typesv = &PL_sv_undef;
8493
8494     PUSHSTACKi(PERLSI_OVERLOAD);
8495     ENTER ;
8496     SAVETMPS;
8497
8498     PUSHMARK(SP) ;
8499     EXTEND(sp, 3);
8500     if (pv)
8501         PUSHs(pv);
8502     PUSHs(sv);
8503     if (pv)
8504         PUSHs(typesv);
8505     PUTBACK;
8506     call_sv(cv, G_SCALAR | ( PL_in_eval ? 0 : G_EVAL));
8507
8508     SPAGAIN ;
8509
8510     /* Check the eval first */
8511     if (!PL_in_eval && ((errsv = ERRSV), SvTRUE_NN(errsv))) {
8512         STRLEN errlen;
8513         const char * errstr;
8514         sv_catpvs(errsv, "Propagated");
8515         errstr = SvPV_const(errsv, errlen);
8516         yyerror_pvn(errstr, errlen, 0); /* Duplicates the message inside eval */
8517         (void)POPs;
8518         res = SvREFCNT_inc_simple_NN(sv);
8519     }
8520     else {
8521         res = POPs;
8522         SvREFCNT_inc_simple_void_NN(res);
8523     }
8524
8525     PUTBACK ;
8526     FREETMPS ;
8527     LEAVE ;
8528     POPSTACK;
8529
8530     if (!SvOK(res)) {
8531         why1 = "Call to &{$^H{";
8532         why2 = key;
8533         why3 = "}} did not return a defined value";
8534         sv = res;
8535         (void)sv_2mortal(sv);
8536         goto report;
8537     }
8538
8539     return res;
8540 }
8541
8542 PERL_STATIC_INLINE void
8543 S_parse_ident(pTHX_ char **s, char **d, char * const e, int allow_package, bool is_utf8) {
8544     PERL_ARGS_ASSERT_PARSE_IDENT;
8545
8546     for (;;) {
8547         if (*d >= e)
8548             Perl_croak(aTHX_ "%s", ident_too_long);
8549         if (is_utf8 && isIDFIRST_utf8((U8*)*s)) {
8550              /* The UTF-8 case must come first, otherwise things
8551              * like c\N{COMBINING TILDE} would start failing, as the
8552              * isWORDCHAR_A case below would gobble the 'c' up.
8553              */
8554
8555             char *t = *s + UTF8SKIP(*s);
8556             while (isIDCONT_utf8((U8*)t))
8557                 t += UTF8SKIP(t);
8558             if (*d + (t - *s) > e)
8559                 Perl_croak(aTHX_ "%s", ident_too_long);
8560             Copy(*s, *d, t - *s, char);
8561             *d += t - *s;
8562             *s = t;
8563         }
8564         else if ( isWORDCHAR_A(**s) ) {
8565             do {
8566                 *(*d)++ = *(*s)++;
8567             } while (isWORDCHAR_A(**s) && *d < e);
8568         }
8569         else if (allow_package && **s == '\'' && isIDFIRST_lazy_if(*s+1,is_utf8)) {
8570             *(*d)++ = ':';
8571             *(*d)++ = ':';
8572             (*s)++;
8573         }
8574         else if (allow_package && **s == ':' && (*s)[1] == ':'
8575            /* Disallow things like Foo::$bar. For the curious, this is
8576             * the code path that triggers the "Bad name after" warning
8577             * when looking for barewords.
8578             */
8579            && (*s)[2] != '$') {
8580             *(*d)++ = *(*s)++;
8581             *(*d)++ = *(*s)++;
8582         }
8583         else
8584             break;
8585     }
8586     return;
8587 }
8588
8589 /* Returns a NUL terminated string, with the length of the string written to
8590    *slp
8591    */
8592 STATIC char *
8593 S_scan_word(pTHX_ char *s, char *dest, STRLEN destlen, int allow_package, STRLEN *slp)
8594 {
8595     char *d = dest;
8596     char * const e = d + destlen - 3;  /* two-character token, ending NUL */
8597     bool is_utf8 = cBOOL(UTF);
8598
8599     PERL_ARGS_ASSERT_SCAN_WORD;
8600
8601     parse_ident(&s, &d, e, allow_package, is_utf8);
8602     *d = '\0';
8603     *slp = d - dest;
8604     return s;
8605 }
8606
8607 STATIC char *
8608 S_scan_ident(pTHX_ char *s, char *dest, STRLEN destlen, I32 ck_uni)
8609 {
8610     I32 herelines = PL_parser->herelines;
8611     SSize_t bracket = -1;
8612     char funny = *s++;
8613     char *d = dest;
8614     char * const e = d + destlen - 3;    /* two-character token, ending NUL */
8615     bool is_utf8 = cBOOL(UTF);
8616     I32 orig_copline = 0, tmp_copline = 0;
8617
8618     PERL_ARGS_ASSERT_SCAN_IDENT;
8619
8620     if (isSPACE(*s) || !*s)
8621         s = skipspace(s);
8622     if (isDIGIT(*s)) {
8623         while (isDIGIT(*s)) {
8624             if (d >= e)
8625                 Perl_croak(aTHX_ "%s", ident_too_long);
8626             *d++ = *s++;
8627         }
8628     }
8629     else {
8630         parse_ident(&s, &d, e, 1, is_utf8);
8631     }
8632     *d = '\0';
8633     d = dest;
8634     if (*d) {
8635         /* Either a digit variable, or parse_ident() found an identifier
8636            (anything valid as a bareword), so job done and return.  */
8637         if (PL_lex_state != LEX_NORMAL)
8638             PL_lex_state = LEX_INTERPENDMAYBE;
8639         return s;
8640     }
8641     if (*s == '$' && s[1] &&
8642       (isIDFIRST_lazy_if(s+1,is_utf8)
8643          || isDIGIT_A((U8)s[1])
8644          || s[1] == '$'
8645          || s[1] == '{'
8646          || strnEQ(s+1,"::",2)) )
8647     {
8648         /* Dereferencing a value in a scalar variable.
8649            The alternatives are different syntaxes for a scalar variable.
8650            Using ' as a leading package separator isn't allowed. :: is.   */
8651         return s;
8652     }
8653     /* Handle the opening { of @{...}, &{...}, *{...}, %{...}, ${...}  */
8654     if (*s == '{') {
8655         bracket = s - SvPVX(PL_linestr);
8656         s++;
8657         orig_copline = CopLINE(PL_curcop);
8658         if (s < PL_bufend && isSPACE(*s)) {
8659             s = skipspace(s);
8660         }
8661     }
8662
8663 /* Is the byte 'd' a legal single character identifier name?  'u' is true
8664  * iff Unicode semantics are to be used.  The legal ones are any of:
8665  *  a) all ASCII characters except:
8666  *          1) space-type ones, like \t and SPACE;
8667             2) NUL;
8668  *          3) '{'
8669  *     The final case currently doesn't get this far in the program, so we
8670  *     don't test for it.  If that were to change, it would be ok to allow it.
8671  *  c) When not under Unicode rules, any upper Latin1 character
8672  *  d) Otherwise, when unicode rules are used, all XIDS characters.
8673  *
8674  *      Because all ASCII characters have the same representation whether
8675  *      encoded in UTF-8 or not, we can use the foo_A macros below and '\0' and
8676  *      '{' without knowing if is UTF-8 or not.
8677  * EBCDIC already uses the rules that ASCII platforms will use after the
8678  * deprecation cycle; see comment below about the deprecation. */
8679 #ifdef EBCDIC
8680 #   define VALID_LEN_ONE_IDENT(s, is_utf8)                                    \
8681     (isGRAPH_A(*(s)) || ((is_utf8)                                            \
8682                          ? isIDFIRST_utf8((U8*) (s))                          \
8683                          : (isGRAPH_L1(*s)                                    \
8684                             && LIKELY((U8) *(s) != LATIN1_TO_NATIVE(0xAD)))))
8685 #else
8686 #   define VALID_LEN_ONE_IDENT(s, is_utf8) (! isSPACE_A(*(s))                 \
8687                                             && LIKELY(*(s) != '\0')           \
8688                                             && (! is_utf8                     \
8689                                                 || isASCII_utf8((U8*) (s))    \
8690                                                 || isIDFIRST_utf8((U8*) (s))))
8691 #endif
8692     if ((s <= PL_bufend - (is_utf8)
8693                           ? UTF8SKIP(s)
8694                           : 1)
8695         && VALID_LEN_ONE_IDENT(s, is_utf8))
8696     {
8697         /* Deprecate all non-graphic characters.  Include SHY as a non-graphic,
8698          * because often it has no graphic representation.  (We can't get to
8699          * here with SHY when 'is_utf8' is true, so no need to include a UTF-8
8700          * test for it.) */
8701         if ((is_utf8)
8702             ? ! isGRAPH_utf8( (U8*) s)
8703             : (! isGRAPH_L1( (U8) *s)
8704                || UNLIKELY((U8) *(s) == LATIN1_TO_NATIVE(0xAD))))
8705         {
8706             /* Split messages for back compat */
8707             if (isCNTRL_A( (U8) *s)) {
8708                 deprecate("literal control characters in variable names");
8709             }
8710             else {
8711                 deprecate("literal non-graphic characters in variable names");
8712             }
8713         }
8714         
8715         if (is_utf8) {
8716             const STRLEN skip = UTF8SKIP(s);
8717             STRLEN i;
8718             d[skip] = '\0';
8719             for ( i = 0; i < skip; i++ )
8720                 d[i] = *s++;
8721         }
8722         else {
8723             *d = *s++;
8724             d[1] = '\0';
8725         }
8726     }
8727     /* Convert $^F, ${^F} and the ^F of ${^FOO} to control characters */
8728     if (*d == '^' && *s && isCONTROLVAR(*s)) {
8729         *d = toCTRL(*s);
8730         s++;
8731     }
8732     /* Warn about ambiguous code after unary operators if {...} notation isn't
8733        used.  There's no difference in ambiguity; it's merely a heuristic
8734        about when not to warn.  */
8735     else if (ck_uni && bracket == -1)
8736         check_uni();
8737     if (bracket != -1) {
8738         /* If we were processing {...} notation then...  */
8739         if (isIDFIRST_lazy_if(d,is_utf8)) {
8740             /* if it starts as a valid identifier, assume that it is one.
8741                (the later check for } being at the expected point will trap
8742                cases where this doesn't pan out.)  */
8743         d += is_utf8 ? UTF8SKIP(d) : 1;
8744         parse_ident(&s, &d, e, 1, is_utf8);
8745             *d = '\0';
8746             tmp_copline = CopLINE(PL_curcop);
8747             if (s < PL_bufend && isSPACE(*s)) {
8748                 s = skipspace(s);
8749             }
8750             if ((*s == '[' || (*s == '{' && strNE(dest, "sub")))) {
8751                 /* ${foo[0]} and ${foo{bar}} notation.  */
8752                 if (ckWARN(WARN_AMBIGUOUS) && keyword(dest, d - dest, 0)) {
8753                     const char * const brack =
8754                         (const char *)
8755                         ((*s == '[') ? "[...]" : "{...}");
8756                     orig_copline = CopLINE(PL_curcop);
8757                     CopLINE_set(PL_curcop, tmp_copline);
8758    /* diag_listed_as: Ambiguous use of %c{%s[...]} resolved to %c%s[...] */
8759                     Perl_warner(aTHX_ packWARN(WARN_AMBIGUOUS),
8760                         "Ambiguous use of %c{%s%s} resolved to %c%s%s",
8761                         funny, dest, brack, funny, dest, brack);
8762                     CopLINE_set(PL_curcop, orig_copline);
8763                 }
8764                 bracket++;
8765                 PL_lex_brackstack[PL_lex_brackets++] = (char)(XOPERATOR | XFAKEBRACK);
8766                 PL_lex_allbrackets++;
8767                 return s;
8768             }
8769         }
8770         /* Handle extended ${^Foo} variables
8771          * 1999-02-27 mjd-perl-patch@plover.com */
8772         else if (! isPRINT(*d) /* isCNTRL(d), plus all non-ASCII */
8773                  && isWORDCHAR(*s))
8774         {
8775             d++;
8776             while (isWORDCHAR(*s) && d < e) {
8777                 *d++ = *s++;
8778             }
8779             if (d >= e)
8780                 Perl_croak(aTHX_ "%s", ident_too_long);
8781             *d = '\0';
8782         }
8783
8784         if ( !tmp_copline )
8785             tmp_copline = CopLINE(PL_curcop);
8786         if (s < PL_bufend && isSPACE(*s)) {
8787             s = skipspace(s);
8788         }
8789             
8790         /* Expect to find a closing } after consuming any trailing whitespace.
8791          */
8792         if (*s == '}') {
8793             s++;
8794             if (PL_lex_state == LEX_INTERPNORMAL && !PL_lex_brackets) {
8795                 PL_lex_state = LEX_INTERPEND;
8796                 PL_expect = XREF;
8797             }
8798             if (PL_lex_state == LEX_NORMAL) {
8799                 if (ckWARN(WARN_AMBIGUOUS) &&
8800                     (keyword(dest, d - dest, 0)
8801                      || get_cvn_flags(dest, d - dest, is_utf8 ? SVf_UTF8 : 0)))
8802                 {
8803                     SV *tmp = newSVpvn_flags( dest, d - dest,
8804                                             SVs_TEMP | (is_utf8 ? SVf_UTF8 : 0) );
8805                     if (funny == '#')
8806                         funny = '@';
8807                     orig_copline = CopLINE(PL_curcop);
8808                     CopLINE_set(PL_curcop, tmp_copline);
8809                     Perl_warner(aTHX_ packWARN(WARN_AMBIGUOUS),
8810                         "Ambiguous use of %c{%"SVf"} resolved to %c%"SVf,
8811                         funny, SVfARG(tmp), funny, SVfARG(tmp));
8812                     CopLINE_set(PL_curcop, orig_copline);
8813                 }
8814             }
8815         }
8816         else {
8817             /* Didn't find the closing } at the point we expected, so restore
8818                state such that the next thing to process is the opening { and */
8819             s = SvPVX(PL_linestr) + bracket; /* let the parser handle it */
8820             CopLINE_set(PL_curcop, orig_copline);
8821             PL_parser->herelines = herelines;
8822             *dest = '\0';
8823         }
8824     }
8825     else if (PL_lex_state == LEX_INTERPNORMAL && !PL_lex_brackets && !intuit_more(s))
8826         PL_lex_state = LEX_INTERPEND;
8827     return s;
8828 }
8829
8830 static bool
8831 S_pmflag(pTHX_ const char* const valid_flags, U32 * pmfl, char** s, char* charset, unsigned int * x_mod_count) {
8832
8833     /* Adds, subtracts to/from 'pmfl' based on the next regex modifier flag
8834      * found in the parse starting at 's', based on the subset that are valid
8835      * in this context input to this routine in 'valid_flags'. Advances s.
8836      * Returns TRUE if the input should be treated as a valid flag, so the next
8837      * char may be as well; otherwise FALSE. 'charset' should point to a NUL
8838      * upon first call on the current regex.  This routine will set it to any
8839      * charset modifier found.  The caller shouldn't change it.  This way,
8840      * another charset modifier encountered in the parse can be detected as an
8841      * error, as we have decided to allow only one */
8842
8843     const char c = **s;
8844     STRLEN charlen = UTF ? UTF8SKIP(*s) : 1;
8845
8846     if ( charlen != 1 || ! strchr(valid_flags, c) ) {
8847         if (isWORDCHAR_lazy_if(*s, UTF)) {
8848             yyerror_pv(Perl_form(aTHX_ "Unknown regexp modifier \"/%.*s\"", (int)charlen, *s),
8849                        UTF ? SVf_UTF8 : 0);
8850             (*s) += charlen;
8851             /* Pretend that it worked, so will continue processing before
8852              * dieing */
8853             return TRUE;
8854         }
8855         return FALSE;
8856     }
8857
8858     switch (c) {
8859
8860         CASE_STD_PMMOD_FLAGS_PARSE_SET(pmfl, *x_mod_count);
8861         case GLOBAL_PAT_MOD:      *pmfl |= PMf_GLOBAL; break;
8862         case CONTINUE_PAT_MOD:    *pmfl |= PMf_CONTINUE; break;
8863         case ONCE_PAT_MOD:        *pmfl |= PMf_KEEP; break;
8864         case KEEPCOPY_PAT_MOD:    *pmfl |= RXf_PMf_KEEPCOPY; break;
8865         case NONDESTRUCT_PAT_MOD: *pmfl |= PMf_NONDESTRUCT; break;
8866         case LOCALE_PAT_MOD:
8867             if (*charset) {
8868                 goto multiple_charsets;
8869             }
8870             set_regex_charset(pmfl, REGEX_LOCALE_CHARSET);
8871             *charset = c;
8872             break;
8873         case UNICODE_PAT_MOD:
8874             if (*charset) {
8875                 goto multiple_charsets;
8876             }
8877             set_regex_charset(pmfl, REGEX_UNICODE_CHARSET);
8878             *charset = c;
8879             break;
8880         case ASCII_RESTRICT_PAT_MOD:
8881             if (! *charset) {
8882                 set_regex_charset(pmfl, REGEX_ASCII_RESTRICTED_CHARSET);
8883             }
8884             else {
8885
8886                 /* Error if previous modifier wasn't an 'a', but if it was, see
8887                  * if, and accept, a second occurrence (only) */
8888                 if (*charset != 'a'
8889                     || get_regex_charset(*pmfl)
8890                         != REGEX_ASCII_RESTRICTED_CHARSET)
8891                 {
8892                         goto multiple_charsets;
8893                 }
8894                 set_regex_charset(pmfl, REGEX_ASCII_MORE_RESTRICTED_CHARSET);
8895             }
8896             *charset = c;
8897             break;
8898         case DEPENDS_PAT_MOD:
8899             if (*charset) {
8900                 goto multiple_charsets;
8901             }
8902             set_regex_charset(pmfl, REGEX_DEPENDS_CHARSET);
8903             *charset = c;
8904             break;
8905     }
8906
8907     (*s)++;
8908     return TRUE;
8909
8910     multiple_charsets:
8911         if (*charset != c) {
8912             yyerror(Perl_form(aTHX_ "Regexp modifiers \"/%c\" and \"/%c\" are mutually exclusive", *charset, c));
8913         }
8914         else if (c == 'a') {
8915   /* diag_listed_as: Regexp modifier "/%c" may appear a maximum of twice */
8916             yyerror("Regexp modifier \"/a\" may appear a maximum of twice");
8917         }
8918         else {
8919             yyerror(Perl_form(aTHX_ "Regexp modifier \"/%c\" may not appear twice", c));
8920         }
8921
8922         /* Pretend that it worked, so will continue processing before dieing */
8923         (*s)++;
8924         return TRUE;
8925 }
8926
8927 STATIC char *
8928 S_scan_pat(pTHX_ char *start, I32 type)
8929 {
8930     PMOP *pm;
8931     char *s;
8932     const char * const valid_flags =
8933         (const char *)((type == OP_QR) ? QR_PAT_MODS : M_PAT_MODS);
8934     char charset = '\0';    /* character set modifier */
8935     unsigned int x_mod_count = 0;
8936
8937     PERL_ARGS_ASSERT_SCAN_PAT;
8938
8939     s = scan_str(start,TRUE,FALSE, (PL_in_eval & EVAL_RE_REPARSING), NULL);
8940     if (!s)
8941         Perl_croak(aTHX_ "Search pattern not terminated");
8942
8943     pm = (PMOP*)newPMOP(type, 0);
8944     if (PL_multi_open == '?') {
8945         /* This is the only point in the code that sets PMf_ONCE:  */
8946         pm->op_pmflags |= PMf_ONCE;
8947
8948         /* Hence it's safe to do this bit of PMOP book-keeping here, which
8949            allows us to restrict the list needed by reset to just the ??
8950            matches.  */
8951         assert(type != OP_TRANS);
8952         if (PL_curstash) {
8953             MAGIC *mg = mg_find((const SV *)PL_curstash, PERL_MAGIC_symtab);
8954             U32 elements;
8955             if (!mg) {
8956                 mg = sv_magicext(MUTABLE_SV(PL_curstash), 0, PERL_MAGIC_symtab, 0, 0,
8957                                  0);
8958             }
8959             elements = mg->mg_len / sizeof(PMOP**);
8960             Renewc(mg->mg_ptr, elements + 1, PMOP*, char);
8961             ((PMOP**)mg->mg_ptr) [elements++] = pm;
8962             mg->mg_len = elements * sizeof(PMOP**);
8963             PmopSTASH_set(pm,PL_curstash);
8964         }
8965     }
8966
8967     /* if qr/...(?{..}).../, then need to parse the pattern within a new
8968      * anon CV. False positives like qr/[(?{]/ are harmless */
8969
8970     if (type == OP_QR) {
8971         STRLEN len;
8972         char *e, *p = SvPV(PL_lex_stuff, len);
8973         e = p + len;
8974         for (; p < e; p++) {
8975             if (p[0] == '(' && p[1] == '?'
8976                 && (p[2] == '{' || (p[2] == '?' && p[3] == '{')))
8977             {
8978                 pm->op_pmflags |= PMf_HAS_CV;
8979                 break;
8980             }
8981         }
8982         pm->op_pmflags |= PMf_IS_QR;
8983     }
8984
8985     while (*s && S_pmflag(aTHX_ valid_flags, &(pm->op_pmflags),
8986                                 &s, &charset, &x_mod_count))
8987     {};
8988     /* issue a warning if /c is specified,but /g is not */
8989     if ((pm->op_pmflags & PMf_CONTINUE) && !(pm->op_pmflags & PMf_GLOBAL))
8990     {
8991         Perl_ck_warner(aTHX_ packWARN(WARN_REGEXP), 
8992                        "Use of /c modifier is meaningless without /g" );
8993     }
8994
8995     STD_PMMOD_FLAGS_PARSE_X_WARN(x_mod_count);
8996
8997     PL_lex_op = (OP*)pm;
8998     pl_yylval.ival = OP_MATCH;
8999     return s;
9000 }
9001
9002 STATIC char *
9003 S_scan_subst(pTHX_ char *start)
9004 {
9005     char *s;
9006     PMOP *pm;
9007     I32 first_start;
9008     line_t first_line;
9009     I32 es = 0;
9010     char charset = '\0';    /* character set modifier */
9011     unsigned int x_mod_count = 0;
9012     char *t;
9013
9014     PERL_ARGS_ASSERT_SCAN_SUBST;
9015
9016     pl_yylval.ival = OP_NULL;
9017
9018     s = scan_str(start, TRUE, FALSE, FALSE, &t);
9019
9020     if (!s)
9021         Perl_croak(aTHX_ "Substitution pattern not terminated");
9022
9023     s = t;
9024
9025     first_start = PL_multi_start;
9026     first_line = CopLINE(PL_curcop);
9027     s = scan_str(s,FALSE,FALSE,FALSE,NULL);
9028     if (!s) {
9029         SvREFCNT_dec_NN(PL_lex_stuff);
9030         PL_lex_stuff = NULL;
9031         Perl_croak(aTHX_ "Substitution replacement not terminated");
9032     }
9033     PL_multi_start = first_start;       /* so whole substitution is taken together */
9034
9035     pm = (PMOP*)newPMOP(OP_SUBST, 0);
9036
9037
9038     while (*s) {
9039         if (*s == EXEC_PAT_MOD) {
9040             s++;
9041             es++;
9042         }
9043         else if (! S_pmflag(aTHX_ S_PAT_MODS, &(pm->op_pmflags),
9044                                   &s, &charset, &x_mod_count))
9045         {
9046             break;
9047         }
9048     }
9049
9050     STD_PMMOD_FLAGS_PARSE_X_WARN(x_mod_count);
9051
9052     if ((pm->op_pmflags & PMf_CONTINUE)) {
9053         Perl_ck_warner(aTHX_ packWARN(WARN_REGEXP), "Use of /c modifier is meaningless in s///" );
9054     }
9055
9056     if (es) {
9057         SV * const repl = newSVpvs("");
9058
9059         PL_multi_end = 0;
9060         pm->op_pmflags |= PMf_EVAL;
9061         while (es-- > 0) {
9062             if (es)
9063                 sv_catpvs(repl, "eval ");
9064             else
9065                 sv_catpvs(repl, "do ");
9066         }
9067         sv_catpvs(repl, "{");
9068         sv_catsv(repl, PL_sublex_info.repl);
9069         sv_catpvs(repl, "}");
9070         SvEVALED_on(repl);
9071         SvREFCNT_dec(PL_sublex_info.repl);
9072         PL_sublex_info.repl = repl;
9073     }
9074     if (CopLINE(PL_curcop) != first_line) {
9075         sv_upgrade(PL_sublex_info.repl, SVt_PVNV);
9076         ((XPVNV*)SvANY(PL_sublex_info.repl))->xnv_u.xpad_cop_seq.xlow =
9077             CopLINE(PL_curcop) - first_line;
9078         CopLINE_set(PL_curcop, first_line);
9079     }
9080
9081     PL_lex_op = (OP*)pm;
9082     pl_yylval.ival = OP_SUBST;
9083     return s;
9084 }
9085
9086 STATIC char *
9087 S_scan_trans(pTHX_ char *start)
9088 {
9089     char* s;
9090     OP *o;
9091     U8 squash;
9092     U8 del;
9093     U8 complement;
9094     bool nondestruct = 0;
9095     char *t;
9096
9097     PERL_ARGS_ASSERT_SCAN_TRANS;
9098
9099     pl_yylval.ival = OP_NULL;
9100
9101     s = scan_str(start,FALSE,FALSE,FALSE,&t);
9102     if (!s)
9103         Perl_croak(aTHX_ "Transliteration pattern not terminated");
9104
9105     s = t;
9106
9107     s = scan_str(s,FALSE,FALSE,FALSE,NULL);
9108     if (!s) {
9109         SvREFCNT_dec_NN(PL_lex_stuff);
9110         PL_lex_stuff = NULL;
9111         Perl_croak(aTHX_ "Transliteration replacement not terminated");
9112     }
9113
9114     complement = del = squash = 0;
9115     while (1) {
9116         switch (*s) {
9117         case 'c':
9118             complement = OPpTRANS_COMPLEMENT;
9119             break;
9120         case 'd':
9121             del = OPpTRANS_DELETE;
9122             break;
9123         case 's':
9124             squash = OPpTRANS_SQUASH;
9125             break;
9126         case 'r':
9127             nondestruct = 1;
9128             break;
9129         default:
9130             goto no_more;
9131         }
9132         s++;
9133     }
9134   no_more:
9135
9136     o = newPVOP(nondestruct ? OP_TRANSR : OP_TRANS, 0, (char*)NULL);
9137     o->op_private &= ~OPpTRANS_ALL;
9138     o->op_private |= del|squash|complement|
9139       (DO_UTF8(PL_lex_stuff)? OPpTRANS_FROM_UTF : 0)|
9140       (DO_UTF8(PL_sublex_info.repl) ? OPpTRANS_TO_UTF   : 0);
9141
9142     PL_lex_op = o;
9143     pl_yylval.ival = nondestruct ? OP_TRANSR : OP_TRANS;
9144
9145
9146     return s;
9147 }
9148
9149 /* scan_heredoc
9150    Takes a pointer to the first < in <<FOO.
9151    Returns a pointer to the byte following <<FOO.
9152
9153    This function scans a heredoc, which involves different methods
9154    depending on whether we are in a string eval, quoted construct, etc.
9155    This is because PL_linestr could containing a single line of input, or
9156    a whole string being evalled, or the contents of the current quote-
9157    like operator.
9158
9159    The two basic methods are:
9160     - Steal lines from the input stream
9161     - Scan the heredoc in PL_linestr and remove it therefrom
9162
9163    In a file scope or filtered eval, the first method is used; in a
9164    string eval, the second.
9165
9166    In a quote-like operator, we have to choose between the two,
9167    depending on where we can find a newline.  We peek into outer lex-
9168    ing scopes until we find one with a newline in it.  If we reach the
9169    outermost lexing scope and it is a file, we use the stream method.
9170    Otherwise it is treated as an eval.
9171 */
9172
9173 STATIC char *
9174 S_scan_heredoc(pTHX_ char *s)
9175 {
9176     I32 op_type = OP_SCALAR;
9177     I32 len;
9178     SV *tmpstr;
9179     char term;
9180     char *d;
9181     char *e;
9182     char *peek;
9183     const bool infile = PL_rsfp || PL_parser->filtered;
9184     const line_t origline = CopLINE(PL_curcop);
9185     LEXSHARED *shared = PL_parser->lex_shared;
9186
9187     PERL_ARGS_ASSERT_SCAN_HEREDOC;
9188
9189     s += 2;
9190     d = PL_tokenbuf + 1;
9191     e = PL_tokenbuf + sizeof PL_tokenbuf - 1;
9192     *PL_tokenbuf = '\n';
9193     peek = s;
9194     while (SPACE_OR_TAB(*peek))
9195         peek++;
9196     if (*peek == '`' || *peek == '\'' || *peek =='"') {
9197         s = peek;
9198         term = *s++;
9199         s = delimcpy(d, e, s, PL_bufend, term, &len);
9200         if (s == PL_bufend)
9201             Perl_croak(aTHX_ "Unterminated delimiter for here document");
9202         d += len;
9203         s++;
9204     }
9205     else {
9206         if (*s == '\\')
9207             /* <<\FOO is equivalent to <<'FOO' */
9208             s++, term = '\'';
9209         else
9210             term = '"';
9211         if (!isWORDCHAR_lazy_if(s,UTF))
9212             deprecate("bare << to mean <<\"\"");
9213         for (; isWORDCHAR_lazy_if(s,UTF); s++) {
9214             if (d < e)
9215                 *d++ = *s;
9216         }
9217     }
9218     if (d >= PL_tokenbuf + sizeof PL_tokenbuf - 1)
9219         Perl_croak(aTHX_ "Delimiter for here document is too long");
9220     *d++ = '\n';
9221     *d = '\0';
9222     len = d - PL_tokenbuf;
9223
9224 #ifndef PERL_STRICT_CR
9225     d = strchr(s, '\r');
9226     if (d) {
9227         char * const olds = s;
9228         s = d;
9229         while (s < PL_bufend) {
9230             if (*s == '\r') {
9231                 *d++ = '\n';
9232                 if (*++s == '\n')
9233                     s++;
9234             }
9235             else if (*s == '\n' && s[1] == '\r') {      /* \015\013 on a mac? */
9236                 *d++ = *s++;
9237                 s++;
9238             }
9239             else
9240                 *d++ = *s++;
9241         }
9242         *d = '\0';
9243         PL_bufend = d;
9244         SvCUR_set(PL_linestr, PL_bufend - SvPVX_const(PL_linestr));
9245         s = olds;
9246     }
9247 #endif
9248
9249     tmpstr = newSV_type(SVt_PVIV);
9250     SvGROW(tmpstr, 80);
9251     if (term == '\'') {
9252         op_type = OP_CONST;
9253         SvIV_set(tmpstr, -1);
9254     }
9255     else if (term == '`') {
9256         op_type = OP_BACKTICK;
9257         SvIV_set(tmpstr, '\\');
9258     }
9259
9260     PL_multi_start = origline + 1 + PL_parser->herelines;
9261     PL_multi_open = PL_multi_close = '<';
9262     /* inside a string eval or quote-like operator */
9263     if (!infile || PL_lex_inwhat) {
9264         SV *linestr;
9265         char *bufend;
9266         char * const olds = s;
9267         PERL_CONTEXT * const cx = &cxstack[cxstack_ix];
9268         /* These two fields are not set until an inner lexing scope is
9269            entered.  But we need them set here. */
9270         shared->ls_bufptr  = s;
9271         shared->ls_linestr = PL_linestr;
9272         if (PL_lex_inwhat)
9273           /* Look for a newline.  If the current buffer does not have one,
9274              peek into the line buffer of the parent lexing scope, going
9275              up as many levels as necessary to find one with a newline
9276              after bufptr.
9277            */
9278           while (!(s = (char *)memchr(
9279                     (void *)shared->ls_bufptr, '\n',
9280                     SvEND(shared->ls_linestr)-shared->ls_bufptr
9281                 ))) {
9282             shared = shared->ls_prev;
9283             /* shared is only null if we have gone beyond the outermost
9284                lexing scope.  In a file, we will have broken out of the
9285                loop in the previous iteration.  In an eval, the string buf-
9286                fer ends with "\n;", so the while condition above will have
9287                evaluated to false.  So shared can never be null.  Or so you
9288                might think.  Odd syntax errors like s;@{<<; can gobble up
9289                the implicit semicolon at the end of a flie, causing the
9290                file handle to be closed even when we are not in a string
9291                eval.  So shared may be null in that case.  */
9292             if (UNLIKELY(!shared))
9293                 goto interminable;
9294             /* A LEXSHARED struct with a null ls_prev pointer is the outer-
9295                most lexing scope.  In a file, shared->ls_linestr at that
9296                level is just one line, so there is no body to steal. */
9297             if (infile && !shared->ls_prev) {
9298                 s = olds;
9299                 goto streaming;
9300             }
9301           }
9302         else {  /* eval */
9303             s = (char*)memchr((void*)s, '\n', PL_bufend - s);
9304             assert(s);
9305         }
9306         linestr = shared->ls_linestr;
9307         bufend = SvEND(linestr);
9308         d = s;
9309         while (s < bufend - len + 1 &&
9310           memNE(s,PL_tokenbuf,len) ) {
9311             if (*s++ == '\n')
9312                 ++PL_parser->herelines;
9313         }
9314         if (s >= bufend - len + 1) {
9315             goto interminable;
9316         }
9317         sv_setpvn(tmpstr,d+1,s-d);
9318         s += len - 1;
9319         /* the preceding stmt passes a newline */
9320         PL_parser->herelines++;
9321
9322         /* s now points to the newline after the heredoc terminator.
9323            d points to the newline before the body of the heredoc.
9324          */
9325
9326         /* We are going to modify linestr in place here, so set
9327            aside copies of the string if necessary for re-evals or
9328            (caller $n)[6]. */
9329         /* See the Paranoia note in case LEX_INTERPEND in yylex, for why we
9330            check shared->re_eval_str. */
9331         if (shared->re_eval_start || shared->re_eval_str) {
9332             /* Set aside the rest of the regexp */
9333             if (!shared->re_eval_str)
9334                 shared->re_eval_str =
9335                        newSVpvn(shared->re_eval_start,
9336                                 bufend - shared->re_eval_start);
9337             shared->re_eval_start -= s-d;
9338         }
9339         if (cxstack_ix >= 0 && CxTYPE(cx) == CXt_EVAL &&
9340             CxOLD_OP_TYPE(cx) == OP_ENTEREVAL &&
9341             cx->blk_eval.cur_text == linestr)
9342         {
9343             cx->blk_eval.cur_text = newSVsv(linestr);
9344             SvSCREAM_on(cx->blk_eval.cur_text);
9345         }
9346         /* Copy everything from s onwards back to d. */
9347         Move(s,d,bufend-s + 1,char);
9348         SvCUR_set(linestr, SvCUR(linestr) - (s-d));
9349         /* Setting PL_bufend only applies when we have not dug deeper
9350            into other scopes, because sublex_done sets PL_bufend to
9351            SvEND(PL_linestr). */
9352         if (shared == PL_parser->lex_shared) PL_bufend = SvEND(linestr);
9353         s = olds;
9354     }
9355     else
9356     {
9357       SV *linestr_save;
9358      streaming:
9359       sv_setpvs(tmpstr,"");   /* avoid "uninitialized" warning */
9360       term = PL_tokenbuf[1];
9361       len--;
9362       linestr_save = PL_linestr; /* must restore this afterwards */
9363       d = s;                     /* and this */
9364       PL_linestr = newSVpvs("");
9365       PL_bufend = SvPVX(PL_linestr);
9366       while (1) {
9367         PL_bufptr = PL_bufend;
9368         CopLINE_set(PL_curcop,
9369                     origline + 1 + PL_parser->herelines);
9370         if (!lex_next_chunk(LEX_NO_TERM)
9371          && (!SvCUR(tmpstr) || SvEND(tmpstr)[-1] != '\n')) {
9372             /* Simply freeing linestr_save might seem simpler here, as it
9373                does not matter what PL_linestr points to, since we are
9374                about to croak; but in a quote-like op, linestr_save
9375                will have been prospectively freed already, via
9376                SAVEFREESV(PL_linestr) in sublex_push, so it’s easier to
9377                restore PL_linestr. */
9378             SvREFCNT_dec_NN(PL_linestr);
9379             PL_linestr = linestr_save;
9380             goto interminable;
9381         }
9382         CopLINE_set(PL_curcop, origline);
9383         if (!SvCUR(PL_linestr) || PL_bufend[-1] != '\n') {
9384             s = lex_grow_linestr(SvLEN(PL_linestr) + 3);
9385             /* ^That should be enough to avoid this needing to grow:  */
9386             sv_catpvs(PL_linestr, "\n\0");
9387             assert(s == SvPVX(PL_linestr));
9388             PL_bufend = SvEND(PL_linestr);
9389         }
9390         s = PL_bufptr;
9391         PL_parser->herelines++;
9392         PL_last_lop = PL_last_uni = NULL;
9393 #ifndef PERL_STRICT_CR
9394         if (PL_bufend - PL_linestart >= 2) {
9395             if ((PL_bufend[-2] == '\r' && PL_bufend[-1] == '\n') ||
9396                 (PL_bufend[-2] == '\n' && PL_bufend[-1] == '\r'))
9397             {
9398                 PL_bufend[-2] = '\n';
9399                 PL_bufend--;
9400                 SvCUR_set(PL_linestr, PL_bufend - SvPVX_const(PL_linestr));
9401             }
9402             else if (PL_bufend[-1] == '\r')
9403                 PL_bufend[-1] = '\n';
9404         }
9405         else if (PL_bufend - PL_linestart == 1 && PL_bufend[-1] == '\r')
9406             PL_bufend[-1] = '\n';
9407 #endif
9408         if (*s == term && PL_bufend-s >= len
9409          && memEQ(s,PL_tokenbuf + 1,len)) {
9410             SvREFCNT_dec(PL_linestr);
9411             PL_linestr = linestr_save;
9412             PL_linestart = SvPVX(linestr_save);
9413             PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
9414             s = d;
9415             break;
9416         }
9417         else {
9418             sv_catsv(tmpstr,PL_linestr);
9419         }
9420       }
9421     }
9422     PL_multi_end = origline + PL_parser->herelines;
9423     if (SvCUR(tmpstr) + 5 < SvLEN(tmpstr)) {
9424         SvPV_shrink_to_cur(tmpstr);
9425     }
9426     if (!IN_BYTES) {
9427         if (UTF && is_utf8_string((U8*)SvPVX_const(tmpstr), SvCUR(tmpstr)))
9428             SvUTF8_on(tmpstr);
9429         else if (IN_ENCODING)
9430             sv_recode_to_utf8(tmpstr, _get_encoding());
9431     }
9432     PL_lex_stuff = tmpstr;
9433     pl_yylval.ival = op_type;
9434     return s;
9435
9436   interminable:
9437     SvREFCNT_dec(tmpstr);
9438     CopLINE_set(PL_curcop, origline);
9439     missingterm(PL_tokenbuf + 1);
9440 }
9441
9442 /* scan_inputsymbol
9443    takes: current position in input buffer
9444    returns: new position in input buffer
9445    side-effects: pl_yylval and lex_op are set.
9446
9447    This code handles:
9448
9449    <>           read from ARGV
9450    <<>>         read from ARGV without magic open
9451    <FH>         read from filehandle
9452    <pkg::FH>    read from package qualified filehandle
9453    <pkg'FH>     read from package qualified filehandle
9454    <$fh>        read from filehandle in $fh
9455    <*.h>        filename glob
9456
9457 */
9458
9459 STATIC char *
9460 S_scan_inputsymbol(pTHX_ char *start)
9461 {
9462     char *s = start;            /* current position in buffer */
9463     char *end;
9464     I32 len;
9465     bool nomagicopen = FALSE;
9466     char *d = PL_tokenbuf;                                      /* start of temp holding space */
9467     const char * const e = PL_tokenbuf + sizeof PL_tokenbuf;    /* end of temp holding space */
9468
9469     PERL_ARGS_ASSERT_SCAN_INPUTSYMBOL;
9470
9471     end = strchr(s, '\n');
9472     if (!end)
9473         end = PL_bufend;
9474     if (s[1] == '<' && s[2] == '>' && s[3] == '>') {
9475         nomagicopen = TRUE;
9476         *d = '\0';
9477         len = 0;
9478         s += 3;
9479     }
9480     else
9481         s = delimcpy(d, e, s + 1, end, '>', &len);      /* extract until > */
9482
9483     /* die if we didn't have space for the contents of the <>,
9484        or if it didn't end, or if we see a newline
9485     */
9486
9487     if (len >= (I32)sizeof PL_tokenbuf)
9488         Perl_croak(aTHX_ "Excessively long <> operator");
9489     if (s >= end)
9490         Perl_croak(aTHX_ "Unterminated <> operator");
9491
9492     s++;
9493
9494     /* check for <$fh>
9495        Remember, only scalar variables are interpreted as filehandles by
9496        this code.  Anything more complex (e.g., <$fh{$num}>) will be
9497        treated as a glob() call.
9498        This code makes use of the fact that except for the $ at the front,
9499        a scalar variable and a filehandle look the same.
9500     */
9501     if (*d == '$' && d[1]) d++;
9502
9503     /* allow <Pkg'VALUE> or <Pkg::VALUE> */
9504     while (*d && (isWORDCHAR_lazy_if(d,UTF) || *d == '\'' || *d == ':'))
9505         d += UTF ? UTF8SKIP(d) : 1;
9506
9507     /* If we've tried to read what we allow filehandles to look like, and
9508        there's still text left, then it must be a glob() and not a getline.
9509        Use scan_str to pull out the stuff between the <> and treat it
9510        as nothing more than a string.
9511     */
9512
9513     if (d - PL_tokenbuf != len) {
9514         pl_yylval.ival = OP_GLOB;
9515         s = scan_str(start,FALSE,FALSE,FALSE,NULL);
9516         if (!s)
9517            Perl_croak(aTHX_ "Glob not terminated");
9518         return s;
9519     }
9520     else {
9521         bool readline_overriden = FALSE;
9522         GV *gv_readline;
9523         /* we're in a filehandle read situation */
9524         d = PL_tokenbuf;
9525
9526         /* turn <> into <ARGV> */
9527         if (!len)
9528             Copy("ARGV",d,5,char);
9529
9530         /* Check whether readline() is overriden */
9531         if ((gv_readline = gv_override("readline",8)))
9532             readline_overriden = TRUE;
9533
9534         /* if <$fh>, create the ops to turn the variable into a
9535            filehandle
9536         */
9537         if (*d == '$') {
9538             /* try to find it in the pad for this block, otherwise find
9539                add symbol table ops
9540             */
9541             const PADOFFSET tmp = pad_findmy_pvn(d, len, 0);
9542             if (tmp != NOT_IN_PAD) {
9543                 if (PAD_COMPNAME_FLAGS_isOUR(tmp)) {
9544                     HV * const stash = PAD_COMPNAME_OURSTASH(tmp);
9545                     HEK * const stashname = HvNAME_HEK(stash);
9546                     SV * const sym = sv_2mortal(newSVhek(stashname));
9547                     sv_catpvs(sym, "::");
9548                     sv_catpv(sym, d+1);
9549                     d = SvPVX(sym);
9550                     goto intro_sym;
9551                 }
9552                 else {
9553                     OP * const o = newOP(OP_PADSV, 0);
9554                     o->op_targ = tmp;
9555                     PL_lex_op = readline_overriden
9556                         ? (OP*)newUNOP(OP_ENTERSUB, OPf_STACKED,
9557                                 op_append_elem(OP_LIST, o,
9558                                     newCVREF(0, newGVOP(OP_GV,0,gv_readline))))
9559                         : (OP*)newUNOP(OP_READLINE, 0, o);
9560                 }
9561             }
9562             else {
9563                 GV *gv;
9564                 ++d;
9565               intro_sym:
9566                 gv = gv_fetchpv(d,
9567                                 GV_ADDMULTI | ( UTF ? SVf_UTF8 : 0 ),
9568                                 SVt_PV);
9569                 PL_lex_op = readline_overriden
9570                     ? (OP*)newUNOP(OP_ENTERSUB, OPf_STACKED,
9571                             op_append_elem(OP_LIST,
9572                                 newUNOP(OP_RV2SV, 0, newGVOP(OP_GV, 0, gv)),
9573                                 newCVREF(0, newGVOP(OP_GV, 0, gv_readline))))
9574                     : (OP*)newUNOP(OP_READLINE, 0,
9575                             newUNOP(OP_RV2SV, 0,
9576                                 newGVOP(OP_GV, 0, gv)));
9577             }
9578             /* we created the ops in PL_lex_op, so make pl_yylval.ival a null op */
9579             pl_yylval.ival = OP_NULL;
9580         }
9581
9582         /* If it's none of the above, it must be a literal filehandle
9583            (<Foo::BAR> or <FOO>) so build a simple readline OP */
9584         else {
9585             GV * const gv = gv_fetchpv(d, GV_ADD | ( UTF ? SVf_UTF8 : 0 ), SVt_PVIO);
9586             PL_lex_op = readline_overriden
9587                 ? (OP*)newUNOP(OP_ENTERSUB, OPf_STACKED,
9588                         op_append_elem(OP_LIST,
9589                             newGVOP(OP_GV, 0, gv),
9590                             newCVREF(0, newGVOP(OP_GV, 0, gv_readline))))
9591                 : (OP*)newUNOP(OP_READLINE, nomagicopen ? OPf_SPECIAL : 0, newGVOP(OP_GV, 0, gv));
9592             pl_yylval.ival = OP_NULL;
9593         }
9594     }
9595
9596     return s;
9597 }
9598
9599
9600 /* scan_str
9601    takes:
9602         start                   position in buffer
9603         keep_bracketed_quoted   preserve \ quoting of embedded delimiters, but
9604                                 only if they are of the open/close form
9605         keep_delims             preserve the delimiters around the string
9606         re_reparse              compiling a run-time /(?{})/:
9607                                    collapse // to /,  and skip encoding src
9608         delimp                  if non-null, this is set to the position of
9609                                 the closing delimiter, or just after it if
9610                                 the closing and opening delimiters differ
9611                                 (i.e., the opening delimiter of a substitu-
9612                                 tion replacement)
9613    returns: position to continue reading from buffer
9614    side-effects: multi_start, multi_close, lex_repl or lex_stuff, and
9615         updates the read buffer.
9616
9617    This subroutine pulls a string out of the input.  It is called for:
9618         q               single quotes           q(literal text)
9619         '               single quotes           'literal text'
9620         qq              double quotes           qq(interpolate $here please)
9621         "               double quotes           "interpolate $here please"
9622         qx              backticks               qx(/bin/ls -l)
9623         `               backticks               `/bin/ls -l`
9624         qw              quote words             @EXPORT_OK = qw( func() $spam )
9625         m//             regexp match            m/this/
9626         s///            regexp substitute       s/this/that/
9627         tr///           string transliterate    tr/this/that/
9628         y///            string transliterate    y/this/that/
9629         ($*@)           sub prototypes          sub foo ($)
9630         (stuff)         sub attr parameters     sub foo : attr(stuff)
9631         <>              readline or globs       <FOO>, <>, <$fh>, or <*.c>
9632         
9633    In most of these cases (all but <>, patterns and transliterate)
9634    yylex() calls scan_str().  m// makes yylex() call scan_pat() which
9635    calls scan_str().  s/// makes yylex() call scan_subst() which calls
9636    scan_str().  tr/// and y/// make yylex() call scan_trans() which
9637    calls scan_str().
9638
9639    It skips whitespace before the string starts, and treats the first
9640    character as the delimiter.  If the delimiter is one of ([{< then
9641    the corresponding "close" character )]}> is used as the closing
9642    delimiter.  It allows quoting of delimiters, and if the string has
9643    balanced delimiters ([{<>}]) it allows nesting.
9644
9645    On success, the SV with the resulting string is put into lex_stuff or,
9646    if that is already non-NULL, into lex_repl. The second case occurs only
9647    when parsing the RHS of the special constructs s/// and tr/// (y///).
9648    For convenience, the terminating delimiter character is stuffed into
9649    SvIVX of the SV.
9650 */
9651
9652 STATIC char *
9653 S_scan_str(pTHX_ char *start, int keep_bracketed_quoted, int keep_delims, int re_reparse,
9654                  char **delimp
9655     )
9656 {
9657     SV *sv;                     /* scalar value: string */
9658     const char *tmps;           /* temp string, used for delimiter matching */
9659     char *s = start;            /* current position in the buffer */
9660     char term;                  /* terminating character */
9661     char *to;                   /* current position in the sv's data */
9662     I32 brackets = 1;           /* bracket nesting level */
9663     bool has_utf8 = FALSE;      /* is there any utf8 content? */
9664     I32 termcode;               /* terminating char. code */
9665     U8 termstr[UTF8_MAXBYTES];  /* terminating string */
9666     STRLEN termlen;             /* length of terminating string */
9667     int last_off = 0;           /* last position for nesting bracket */
9668     line_t herelines;
9669
9670     PERL_ARGS_ASSERT_SCAN_STR;
9671
9672     /* skip space before the delimiter */
9673     if (isSPACE(*s)) {
9674         s = skipspace(s);
9675     }
9676
9677     /* mark where we are, in case we need to report errors */
9678     CLINE;
9679
9680     /* after skipping whitespace, the next character is the terminator */
9681     term = *s;
9682     if (!UTF) {
9683         termcode = termstr[0] = term;
9684         termlen = 1;
9685     }
9686     else {
9687         termcode = utf8_to_uvchr_buf((U8*)s, (U8*)PL_bufend, &termlen);
9688         Copy(s, termstr, termlen, U8);
9689         if (!UTF8_IS_INVARIANT(term))
9690             has_utf8 = TRUE;
9691     }
9692
9693     /* mark where we are */
9694     PL_multi_start = CopLINE(PL_curcop);
9695     PL_multi_open = term;
9696     herelines = PL_parser->herelines;
9697
9698     /* find corresponding closing delimiter */
9699     if (term && (tmps = strchr("([{< )]}> )]}>",term)))
9700         termcode = termstr[0] = term = tmps[5];
9701
9702     PL_multi_close = term;
9703
9704     if (PL_multi_open == PL_multi_close) {
9705         keep_bracketed_quoted = FALSE;
9706     }
9707
9708     /* create a new SV to hold the contents.  79 is the SV's initial length.
9709        What a random number. */
9710     sv = newSV_type(SVt_PVIV);
9711     SvGROW(sv, 80);
9712     SvIV_set(sv, termcode);
9713     (void)SvPOK_only(sv);               /* validate pointer */
9714
9715     /* move past delimiter and try to read a complete string */
9716     if (keep_delims)
9717         sv_catpvn(sv, s, termlen);
9718     s += termlen;
9719     for (;;) {
9720         if (IN_ENCODING && !UTF && !re_reparse) {
9721             bool cont = TRUE;
9722
9723             while (cont) {
9724                 int offset = s - SvPVX_const(PL_linestr);
9725                 const bool found = sv_cat_decode(sv, _get_encoding(), PL_linestr,
9726                                            &offset, (char*)termstr, termlen);
9727                 const char *ns;
9728                 char *svlast;
9729
9730                 if (SvIsCOW(PL_linestr)) {
9731                     STRLEN bufend_pos, bufptr_pos, oldbufptr_pos;
9732                     STRLEN oldoldbufptr_pos, linestart_pos, last_uni_pos;
9733                     STRLEN last_lop_pos, re_eval_start_pos, s_pos;
9734                     char *buf = SvPVX(PL_linestr);
9735                     bufend_pos = PL_parser->bufend - buf;
9736                     bufptr_pos = PL_parser->bufptr - buf;
9737                     oldbufptr_pos = PL_parser->oldbufptr - buf;
9738                     oldoldbufptr_pos = PL_parser->oldoldbufptr - buf;
9739                     linestart_pos = PL_parser->linestart - buf;
9740                     last_uni_pos = PL_parser->last_uni
9741                         ? PL_parser->last_uni - buf
9742                         : 0;
9743                     last_lop_pos = PL_parser->last_lop
9744                         ? PL_parser->last_lop - buf
9745                         : 0;
9746                     re_eval_start_pos =
9747                         PL_parser->lex_shared->re_eval_start ?
9748                             PL_parser->lex_shared->re_eval_start - buf : 0;
9749                     s_pos = s - buf;
9750
9751                     sv_force_normal(PL_linestr);
9752
9753                     buf = SvPVX(PL_linestr);
9754                     PL_parser->bufend = buf + bufend_pos;
9755                     PL_parser->bufptr = buf + bufptr_pos;
9756                     PL_parser->oldbufptr = buf + oldbufptr_pos;
9757                     PL_parser->oldoldbufptr = buf + oldoldbufptr_pos;
9758                     PL_parser->linestart = buf + linestart_pos;
9759                     if (PL_parser->last_uni)
9760                         PL_parser->last_uni = buf + last_uni_pos;
9761                     if (PL_parser->last_lop)
9762                         PL_parser->last_lop = buf + last_lop_pos;
9763                     if (PL_parser->lex_shared->re_eval_start)
9764                         PL_parser->lex_shared->re_eval_start  =
9765                             buf + re_eval_start_pos;
9766                     s = buf + s_pos;
9767                 }
9768                 ns = SvPVX_const(PL_linestr) + offset;
9769                 svlast = SvEND(sv) - 1;
9770
9771                 for (; s < ns; s++) {
9772                     if (*s == '\n' && !PL_rsfp && !PL_parser->filtered)
9773                         COPLINE_INC_WITH_HERELINES;
9774                 }
9775                 if (!found)
9776                     goto read_more_line;
9777                 else {
9778                     /* handle quoted delimiters */
9779                     if (SvCUR(sv) > 1 && *(svlast-1) == '\\') {
9780                         const char *t;
9781                         for (t = svlast-2; t >= SvPVX_const(sv) && *t == '\\';)
9782                             t--;
9783                         if ((svlast-1 - t) % 2) {
9784                             if (!keep_bracketed_quoted) {
9785                                 *(svlast-1) = term;
9786                                 *svlast = '\0';
9787                                 SvCUR_set(sv, SvCUR(sv) - 1);
9788                             }
9789                             continue;
9790                         }
9791                     }
9792                     if (PL_multi_open == PL_multi_close) {
9793                         cont = FALSE;
9794                     }
9795                     else {
9796                         const char *t;
9797                         char *w;
9798                         for (t = w = SvPVX(sv)+last_off; t < svlast; w++, t++) {
9799                             /* At here, all closes are "was quoted" one,
9800                                so we don't check PL_multi_close. */
9801                             if (*t == '\\') {
9802                                 if (!keep_bracketed_quoted && *(t+1) == PL_multi_open)
9803                                     t++;
9804                                 else
9805                                     *w++ = *t++;
9806                             }
9807                             else if (*t == PL_multi_open)
9808                                 brackets++;
9809
9810                             *w = *t;
9811                         }
9812                         if (w < t) {
9813                             *w++ = term;
9814                             *w = '\0';
9815                             SvCUR_set(sv, w - SvPVX_const(sv));
9816                         }
9817                         last_off = w - SvPVX(sv);
9818                         if (--brackets <= 0)
9819                             cont = FALSE;
9820                     }
9821                 }
9822             }
9823             if (!keep_delims) {
9824                 SvCUR_set(sv, SvCUR(sv) - 1);
9825                 *SvEND(sv) = '\0';
9826             }
9827             break;
9828         }
9829
9830         /* extend sv if need be */
9831         SvGROW(sv, SvCUR(sv) + (PL_bufend - s) + 1);
9832         /* set 'to' to the next character in the sv's string */
9833         to = SvPVX(sv)+SvCUR(sv);
9834
9835         /* if open delimiter is the close delimiter read unbridle */
9836         if (PL_multi_open == PL_multi_close) {
9837             for (; s < PL_bufend; s++,to++) {
9838                 /* embedded newlines increment the current line number */
9839                 if (*s == '\n' && !PL_rsfp && !PL_parser->filtered)
9840                     COPLINE_INC_WITH_HERELINES;
9841                 /* handle quoted delimiters */
9842                 if (*s == '\\' && s+1 < PL_bufend && term != '\\') {
9843                     if (!keep_bracketed_quoted
9844                         && (s[1] == term
9845                             || (re_reparse && s[1] == '\\'))
9846                     )
9847                         s++;
9848                     else /* any other quotes are simply copied straight through */
9849                         *to++ = *s++;
9850                 }
9851                 /* terminate when run out of buffer (the for() condition), or
9852                    have found the terminator */
9853                 else if (*s == term) {
9854                     if (termlen == 1)
9855                         break;
9856                     if (s+termlen <= PL_bufend && memEQ(s, (char*)termstr, termlen))
9857                         break;
9858                 }
9859                 else if (!has_utf8 && !UTF8_IS_INVARIANT((U8)*s) && UTF)
9860                     has_utf8 = TRUE;
9861                 *to = *s;
9862             }
9863         }
9864         
9865         /* if the terminator isn't the same as the start character (e.g.,
9866            matched brackets), we have to allow more in the quoting, and
9867            be prepared for nested brackets.
9868         */
9869         else {
9870             /* read until we run out of string, or we find the terminator */
9871             for (; s < PL_bufend; s++,to++) {
9872                 /* embedded newlines increment the line count */
9873                 if (*s == '\n' && !PL_rsfp && !PL_parser->filtered)
9874                     COPLINE_INC_WITH_HERELINES;
9875                 /* backslashes can escape the open or closing characters */
9876                 if (*s == '\\' && s+1 < PL_bufend) {
9877                     if (!keep_bracketed_quoted &&
9878                         ((s[1] == PL_multi_open) || (s[1] == PL_multi_close)))
9879                     {
9880                         s++;
9881                     }
9882                     else
9883                         *to++ = *s++;
9884                 }
9885                 /* allow nested opens and closes */
9886                 else if (*s == PL_multi_close && --brackets <= 0)
9887                     break;
9888                 else if (*s == PL_multi_open)
9889                     brackets++;
9890                 else if (!has_utf8 && !UTF8_IS_INVARIANT((U8)*s) && UTF)
9891                     has_utf8 = TRUE;
9892                 *to = *s;
9893             }
9894         }
9895         /* terminate the copied string and update the sv's end-of-string */
9896         *to = '\0';
9897         SvCUR_set(sv, to - SvPVX_const(sv));
9898
9899         /*
9900          * this next chunk reads more into the buffer if we're not done yet
9901          */
9902
9903         if (s < PL_bufend)
9904             break;              /* handle case where we are done yet :-) */
9905
9906 #ifndef PERL_STRICT_CR
9907         if (to - SvPVX_const(sv) >= 2) {
9908             if ((to[-2] == '\r' && to[-1] == '\n') ||
9909                 (to[-2] == '\n' && to[-1] == '\r'))
9910             {
9911                 to[-2] = '\n';
9912                 to--;
9913                 SvCUR_set(sv, to - SvPVX_const(sv));
9914             }
9915             else if (to[-1] == '\r')
9916                 to[-1] = '\n';
9917         }
9918         else if (to - SvPVX_const(sv) == 1 && to[-1] == '\r')
9919             to[-1] = '\n';
9920 #endif
9921         
9922      read_more_line:
9923         /* if we're out of file, or a read fails, bail and reset the current
9924            line marker so we can report where the unterminated string began
9925         */
9926         COPLINE_INC_WITH_HERELINES;
9927         PL_bufptr = PL_bufend;
9928         if (!lex_next_chunk(0)) {
9929             sv_free(sv);
9930             CopLINE_set(PL_curcop, (line_t)PL_multi_start);
9931             return NULL;
9932         }
9933         s = PL_bufptr;
9934     }
9935
9936     /* at this point, we have successfully read the delimited string */
9937
9938     if (!IN_ENCODING || UTF || re_reparse) {
9939
9940         if (keep_delims)
9941             sv_catpvn(sv, s, termlen);
9942         s += termlen;
9943     }
9944     if (has_utf8 || (IN_ENCODING && !re_reparse))
9945         SvUTF8_on(sv);
9946
9947     PL_multi_end = CopLINE(PL_curcop);
9948     CopLINE_set(PL_curcop, PL_multi_start);
9949     PL_parser->herelines = herelines;
9950
9951     /* if we allocated too much space, give some back */
9952     if (SvCUR(sv) + 5 < SvLEN(sv)) {
9953         SvLEN_set(sv, SvCUR(sv) + 1);
9954         SvPV_renew(sv, SvLEN(sv));
9955     }
9956
9957     /* decide whether this is the first or second quoted string we've read
9958        for this op
9959     */
9960
9961     if (PL_lex_stuff)
9962         PL_sublex_info.repl = sv;
9963     else
9964         PL_lex_stuff = sv;
9965     if (delimp) *delimp = PL_multi_open == PL_multi_close ? s-termlen : s;
9966     return s;
9967 }
9968
9969 /*
9970   scan_num
9971   takes: pointer to position in buffer
9972   returns: pointer to new position in buffer
9973   side-effects: builds ops for the constant in pl_yylval.op
9974
9975   Read a number in any of the formats that Perl accepts:
9976
9977   \d(_?\d)*(\.(\d(_?\d)*)?)?[Ee][\+\-]?(\d(_?\d)*)      12 12.34 12.
9978   \.\d(_?\d)*[Ee][\+\-]?(\d(_?\d)*)                     .34
9979   0b[01](_?[01])*                                       binary integers
9980   0[0-7](_?[0-7])*                                      octal integers
9981   0x[0-9A-Fa-f](_?[0-9A-Fa-f])*                         hexadecimal integers
9982   0x[0-9A-Fa-f](_?[0-9A-Fa-f])*(?:\.\d*)?p[+-]?[0-9]+   hexadecimal floats
9983
9984   Like most scan_ routines, it uses the PL_tokenbuf buffer to hold the
9985   thing it reads.
9986
9987   If it reads a number without a decimal point or an exponent, it will
9988   try converting the number to an integer and see if it can do so
9989   without loss of precision.
9990 */
9991
9992 char *
9993 Perl_scan_num(pTHX_ const char *start, YYSTYPE* lvalp)
9994 {
9995     const char *s = start;      /* current position in buffer */
9996     char *d;                    /* destination in temp buffer */
9997     char *e;                    /* end of temp buffer */
9998     NV nv;                              /* number read, as a double */
9999     SV *sv = NULL;                      /* place to put the converted number */
10000     bool floatit;                       /* boolean: int or float? */
10001     const char *lastub = NULL;          /* position of last underbar */
10002     static const char* const number_too_long = "Number too long";
10003     /* Hexadecimal floating point.
10004      *
10005      * In many places (where we have quads and NV is IEEE 754 double)
10006      * we can fit the mantissa bits of a NV into an unsigned quad.
10007      * (Note that UVs might not be quads even when we have quads.)
10008      * This will not work everywhere, though (either no quads, or
10009      * using long doubles), in which case we have to resort to NV,
10010      * which will probably mean horrible loss of precision due to
10011      * multiple fp operations. */
10012     bool hexfp = FALSE;
10013     int total_bits = 0;
10014 #if NVSIZE == 8 && defined(HAS_QUAD) && defined(Uquad_t)
10015 #  define HEXFP_UQUAD
10016     Uquad_t hexfp_uquad = 0;
10017     int hexfp_frac_bits = 0;
10018 #else
10019 #  define HEXFP_NV
10020     NV hexfp_nv = 0.0;
10021 #endif
10022     NV hexfp_mult = 1.0;
10023     UV high_non_zero = 0; /* highest digit */
10024
10025     PERL_ARGS_ASSERT_SCAN_NUM;
10026
10027     /* We use the first character to decide what type of number this is */
10028
10029     switch (*s) {
10030     default:
10031         Perl_croak(aTHX_ "panic: scan_num, *s=%d", *s);
10032
10033     /* if it starts with a 0, it could be an octal number, a decimal in
10034        0.13 disguise, or a hexadecimal number, or a binary number. */
10035     case '0':
10036         {
10037           /* variables:
10038              u          holds the "number so far"
10039              shift      the power of 2 of the base
10040                         (hex == 4, octal == 3, binary == 1)
10041              overflowed was the number more than we can hold?
10042
10043              Shift is used when we add a digit.  It also serves as an "are
10044              we in octal/hex/binary?" indicator to disallow hex characters
10045              when in octal mode.
10046            */
10047             NV n = 0.0;
10048             UV u = 0;
10049             I32 shift;
10050             bool overflowed = FALSE;
10051             bool just_zero  = TRUE;     /* just plain 0 or binary number? */
10052             static const NV nvshift[5] = { 1.0, 2.0, 4.0, 8.0, 16.0 };
10053             static const char* const bases[5] =
10054               { "", "binary", "", "octal", "hexadecimal" };
10055             static const char* const Bases[5] =
10056               { "", "Binary", "", "Octal", "Hexadecimal" };
10057             static const char* const maxima[5] =
10058               { "",
10059                 "0b11111111111111111111111111111111",
10060                 "",
10061                 "037777777777",
10062                 "0xffffffff" };
10063             const char *base, *Base, *max;
10064
10065             /* check for hex */
10066             if (isALPHA_FOLD_EQ(s[1], 'x')) {
10067                 shift = 4;
10068                 s += 2;
10069                 just_zero = FALSE;
10070             } else if (isALPHA_FOLD_EQ(s[1], 'b')) {
10071                 shift = 1;
10072                 s += 2;
10073                 just_zero = FALSE;
10074             }
10075             /* check for a decimal in disguise */
10076             else if (s[1] == '.' || isALPHA_FOLD_EQ(s[1], 'e'))
10077                 goto decimal;
10078             /* so it must be octal */
10079             else {
10080                 shift = 3;
10081                 s++;
10082             }
10083
10084             if (*s == '_') {
10085                 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
10086                                "Misplaced _ in number");
10087                lastub = s++;
10088             }
10089
10090             base = bases[shift];
10091             Base = Bases[shift];
10092             max  = maxima[shift];
10093
10094             /* read the rest of the number */
10095             for (;;) {
10096                 /* x is used in the overflow test,
10097                    b is the digit we're adding on. */
10098                 UV x, b;
10099
10100                 switch (*s) {
10101
10102                 /* if we don't mention it, we're done */
10103                 default:
10104                     goto out;
10105
10106                 /* _ are ignored -- but warned about if consecutive */
10107                 case '_':
10108                     if (lastub && s == lastub + 1)
10109                         Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
10110                                        "Misplaced _ in number");
10111                     lastub = s++;
10112                     break;
10113
10114                 /* 8 and 9 are not octal */
10115                 case '8': case '9':
10116                     if (shift == 3)
10117                         yyerror(Perl_form(aTHX_ "Illegal octal digit '%c'", *s));
10118                     /* FALLTHROUGH */
10119
10120                 /* octal digits */
10121                 case '2': case '3': case '4':
10122                 case '5': case '6': case '7':
10123                     if (shift == 1)
10124                         yyerror(Perl_form(aTHX_ "Illegal binary digit '%c'", *s));
10125                     /* FALLTHROUGH */
10126
10127                 case '0': case '1':
10128                     b = *s++ & 15;              /* ASCII digit -> value of digit */
10129                     goto digit;
10130
10131                 /* hex digits */
10132                 case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
10133                 case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
10134                     /* make sure they said 0x */
10135                     if (shift != 4)
10136                         goto out;
10137                     b = (*s++ & 7) + 9;
10138
10139                     /* Prepare to put the digit we have onto the end
10140                        of the number so far.  We check for overflows.
10141                     */
10142
10143                   digit:
10144                     just_zero = FALSE;
10145                     if (!overflowed) {
10146                         x = u << shift; /* make room for the digit */
10147
10148                         total_bits += shift;
10149
10150                         if ((x >> shift) != u
10151                             && !(PL_hints & HINT_NEW_BINARY)) {
10152                             overflowed = TRUE;
10153                             n = (NV) u;
10154                             Perl_ck_warner_d(aTHX_ packWARN(WARN_OVERFLOW),
10155                                              "Integer overflow in %s number",
10156                                              base);
10157                         } else
10158                             u = x | b;          /* add the digit to the end */
10159                     }
10160                     if (overflowed) {
10161                         n *= nvshift[shift];
10162                         /* If an NV has not enough bits in its
10163                          * mantissa to represent an UV this summing of
10164                          * small low-order numbers is a waste of time
10165                          * (because the NV cannot preserve the
10166                          * low-order bits anyway): we could just
10167                          * remember when did we overflow and in the
10168                          * end just multiply n by the right
10169                          * amount. */
10170                         n += (NV) b;
10171                     }
10172
10173                     if (high_non_zero == 0 && b > 0)
10174                         high_non_zero = b;
10175
10176                     /* this could be hexfp, but peek ahead
10177                      * to avoid matching ".." */
10178                     if (UNLIKELY(HEXFP_PEEK(s))) {
10179                         goto out;
10180                     }
10181
10182                     break;
10183                 }
10184             }
10185
10186           /* if we get here, we had success: make a scalar value from
10187              the number.
10188           */
10189           out:
10190
10191             /* final misplaced underbar check */
10192             if (s[-1] == '_') {
10193                 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX), "Misplaced _ in number");
10194             }
10195
10196             if (UNLIKELY(HEXFP_PEEK(s))) {
10197                 /* Do sloppy (on the underbars) but quick detection
10198                  * (and value construction) for hexfp, the decimal
10199                  * detection will shortly be more thorough with the
10200                  * underbar checks. */
10201                 const char* h = s;
10202 #ifdef HEXFP_UQUAD
10203                 hexfp_uquad = u;
10204 #else /* HEXFP_NV */
10205                 hexfp_nv = u;
10206 #endif
10207                 if (*h == '.') {
10208 #ifdef HEXFP_NV
10209                     NV mult = 1 / 16.0;
10210 #endif
10211                     h++;
10212                     while (isXDIGIT(*h) || *h == '_') {
10213                         if (isXDIGIT(*h)) {
10214                             U8 b = XDIGIT_VALUE(*h);
10215                             total_bits += shift;
10216 #ifdef HEXFP_UQUAD
10217                             hexfp_uquad <<= shift;
10218                             hexfp_uquad |= b;
10219                             hexfp_frac_bits += shift;
10220 #else /* HEXFP_NV */
10221                             hexfp_nv += b * mult;
10222                             mult /= 16.0;
10223 #endif
10224                         }
10225                         h++;
10226                     }
10227                 }
10228
10229                 if (total_bits >= 4) {
10230                     if (high_non_zero < 0x8)
10231                         total_bits--;
10232                     if (high_non_zero < 0x4)
10233                         total_bits--;
10234                     if (high_non_zero < 0x2)
10235                         total_bits--;
10236                 }
10237
10238                 if (total_bits > 0 && (isALPHA_FOLD_EQ(*h, 'p'))) {
10239                     bool negexp = FALSE;
10240                     h++;
10241                     if (*h == '+')
10242                         h++;
10243                     else if (*h == '-') {
10244                         negexp = TRUE;
10245                         h++;
10246                     }
10247                     if (isDIGIT(*h)) {
10248                         I32 hexfp_exp = 0;
10249                         while (isDIGIT(*h) || *h == '_') {
10250                             if (isDIGIT(*h)) {
10251                                 hexfp_exp *= 10;
10252                                 hexfp_exp += *h - '0';
10253 #ifdef NV_MIN_EXP
10254                                 if (negexp &&
10255                                     -hexfp_exp < NV_MIN_EXP - 1) {
10256                                     Perl_ck_warner(aTHX_ packWARN(WARN_OVERFLOW),
10257                                                    "Hexadecimal float: exponent underflow");
10258 #endif
10259                                     break;
10260                                 }
10261                                 else {
10262 #ifdef NV_MAX_EXP
10263                                     if (!negexp &&
10264                                         hexfp_exp > NV_MAX_EXP - 1) {
10265                                         Perl_ck_warner(aTHX_ packWARN(WARN_OVERFLOW),
10266                                                    "Hexadecimal float: exponent overflow");
10267                                         break;
10268                                     }
10269 #endif
10270                                 }
10271                             }
10272                             h++;
10273                         }
10274                         if (negexp)
10275                             hexfp_exp = -hexfp_exp;
10276 #ifdef HEXFP_UQUAD
10277                         hexfp_exp -= hexfp_frac_bits;
10278 #endif
10279                         hexfp_mult = pow(2.0, hexfp_exp);
10280                         hexfp = TRUE;
10281                         goto decimal;
10282                     }
10283                 }
10284             }
10285
10286             if (overflowed) {
10287                 if (n > 4294967295.0)
10288                     Perl_ck_warner(aTHX_ packWARN(WARN_PORTABLE),
10289                                    "%s number > %s non-portable",
10290                                    Base, max);
10291                 sv = newSVnv(n);
10292             }
10293             else {
10294 #if UVSIZE > 4
10295                 if (u > 0xffffffff)
10296                     Perl_ck_warner(aTHX_ packWARN(WARN_PORTABLE),
10297                                    "%s number > %s non-portable",
10298                                    Base, max);
10299 #endif
10300                 sv = newSVuv(u);
10301             }
10302             if (just_zero && (PL_hints & HINT_NEW_INTEGER))
10303                 sv = new_constant(start, s - start, "integer",
10304                                   sv, NULL, NULL, 0);
10305             else if (PL_hints & HINT_NEW_BINARY)
10306                 sv = new_constant(start, s - start, "binary", sv, NULL, NULL, 0);
10307         }
10308         break;
10309
10310     /*
10311       handle decimal numbers.
10312       we're also sent here when we read a 0 as the first digit
10313     */
10314     case '1': case '2': case '3': case '4': case '5':
10315     case '6': case '7': case '8': case '9': case '.':
10316       decimal:
10317         d = PL_tokenbuf;
10318         e = PL_tokenbuf + sizeof PL_tokenbuf - 6; /* room for various punctuation */
10319         floatit = FALSE;
10320         if (hexfp) {
10321             floatit = TRUE;
10322             *d++ = '0';
10323             *d++ = 'x';
10324             s = start + 2;
10325         }
10326
10327         /* read next group of digits and _ and copy into d */
10328         while (isDIGIT(*s) || *s == '_' ||
10329                UNLIKELY(hexfp && isXDIGIT(*s))) {
10330             /* skip underscores, checking for misplaced ones
10331                if -w is on
10332             */
10333             if (*s == '_') {
10334                 if (lastub && s == lastub + 1)
10335                     Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
10336                                    "Misplaced _ in number");
10337                 lastub = s++;
10338             }
10339             else {
10340                 /* check for end of fixed-length buffer */
10341                 if (d >= e)
10342                     Perl_croak(aTHX_ "%s", number_too_long);
10343                 /* if we're ok, copy the character */
10344                 *d++ = *s++;
10345             }
10346         }
10347
10348         /* final misplaced underbar check */
10349         if (lastub && s == lastub + 1) {
10350             Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX), "Misplaced _ in number");
10351         }
10352
10353         /* read a decimal portion if there is one.  avoid
10354            3..5 being interpreted as the number 3. followed
10355            by .5
10356         */
10357         if (*s == '.' && s[1] != '.') {
10358             floatit = TRUE;
10359             *d++ = *s++;
10360
10361             if (*s == '_') {
10362                 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
10363                                "Misplaced _ in number");
10364                 lastub = s;
10365             }
10366
10367             /* copy, ignoring underbars, until we run out of digits.
10368             */
10369             for (; isDIGIT(*s) || *s == '_' ||
10370                      UNLIKELY(hexfp && isXDIGIT(*s));
10371                  s++) {
10372                 /* fixed length buffer check */
10373                 if (d >= e)
10374                     Perl_croak(aTHX_ "%s", number_too_long);
10375                 if (*s == '_') {
10376                    if (lastub && s == lastub + 1)
10377                        Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
10378                                       "Misplaced _ in number");
10379                    lastub = s;
10380                 }
10381                 else
10382                     *d++ = *s;
10383             }
10384             /* fractional part ending in underbar? */
10385             if (s[-1] == '_') {
10386                 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
10387                                "Misplaced _ in number");
10388             }
10389             if (*s == '.' && isDIGIT(s[1])) {
10390                 /* oops, it's really a v-string, but without the "v" */
10391                 s = start;
10392                 goto vstring;
10393             }
10394         }
10395
10396         /* read exponent part, if present */
10397         if ((isALPHA_FOLD_EQ(*s, 'e')
10398               || UNLIKELY(hexfp && isALPHA_FOLD_EQ(*s, 'p')))
10399             && strchr("+-0123456789_", s[1]))
10400         {
10401             floatit = TRUE;
10402
10403             /* regardless of whether user said 3E5 or 3e5, use lower 'e',
10404                ditto for p (hexfloats) */
10405             if ((isALPHA_FOLD_EQ(*s, 'e'))) {
10406                 /* At least some Mach atof()s don't grok 'E' */
10407                 *d++ = 'e';
10408             }
10409             else if (UNLIKELY(hexfp && (isALPHA_FOLD_EQ(*s, 'p')))) {
10410                 *d++ = 'p';
10411             }
10412
10413             s++;
10414
10415
10416             /* stray preinitial _ */
10417             if (*s == '_') {
10418                 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
10419                                "Misplaced _ in number");
10420                 lastub = s++;
10421             }
10422
10423             /* allow positive or negative exponent */
10424             if (*s == '+' || *s == '-')
10425                 *d++ = *s++;
10426
10427             /* stray initial _ */
10428             if (*s == '_') {
10429                 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
10430                                "Misplaced _ in number");
10431                 lastub = s++;
10432             }
10433
10434             /* read digits of exponent */
10435             while (isDIGIT(*s) || *s == '_') {
10436                 if (isDIGIT(*s)) {
10437                     if (d >= e)
10438                         Perl_croak(aTHX_ "%s", number_too_long);
10439                     *d++ = *s++;
10440                 }
10441                 else {
10442                    if (((lastub && s == lastub + 1) ||
10443                         (!isDIGIT(s[1]) && s[1] != '_')))
10444                        Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
10445                                       "Misplaced _ in number");
10446                    lastub = s++;
10447                 }
10448             }
10449         }
10450
10451
10452         /*
10453            We try to do an integer conversion first if no characters
10454            indicating "float" have been found.
10455          */
10456
10457         if (!floatit) {
10458             UV uv;
10459             const int flags = grok_number (PL_tokenbuf, d - PL_tokenbuf, &uv);
10460
10461             if (flags == IS_NUMBER_IN_UV) {
10462               if (uv <= IV_MAX)
10463                 sv = newSViv(uv); /* Prefer IVs over UVs. */
10464               else
10465                 sv = newSVuv(uv);
10466             } else if (flags == (IS_NUMBER_IN_UV | IS_NUMBER_NEG)) {
10467               if (uv <= (UV) IV_MIN)
10468                 sv = newSViv(-(IV)uv);
10469               else
10470                 floatit = TRUE;
10471             } else
10472               floatit = TRUE;
10473         }
10474         if (floatit) {
10475             STORE_LC_NUMERIC_UNDERLYING_SET_STANDARD();
10476             /* terminate the string */
10477             *d = '\0';
10478             if (UNLIKELY(hexfp)) {
10479 #  ifdef NV_MANT_DIG
10480                 if (total_bits > NV_MANT_DIG)
10481                     Perl_ck_warner(aTHX_ packWARN(WARN_OVERFLOW),
10482                                    "Hexadecimal float: mantissa overflow");
10483 #  endif
10484 #ifdef HEXFP_UQUAD
10485                 nv = hexfp_uquad * hexfp_mult;
10486 #else /* HEXFP_NV */
10487                 nv = hexfp_nv * hexfp_mult;
10488 #endif
10489             } else {
10490                 nv = Atof(PL_tokenbuf);
10491             }
10492             RESTORE_LC_NUMERIC_UNDERLYING();
10493             sv = newSVnv(nv);
10494         }
10495
10496         if ( floatit
10497              ? (PL_hints & HINT_NEW_FLOAT) : (PL_hints & HINT_NEW_INTEGER) ) {
10498             const char *const key = floatit ? "float" : "integer";
10499             const STRLEN keylen = floatit ? 5 : 7;
10500             sv = S_new_constant(aTHX_ PL_tokenbuf, d - PL_tokenbuf,
10501                                 key, keylen, sv, NULL, NULL, 0);
10502         }
10503         break;
10504
10505     /* if it starts with a v, it could be a v-string */
10506     case 'v':
10507     vstring:
10508                 sv = newSV(5); /* preallocate storage space */
10509                 ENTER_with_name("scan_vstring");
10510                 SAVEFREESV(sv);
10511                 s = scan_vstring(s, PL_bufend, sv);
10512                 SvREFCNT_inc_simple_void_NN(sv);
10513                 LEAVE_with_name("scan_vstring");
10514         break;
10515     }
10516
10517     /* make the op for the constant and return */
10518
10519     if (sv)
10520         lvalp->opval = newSVOP(OP_CONST, 0, sv);
10521     else
10522         lvalp->opval = NULL;
10523
10524     return (char *)s;
10525 }
10526
10527 STATIC char *
10528 S_scan_formline(pTHX_ char *s)
10529 {
10530     char *eol;
10531     char *t;
10532     SV * const stuff = newSVpvs("");
10533     bool needargs = FALSE;
10534     bool eofmt = FALSE;
10535
10536     PERL_ARGS_ASSERT_SCAN_FORMLINE;
10537
10538     while (!needargs) {
10539         if (*s == '.') {
10540             t = s+1;
10541 #ifdef PERL_STRICT_CR
10542             while (SPACE_OR_TAB(*t))
10543                 t++;
10544 #else
10545             while (SPACE_OR_TAB(*t) || *t == '\r')
10546                 t++;
10547 #endif
10548             if (*t == '\n' || t == PL_bufend) {
10549                 eofmt = TRUE;
10550                 break;
10551             }
10552         }
10553         eol = (char *) memchr(s,'\n',PL_bufend-s);
10554         if (!eol++)
10555                 eol = PL_bufend;
10556         if (*s != '#') {
10557             for (t = s; t < eol; t++) {
10558                 if (*t == '~' && t[1] == '~' && SvCUR(stuff)) {
10559                     needargs = FALSE;
10560                     goto enough;        /* ~~ must be first line in formline */
10561                 }
10562                 if (*t == '@' || *t == '^')
10563                     needargs = TRUE;
10564             }
10565             if (eol > s) {
10566                 sv_catpvn(stuff, s, eol-s);
10567 #ifndef PERL_STRICT_CR
10568                 if (eol-s > 1 && eol[-2] == '\r' && eol[-1] == '\n') {
10569                     char *end = SvPVX(stuff) + SvCUR(stuff);
10570                     end[-2] = '\n';
10571                     end[-1] = '\0';
10572                     SvCUR_set(stuff, SvCUR(stuff) - 1);
10573                 }
10574 #endif
10575             }
10576             else
10577               break;
10578         }
10579         s = (char*)eol;
10580         if ((PL_rsfp || PL_parser->filtered)
10581          && PL_parser->form_lex_state == LEX_NORMAL) {
10582             bool got_some;
10583             PL_bufptr = PL_bufend;
10584             COPLINE_INC_WITH_HERELINES;
10585             got_some = lex_next_chunk(0);
10586             CopLINE_dec(PL_curcop);
10587             s = PL_bufptr;
10588             if (!got_some)
10589                 break;
10590         }
10591         incline(s);
10592     }
10593   enough:
10594     if (!SvCUR(stuff) || needargs)
10595         PL_lex_state = PL_parser->form_lex_state;
10596     if (SvCUR(stuff)) {
10597         PL_expect = XSTATE;
10598         if (needargs) {
10599             const char *s2 = s;
10600             while (*s2 == '\r' || *s2 == ' ' || *s2 == '\t' || *s2 == '\f'
10601                 || *s2 == '\v')
10602                 s2++;
10603             if (*s2 == '{') {
10604                 PL_expect = XTERMBLOCK;
10605                 NEXTVAL_NEXTTOKE.ival = 0;
10606                 force_next(DO);
10607             }
10608             NEXTVAL_NEXTTOKE.ival = 0;
10609             force_next(FORMLBRACK);
10610         }
10611         if (!IN_BYTES) {
10612             if (UTF && is_utf8_string((U8*)SvPVX_const(stuff), SvCUR(stuff)))
10613                 SvUTF8_on(stuff);
10614             else if (IN_ENCODING)
10615                 sv_recode_to_utf8(stuff, _get_encoding());
10616         }
10617         NEXTVAL_NEXTTOKE.opval = (OP*)newSVOP(OP_CONST, 0, stuff);
10618         force_next(THING);
10619     }
10620     else {
10621         SvREFCNT_dec(stuff);
10622         if (eofmt)
10623             PL_lex_formbrack = 0;
10624     }
10625     return s;
10626 }
10627
10628 I32
10629 Perl_start_subparse(pTHX_ I32 is_format, U32 flags)
10630 {
10631     const I32 oldsavestack_ix = PL_savestack_ix;
10632     CV* const outsidecv = PL_compcv;
10633
10634     SAVEI32(PL_subline);
10635     save_item(PL_subname);
10636     SAVESPTR(PL_compcv);
10637
10638     PL_compcv = MUTABLE_CV(newSV_type(is_format ? SVt_PVFM : SVt_PVCV));
10639     CvFLAGS(PL_compcv) |= flags;
10640
10641     PL_subline = CopLINE(PL_curcop);
10642     CvPADLIST(PL_compcv) = pad_new(padnew_SAVE|padnew_SAVESUB);
10643     CvOUTSIDE(PL_compcv) = MUTABLE_CV(SvREFCNT_inc_simple(outsidecv));
10644     CvOUTSIDE_SEQ(PL_compcv) = PL_cop_seqmax;
10645     if (outsidecv && CvPADLIST(outsidecv))
10646         CvPADLIST(PL_compcv)->xpadl_outid = CvPADLIST(outsidecv)->xpadl_id;
10647
10648     return oldsavestack_ix;
10649 }
10650
10651 static int
10652 S_yywarn(pTHX_ const char *const s, U32 flags)
10653 {
10654     PERL_ARGS_ASSERT_YYWARN;
10655
10656     PL_in_eval |= EVAL_WARNONLY;
10657     yyerror_pv(s, flags);
10658     return 0;
10659 }
10660
10661 int
10662 Perl_yyerror(pTHX_ const char *const s)
10663 {
10664     PERL_ARGS_ASSERT_YYERROR;
10665     return yyerror_pvn(s, strlen(s), 0);
10666 }
10667
10668 int
10669 Perl_yyerror_pv(pTHX_ const char *const s, U32 flags)
10670 {
10671     PERL_ARGS_ASSERT_YYERROR_PV;
10672     return yyerror_pvn(s, strlen(s), flags);
10673 }
10674
10675 int
10676 Perl_yyerror_pvn(pTHX_ const char *const s, STRLEN len, U32 flags)
10677 {
10678     const char *context = NULL;
10679     int contlen = -1;
10680     SV *msg;
10681     SV * const where_sv = newSVpvs_flags("", SVs_TEMP);
10682     int yychar  = PL_parser->yychar;
10683
10684     PERL_ARGS_ASSERT_YYERROR_PVN;
10685
10686     if (!yychar || (yychar == ';' && !PL_rsfp))
10687         sv_catpvs(where_sv, "at EOF");
10688     else if (PL_oldoldbufptr && PL_bufptr > PL_oldoldbufptr &&
10689       PL_bufptr - PL_oldoldbufptr < 200 && PL_oldoldbufptr != PL_oldbufptr &&
10690       PL_oldbufptr != PL_bufptr) {
10691         /*
10692                 Only for NetWare:
10693                 The code below is removed for NetWare because it abends/crashes on NetWare
10694                 when the script has error such as not having the closing quotes like:
10695                     if ($var eq "value)
10696                 Checking of white spaces is anyway done in NetWare code.
10697         */
10698 #ifndef NETWARE
10699         while (isSPACE(*PL_oldoldbufptr))
10700             PL_oldoldbufptr++;
10701 #endif
10702         context = PL_oldoldbufptr;
10703         contlen = PL_bufptr - PL_oldoldbufptr;
10704     }
10705     else if (PL_oldbufptr && PL_bufptr > PL_oldbufptr &&
10706       PL_bufptr - PL_oldbufptr < 200 && PL_oldbufptr != PL_bufptr) {
10707         /*
10708                 Only for NetWare:
10709                 The code below is removed for NetWare because it abends/crashes on NetWare
10710                 when the script has error such as not having the closing quotes like:
10711                     if ($var eq "value)
10712                 Checking of white spaces is anyway done in NetWare code.
10713         */
10714 #ifndef NETWARE
10715         while (isSPACE(*PL_oldbufptr))
10716             PL_oldbufptr++;
10717 #endif
10718         context = PL_oldbufptr;
10719         contlen = PL_bufptr - PL_oldbufptr;
10720     }
10721     else if (yychar > 255)
10722         sv_catpvs(where_sv, "next token ???");
10723     else if (yychar == YYEMPTY) {
10724         if (PL_lex_state == LEX_NORMAL ||
10725            (PL_lex_state == LEX_KNOWNEXT && PL_lex_defer == LEX_NORMAL))
10726             sv_catpvs(where_sv, "at end of line");
10727         else if (PL_lex_inpat)
10728             sv_catpvs(where_sv, "within pattern");
10729         else
10730             sv_catpvs(where_sv, "within string");
10731     }
10732     else {
10733         sv_catpvs(where_sv, "next char ");
10734         if (yychar < 32)
10735             Perl_sv_catpvf(aTHX_ where_sv, "^%c", toCTRL(yychar));
10736         else if (isPRINT_LC(yychar)) {
10737             const char string = yychar;
10738             sv_catpvn(where_sv, &string, 1);
10739         }
10740         else
10741             Perl_sv_catpvf(aTHX_ where_sv, "\\%03o", yychar & 255);
10742     }
10743     msg = newSVpvn_flags(s, len, (flags & SVf_UTF8) | SVs_TEMP);
10744     Perl_sv_catpvf(aTHX_ msg, " at %s line %"IVdf", ",
10745         OutCopFILE(PL_curcop),
10746         (IV)(PL_parser->preambling == NOLINE
10747                ? CopLINE(PL_curcop)
10748                : PL_parser->preambling));
10749     if (context)
10750         Perl_sv_catpvf(aTHX_ msg, "near \"%"UTF8f"\"\n",
10751                              UTF8fARG(UTF, contlen, context));
10752     else
10753         Perl_sv_catpvf(aTHX_ msg, "%"SVf"\n", SVfARG(where_sv));
10754     if (PL_multi_start < PL_multi_end && (U32)(CopLINE(PL_curcop) - PL_multi_end) <= 1) {
10755         Perl_sv_catpvf(aTHX_ msg,
10756         "  (Might be a runaway multi-line %c%c string starting on line %"IVdf")\n",
10757                 (int)PL_multi_open,(int)PL_multi_close,(IV)PL_multi_start);
10758         PL_multi_end = 0;
10759     }
10760     if (PL_in_eval & EVAL_WARNONLY) {
10761         PL_in_eval &= ~EVAL_WARNONLY;
10762         Perl_ck_warner_d(aTHX_ packWARN(WARN_SYNTAX), "%"SVf, SVfARG(msg));
10763     }
10764     else
10765         qerror(msg);
10766     if (PL_error_count >= 10) {
10767         SV * errsv;
10768         if (PL_in_eval && ((errsv = ERRSV), SvCUR(errsv)))
10769             Perl_croak(aTHX_ "%"SVf"%s has too many errors.\n",
10770                        SVfARG(errsv), OutCopFILE(PL_curcop));
10771         else
10772             Perl_croak(aTHX_ "%s has too many errors.\n",
10773             OutCopFILE(PL_curcop));
10774     }
10775     PL_in_my = 0;
10776     PL_in_my_stash = NULL;
10777     return 0;
10778 }
10779
10780 STATIC char*
10781 S_swallow_bom(pTHX_ U8 *s)
10782 {
10783     const STRLEN slen = SvCUR(PL_linestr);
10784
10785     PERL_ARGS_ASSERT_SWALLOW_BOM;
10786
10787     switch (s[0]) {
10788     case 0xFF:
10789         if (s[1] == 0xFE) {
10790             /* UTF-16 little-endian? (or UTF-32LE?) */
10791             if (s[2] == 0 && s[3] == 0)  /* UTF-32 little-endian */
10792                 /* diag_listed_as: Unsupported script encoding %s */
10793                 Perl_croak(aTHX_ "Unsupported script encoding UTF-32LE");
10794 #ifndef PERL_NO_UTF16_FILTER
10795             if (DEBUG_p_TEST || DEBUG_T_TEST) PerlIO_printf(Perl_debug_log, "UTF-16LE script encoding (BOM)\n");
10796             s += 2;
10797             if (PL_bufend > (char*)s) {
10798                 s = add_utf16_textfilter(s, TRUE);
10799             }
10800 #else
10801             /* diag_listed_as: Unsupported script encoding %s */
10802             Perl_croak(aTHX_ "Unsupported script encoding UTF-16LE");
10803 #endif
10804         }
10805         break;
10806     case 0xFE:
10807         if (s[1] == 0xFF) {   /* UTF-16 big-endian? */
10808 #ifndef PERL_NO_UTF16_FILTER
10809             if (DEBUG_p_TEST || DEBUG_T_TEST) PerlIO_printf(Perl_debug_log, "UTF-16BE script encoding (BOM)\n");
10810             s += 2;
10811             if (PL_bufend > (char *)s) {
10812                 s = add_utf16_textfilter(s, FALSE);
10813             }
10814 #else
10815             /* diag_listed_as: Unsupported script encoding %s */
10816             Perl_croak(aTHX_ "Unsupported script encoding UTF-16BE");
10817 #endif
10818         }
10819         break;
10820     case BOM_UTF8_FIRST_BYTE: {
10821         const STRLEN len = sizeof(BOM_UTF8_TAIL) - 1; /* Exclude trailing NUL */
10822         if (slen > len && memEQ(s+1, BOM_UTF8_TAIL, len)) {
10823             if (DEBUG_p_TEST || DEBUG_T_TEST) PerlIO_printf(Perl_debug_log, "UTF-8 script encoding (BOM)\n");
10824             s += len + 1;                      /* UTF-8 */
10825         }
10826         break;
10827     }
10828     case 0:
10829         if (slen > 3) {
10830              if (s[1] == 0) {
10831                   if (s[2] == 0xFE && s[3] == 0xFF) {
10832                        /* UTF-32 big-endian */
10833                        /* diag_listed_as: Unsupported script encoding %s */
10834                        Perl_croak(aTHX_ "Unsupported script encoding UTF-32BE");
10835                   }
10836              }
10837              else if (s[2] == 0 && s[3] != 0) {
10838                   /* Leading bytes
10839                    * 00 xx 00 xx
10840                    * are a good indicator of UTF-16BE. */
10841 #ifndef PERL_NO_UTF16_FILTER
10842                   if (DEBUG_p_TEST || DEBUG_T_TEST) PerlIO_printf(Perl_debug_log, "UTF-16BE script encoding (no BOM)\n");
10843                   s = add_utf16_textfilter(s, FALSE);
10844 #else
10845                   /* diag_listed_as: Unsupported script encoding %s */
10846                   Perl_croak(aTHX_ "Unsupported script encoding UTF-16BE");
10847 #endif
10848              }
10849         }
10850         break;
10851
10852     default:
10853          if (slen > 3 && s[1] == 0 && s[2] != 0 && s[3] == 0) {
10854                   /* Leading bytes
10855                    * xx 00 xx 00
10856                    * are a good indicator of UTF-16LE. */
10857 #ifndef PERL_NO_UTF16_FILTER
10858               if (DEBUG_p_TEST || DEBUG_T_TEST) PerlIO_printf(Perl_debug_log, "UTF-16LE script encoding (no BOM)\n");
10859               s = add_utf16_textfilter(s, TRUE);
10860 #else
10861               /* diag_listed_as: Unsupported script encoding %s */
10862               Perl_croak(aTHX_ "Unsupported script encoding UTF-16LE");
10863 #endif
10864          }
10865     }
10866     return (char*)s;
10867 }
10868
10869
10870 #ifndef PERL_NO_UTF16_FILTER
10871 static I32
10872 S_utf16_textfilter(pTHX_ int idx, SV *sv, int maxlen)
10873 {
10874     SV *const filter = FILTER_DATA(idx);
10875     /* We re-use this each time round, throwing the contents away before we
10876        return.  */
10877     SV *const utf16_buffer = MUTABLE_SV(IoTOP_GV(filter));
10878     SV *const utf8_buffer = filter;
10879     IV status = IoPAGE(filter);
10880     const bool reverse = cBOOL(IoLINES(filter));
10881     I32 retval;
10882
10883     PERL_ARGS_ASSERT_UTF16_TEXTFILTER;
10884
10885     /* As we're automatically added, at the lowest level, and hence only called
10886        from this file, we can be sure that we're not called in block mode. Hence
10887        don't bother writing code to deal with block mode.  */
10888     if (maxlen) {
10889         Perl_croak(aTHX_ "panic: utf16_textfilter called in block mode (for %d characters)", maxlen);
10890     }
10891     if (status < 0) {
10892         Perl_croak(aTHX_ "panic: utf16_textfilter called after error (status=%"IVdf")", status);
10893     }
10894     DEBUG_P(PerlIO_printf(Perl_debug_log,
10895                           "utf16_textfilter(%p,%ce): idx=%d maxlen=%d status=%"IVdf" utf16=%"UVuf" utf8=%"UVuf"\n",
10896                           FPTR2DPTR(void *, S_utf16_textfilter),
10897                           reverse ? 'l' : 'b', idx, maxlen, status,
10898                           (UV)SvCUR(utf16_buffer), (UV)SvCUR(utf8_buffer)));
10899
10900     while (1) {
10901         STRLEN chars;
10902         STRLEN have;
10903         I32 newlen;
10904         U8 *end;
10905         /* First, look in our buffer of existing UTF-8 data:  */
10906         char *nl = (char *)memchr(SvPVX(utf8_buffer), '\n', SvCUR(utf8_buffer));
10907
10908         if (nl) {
10909             ++nl;
10910         } else if (status == 0) {
10911             /* EOF */
10912             IoPAGE(filter) = 0;
10913             nl = SvEND(utf8_buffer);
10914         }
10915         if (nl) {
10916             STRLEN got = nl - SvPVX(utf8_buffer);
10917             /* Did we have anything to append?  */
10918             retval = got != 0;
10919             sv_catpvn(sv, SvPVX(utf8_buffer), got);
10920             /* Everything else in this code works just fine if SVp_POK isn't
10921                set.  This, however, needs it, and we need it to work, else
10922                we loop infinitely because the buffer is never consumed.  */
10923             sv_chop(utf8_buffer, nl);
10924             break;
10925         }
10926
10927         /* OK, not a complete line there, so need to read some more UTF-16.
10928            Read an extra octect if the buffer currently has an odd number. */
10929         while (1) {
10930             if (status <= 0)
10931                 break;
10932             if (SvCUR(utf16_buffer) >= 2) {
10933                 /* Location of the high octet of the last complete code point.
10934                    Gosh, UTF-16 is a pain. All the benefits of variable length,
10935                    *coupled* with all the benefits of partial reads and
10936                    endianness.  */
10937                 const U8 *const last_hi = (U8*)SvPVX(utf16_buffer)
10938                     + ((SvCUR(utf16_buffer) & ~1) - (reverse ? 1 : 2));
10939
10940                 if (*last_hi < 0xd8 || *last_hi > 0xdb) {
10941                     break;
10942                 }
10943
10944                 /* We have the first half of a surrogate. Read more.  */
10945                 DEBUG_P(PerlIO_printf(Perl_debug_log, "utf16_textfilter partial surrogate detected at %p\n", last_hi));
10946             }
10947
10948             status = FILTER_READ(idx + 1, utf16_buffer,
10949                                  160 + (SvCUR(utf16_buffer) & 1));
10950             DEBUG_P(PerlIO_printf(Perl_debug_log, "utf16_textfilter status=%"IVdf" SvCUR(sv)=%"UVuf"\n", status, (UV)SvCUR(utf16_buffer)));
10951             DEBUG_P({ sv_dump(utf16_buffer); sv_dump(utf8_buffer);});
10952             if (status < 0) {
10953                 /* Error */
10954                 IoPAGE(filter) = status;
10955                 return status;
10956             }
10957         }
10958
10959         chars = SvCUR(utf16_buffer) >> 1;
10960         have = SvCUR(utf8_buffer);
10961         SvGROW(utf8_buffer, have + chars * 3 + 1);
10962
10963         if (reverse) {
10964             end = utf16_to_utf8_reversed((U8*)SvPVX(utf16_buffer),
10965                                          (U8*)SvPVX_const(utf8_buffer) + have,
10966                                          chars * 2, &newlen);
10967         } else {
10968             end = utf16_to_utf8((U8*)SvPVX(utf16_buffer),
10969                                 (U8*)SvPVX_const(utf8_buffer) + have,
10970                                 chars * 2, &newlen);
10971         }
10972         SvCUR_set(utf8_buffer, have + newlen);
10973         *end = '\0';
10974
10975         /* No need to keep this SV "well-formed" with a '\0' after the end, as
10976            it's private to us, and utf16_to_utf8{,reversed} take a
10977            (pointer,length) pair, rather than a NUL-terminated string.  */
10978         if(SvCUR(utf16_buffer) & 1) {
10979             *SvPVX(utf16_buffer) = SvEND(utf16_buffer)[-1];
10980             SvCUR_set(utf16_buffer, 1);
10981         } else {
10982             SvCUR_set(utf16_buffer, 0);
10983         }
10984     }
10985     DEBUG_P(PerlIO_printf(Perl_debug_log,
10986                           "utf16_textfilter: returns, status=%"IVdf" utf16=%"UVuf" utf8=%"UVuf"\n",
10987                           status,
10988                           (UV)SvCUR(utf16_buffer), (UV)SvCUR(utf8_buffer)));
10989     DEBUG_P({ sv_dump(utf8_buffer); sv_dump(sv);});
10990     return retval;
10991 }
10992
10993 static U8 *
10994 S_add_utf16_textfilter(pTHX_ U8 *const s, bool reversed)
10995 {
10996     SV *filter = filter_add(S_utf16_textfilter, NULL);
10997
10998     PERL_ARGS_ASSERT_ADD_UTF16_TEXTFILTER;
10999
11000     IoTOP_GV(filter) = MUTABLE_GV(newSVpvn((char *)s, PL_bufend - (char*)s));
11001     sv_setpvs(filter, "");
11002     IoLINES(filter) = reversed;
11003     IoPAGE(filter) = 1; /* Not EOF */
11004
11005     /* Sadly, we have to return a valid pointer, come what may, so we have to
11006        ignore any error return from this.  */
11007     SvCUR_set(PL_linestr, 0);
11008     if (FILTER_READ(0, PL_linestr, 0)) {
11009         SvUTF8_on(PL_linestr);
11010     } else {
11011         SvUTF8_on(PL_linestr);
11012     }
11013     PL_bufend = SvEND(PL_linestr);
11014     return (U8*)SvPVX(PL_linestr);
11015 }
11016 #endif
11017
11018 /*
11019 Returns a pointer to the next character after the parsed
11020 vstring, as well as updating the passed in sv.
11021
11022 Function must be called like
11023
11024         sv = sv_2mortal(newSV(5));
11025         s = scan_vstring(s,e,sv);
11026
11027 where s and e are the start and end of the string.
11028 The sv should already be large enough to store the vstring
11029 passed in, for performance reasons.
11030
11031 This function may croak if fatal warnings are enabled in the
11032 calling scope, hence the sv_2mortal in the example (to prevent
11033 a leak).  Make sure to do SvREFCNT_inc afterwards if you use
11034 sv_2mortal.
11035
11036 */
11037
11038 char *
11039 Perl_scan_vstring(pTHX_ const char *s, const char *const e, SV *sv)
11040 {
11041     const char *pos = s;
11042     const char *start = s;
11043
11044     PERL_ARGS_ASSERT_SCAN_VSTRING;
11045
11046     if (*pos == 'v') pos++;  /* get past 'v' */
11047     while (pos < e && (isDIGIT(*pos) || *pos == '_'))
11048         pos++;
11049     if ( *pos != '.') {
11050         /* this may not be a v-string if followed by => */
11051         const char *next = pos;
11052         while (next < e && isSPACE(*next))
11053             ++next;
11054         if ((e - next) >= 2 && *next == '=' && next[1] == '>' ) {
11055             /* return string not v-string */
11056             sv_setpvn(sv,(char *)s,pos-s);
11057             return (char *)pos;
11058         }
11059     }
11060
11061     if (!isALPHA(*pos)) {
11062         U8 tmpbuf[UTF8_MAXBYTES+1];
11063
11064         if (*s == 'v')
11065             s++;  /* get past 'v' */
11066
11067         sv_setpvs(sv, "");
11068
11069         for (;;) {
11070             /* this is atoi() that tolerates underscores */
11071             U8 *tmpend;
11072             UV rev = 0;
11073             const char *end = pos;
11074             UV mult = 1;
11075             while (--end >= s) {
11076                 if (*end != '_') {
11077                     const UV orev = rev;
11078                     rev += (*end - '0') * mult;
11079                     mult *= 10;
11080                     if (orev > rev)
11081                         /* diag_listed_as: Integer overflow in %s number */
11082                         Perl_ck_warner_d(aTHX_ packWARN(WARN_OVERFLOW),
11083                                          "Integer overflow in decimal number");
11084                 }
11085             }
11086 #ifdef EBCDIC
11087             if (rev > 0x7FFFFFFF)
11088                  Perl_croak(aTHX_ "In EBCDIC the v-string components cannot exceed 2147483647");
11089 #endif
11090             /* Append native character for the rev point */
11091             tmpend = uvchr_to_utf8(tmpbuf, rev);
11092             sv_catpvn(sv, (const char*)tmpbuf, tmpend - tmpbuf);
11093             if (!UVCHR_IS_INVARIANT(rev))
11094                  SvUTF8_on(sv);
11095             if (pos + 1 < e && *pos == '.' && isDIGIT(pos[1]))
11096                  s = ++pos;
11097             else {
11098                  s = pos;
11099                  break;
11100             }
11101             while (pos < e && (isDIGIT(*pos) || *pos == '_'))
11102                  pos++;
11103         }
11104         SvPOK_on(sv);
11105         sv_magic(sv,NULL,PERL_MAGIC_vstring,(const char*)start, pos-start);
11106         SvRMAGICAL_on(sv);
11107     }
11108     return (char *)s;
11109 }
11110
11111 int
11112 Perl_keyword_plugin_standard(pTHX_
11113         char *keyword_ptr, STRLEN keyword_len, OP **op_ptr)
11114 {
11115     PERL_ARGS_ASSERT_KEYWORD_PLUGIN_STANDARD;
11116     PERL_UNUSED_CONTEXT;
11117     PERL_UNUSED_ARG(keyword_ptr);
11118     PERL_UNUSED_ARG(keyword_len);
11119     PERL_UNUSED_ARG(op_ptr);
11120     return KEYWORD_PLUGIN_DECLINE;
11121 }
11122
11123 #define parse_recdescent(g,p) S_parse_recdescent(aTHX_ g,p)
11124 static void
11125 S_parse_recdescent(pTHX_ int gramtype, I32 fakeeof)
11126 {
11127     SAVEI32(PL_lex_brackets);
11128     if (PL_lex_brackets > 100)
11129         Renew(PL_lex_brackstack, PL_lex_brackets + 10, char);
11130     PL_lex_brackstack[PL_lex_brackets++] = XFAKEEOF;
11131     SAVEI32(PL_lex_allbrackets);
11132     PL_lex_allbrackets = 0;
11133     SAVEI8(PL_lex_fakeeof);
11134     PL_lex_fakeeof = (U8)fakeeof;
11135     if(yyparse(gramtype) && !PL_parser->error_count)
11136         qerror(Perl_mess(aTHX_ "Parse error"));
11137 }
11138
11139 #define parse_recdescent_for_op(g,p) S_parse_recdescent_for_op(aTHX_ g,p)
11140 static OP *
11141 S_parse_recdescent_for_op(pTHX_ int gramtype, I32 fakeeof)
11142 {
11143     OP *o;
11144     ENTER;
11145     SAVEVPTR(PL_eval_root);
11146     PL_eval_root = NULL;
11147     parse_recdescent(gramtype, fakeeof);
11148     o = PL_eval_root;
11149     LEAVE;
11150     return o;
11151 }
11152
11153 #define parse_expr(p,f) S_parse_expr(aTHX_ p,f)
11154 static OP *
11155 S_parse_expr(pTHX_ I32 fakeeof, U32 flags)
11156 {
11157     OP *exprop;
11158     if (flags & ~PARSE_OPTIONAL)
11159         Perl_croak(aTHX_ "Parsing code internal error (%s)", "parse_expr");
11160     exprop = parse_recdescent_for_op(GRAMEXPR, fakeeof);
11161     if (!exprop && !(flags & PARSE_OPTIONAL)) {
11162         if (!PL_parser->error_count)
11163             qerror(Perl_mess(aTHX_ "Parse error"));
11164         exprop = newOP(OP_NULL, 0);
11165     }
11166     return exprop;
11167 }
11168
11169 /*
11170 =for apidoc Amx|OP *|parse_arithexpr|U32 flags
11171
11172 Parse a Perl arithmetic expression.  This may contain operators of precedence
11173 down to the bit shift operators.  The expression must be followed (and thus
11174 terminated) either by a comparison or lower-precedence operator or by
11175 something that would normally terminate an expression such as semicolon.
11176 If I<flags> includes C<PARSE_OPTIONAL> then the expression is optional,
11177 otherwise it is mandatory.  It is up to the caller to ensure that the
11178 dynamic parser state (L</PL_parser> et al) is correctly set to reflect
11179 the source of the code to be parsed and the lexical context for the
11180 expression.
11181
11182 The op tree representing the expression is returned.  If an optional
11183 expression is absent, a null pointer is returned, otherwise the pointer
11184 will be non-null.
11185
11186 If an error occurs in parsing or compilation, in most cases a valid op
11187 tree is returned anyway.  The error is reflected in the parser state,
11188 normally resulting in a single exception at the top level of parsing
11189 which covers all the compilation errors that occurred.  Some compilation
11190 errors, however, will throw an exception immediately.
11191
11192 =cut
11193 */
11194
11195 OP *
11196 Perl_parse_arithexpr(pTHX_ U32 flags)
11197 {
11198     return parse_expr(LEX_FAKEEOF_COMPARE, flags);
11199 }
11200
11201 /*
11202 =for apidoc Amx|OP *|parse_termexpr|U32 flags
11203
11204 Parse a Perl term expression.  This may contain operators of precedence
11205 down to the assignment operators.  The expression must be followed (and thus
11206 terminated) either by a comma or lower-precedence operator or by
11207 something that would normally terminate an expression such as semicolon.
11208 If I<flags> includes C<PARSE_OPTIONAL> then the expression is optional,
11209 otherwise it is mandatory.  It is up to the caller to ensure that the
11210 dynamic parser state (L</PL_parser> et al) is correctly set to reflect
11211 the source of the code to be parsed and the lexical context for the
11212 expression.
11213
11214 The op tree representing the expression is returned.  If an optional
11215 expression is absent, a null pointer is returned, otherwise the pointer
11216 will be non-null.
11217
11218 If an error occurs in parsing or compilation, in most cases a valid op
11219 tree is returned anyway.  The error is reflected in the parser state,
11220 normally resulting in a single exception at the top level of parsing
11221 which covers all the compilation errors that occurred.  Some compilation
11222 errors, however, will throw an exception immediately.
11223
11224 =cut
11225 */
11226
11227 OP *
11228 Perl_parse_termexpr(pTHX_ U32 flags)
11229 {
11230     return parse_expr(LEX_FAKEEOF_COMMA, flags);
11231 }
11232
11233 /*
11234 =for apidoc Amx|OP *|parse_listexpr|U32 flags
11235
11236 Parse a Perl list expression.  This may contain operators of precedence
11237 down to the comma operator.  The expression must be followed (and thus
11238 terminated) either by a low-precedence logic operator such as C<or> or by
11239 something that would normally terminate an expression such as semicolon.
11240 If I<flags> includes C<PARSE_OPTIONAL> then the expression is optional,
11241 otherwise it is mandatory.  It is up to the caller to ensure that the
11242 dynamic parser state (L</PL_parser> et al) is correctly set to reflect
11243 the source of the code to be parsed and the lexical context for the
11244 expression.
11245
11246 The op tree representing the expression is returned.  If an optional
11247 expression is absent, a null pointer is returned, otherwise the pointer
11248 will be non-null.
11249
11250 If an error occurs in parsing or compilation, in most cases a valid op
11251 tree is returned anyway.  The error is reflected in the parser state,
11252 normally resulting in a single exception at the top level of parsing
11253 which covers all the compilation errors that occurred.  Some compilation
11254 errors, however, will throw an exception immediately.
11255
11256 =cut
11257 */
11258
11259 OP *
11260 Perl_parse_listexpr(pTHX_ U32 flags)
11261 {
11262     return parse_expr(LEX_FAKEEOF_LOWLOGIC, flags);
11263 }
11264
11265 /*
11266 =for apidoc Amx|OP *|parse_fullexpr|U32 flags
11267
11268 Parse a single complete Perl expression.  This allows the full
11269 expression grammar, including the lowest-precedence operators such
11270 as C<or>.  The expression must be followed (and thus terminated) by a
11271 token that an expression would normally be terminated by: end-of-file,
11272 closing bracketing punctuation, semicolon, or one of the keywords that
11273 signals a postfix expression-statement modifier.  If I<flags> includes
11274 C<PARSE_OPTIONAL> then the expression is optional, otherwise it is
11275 mandatory.  It is up to the caller to ensure that the dynamic parser
11276 state (L</PL_parser> et al) is correctly set to reflect the source of
11277 the code to be parsed and the lexical context for the expression.
11278
11279 The op tree representing the expression is returned.  If an optional
11280 expression is absent, a null pointer is returned, otherwise the pointer
11281 will be non-null.
11282
11283 If an error occurs in parsing or compilation, in most cases a valid op
11284 tree is returned anyway.  The error is reflected in the parser state,
11285 normally resulting in a single exception at the top level of parsing
11286 which covers all the compilation errors that occurred.  Some compilation
11287 errors, however, will throw an exception immediately.
11288
11289 =cut
11290 */
11291
11292 OP *
11293 Perl_parse_fullexpr(pTHX_ U32 flags)
11294 {
11295     return parse_expr(LEX_FAKEEOF_NONEXPR, flags);
11296 }
11297
11298 /*
11299 =for apidoc Amx|OP *|parse_block|U32 flags
11300
11301 Parse a single complete Perl code block.  This consists of an opening
11302 brace, a sequence of statements, and a closing brace.  The block
11303 constitutes a lexical scope, so C<my> variables and various compile-time
11304 effects can be contained within it.  It is up to the caller to ensure
11305 that the dynamic parser state (L</PL_parser> et al) is correctly set to
11306 reflect the source of the code to be parsed and the lexical context for
11307 the statement.
11308
11309 The op tree representing the code block is returned.  This is always a
11310 real op, never a null pointer.  It will normally be a C<lineseq> list,
11311 including C<nextstate> or equivalent ops.  No ops to construct any kind
11312 of runtime scope are included by virtue of it being a block.
11313
11314 If an error occurs in parsing or compilation, in most cases a valid op
11315 tree (most likely null) is returned anyway.  The error is reflected in
11316 the parser state, normally resulting in a single exception at the top
11317 level of parsing which covers all the compilation errors that occurred.
11318 Some compilation errors, however, will throw an exception immediately.
11319
11320 The I<flags> parameter is reserved for future use, and must always
11321 be zero.
11322
11323 =cut
11324 */
11325
11326 OP *
11327 Perl_parse_block(pTHX_ U32 flags)
11328 {
11329     if (flags)
11330         Perl_croak(aTHX_ "Parsing code internal error (%s)", "parse_block");
11331     return parse_recdescent_for_op(GRAMBLOCK, LEX_FAKEEOF_NEVER);
11332 }
11333
11334 /*
11335 =for apidoc Amx|OP *|parse_barestmt|U32 flags
11336
11337 Parse a single unadorned Perl statement.  This may be a normal imperative
11338 statement or a declaration that has compile-time effect.  It does not
11339 include any label or other affixture.  It is up to the caller to ensure
11340 that the dynamic parser state (L</PL_parser> et al) is correctly set to
11341 reflect the source of the code to be parsed and the lexical context for
11342 the statement.
11343
11344 The op tree representing the statement is returned.  This may be a
11345 null pointer if the statement is null, for example if it was actually
11346 a subroutine definition (which has compile-time side effects).  If not
11347 null, it will be ops directly implementing the statement, suitable to
11348 pass to L</newSTATEOP>.  It will not normally include a C<nextstate> or
11349 equivalent op (except for those embedded in a scope contained entirely
11350 within the statement).
11351
11352 If an error occurs in parsing or compilation, in most cases a valid op
11353 tree (most likely null) is returned anyway.  The error is reflected in
11354 the parser state, normally resulting in a single exception at the top
11355 level of parsing which covers all the compilation errors that occurred.
11356 Some compilation errors, however, will throw an exception immediately.
11357
11358 The I<flags> parameter is reserved for future use, and must always
11359 be zero.
11360
11361 =cut
11362 */
11363
11364 OP *
11365 Perl_parse_barestmt(pTHX_ U32 flags)
11366 {
11367     if (flags)
11368         Perl_croak(aTHX_ "Parsing code internal error (%s)", "parse_barestmt");
11369     return parse_recdescent_for_op(GRAMBARESTMT, LEX_FAKEEOF_NEVER);
11370 }
11371
11372 /*
11373 =for apidoc Amx|SV *|parse_label|U32 flags
11374
11375 Parse a single label, possibly optional, of the type that may prefix a
11376 Perl statement.  It is up to the caller to ensure that the dynamic parser
11377 state (L</PL_parser> et al) is correctly set to reflect the source of
11378 the code to be parsed.  If I<flags> includes C<PARSE_OPTIONAL> then the
11379 label is optional, otherwise it is mandatory.
11380
11381 The name of the label is returned in the form of a fresh scalar.  If an
11382 optional label is absent, a null pointer is returned.
11383
11384 If an error occurs in parsing, which can only occur if the label is
11385 mandatory, a valid label is returned anyway.  The error is reflected in
11386 the parser state, normally resulting in a single exception at the top
11387 level of parsing which covers all the compilation errors that occurred.
11388
11389 =cut
11390 */
11391
11392 SV *
11393 Perl_parse_label(pTHX_ U32 flags)
11394 {
11395     if (flags & ~PARSE_OPTIONAL)
11396         Perl_croak(aTHX_ "Parsing code internal error (%s)", "parse_label");
11397     if (PL_lex_state == LEX_KNOWNEXT) {
11398         PL_parser->yychar = yylex();
11399         if (PL_parser->yychar == LABEL) {
11400             char * const lpv = pl_yylval.pval;
11401             STRLEN llen = strlen(lpv);
11402             PL_parser->yychar = YYEMPTY;
11403             return newSVpvn_flags(lpv, llen, lpv[llen+1] ? SVf_UTF8 : 0);
11404         } else {
11405             yyunlex();
11406             goto no_label;
11407         }
11408     } else {
11409         char *s, *t;
11410         STRLEN wlen, bufptr_pos;
11411         lex_read_space(0);
11412         t = s = PL_bufptr;
11413         if (!isIDFIRST_lazy_if(s, UTF))
11414             goto no_label;
11415         t = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, FALSE, &wlen);
11416         if (word_takes_any_delimeter(s, wlen))
11417             goto no_label;
11418         bufptr_pos = s - SvPVX(PL_linestr);
11419         PL_bufptr = t;
11420         lex_read_space(LEX_KEEP_PREVIOUS);
11421         t = PL_bufptr;
11422         s = SvPVX(PL_linestr) + bufptr_pos;
11423         if (t[0] == ':' && t[1] != ':') {
11424             PL_oldoldbufptr = PL_oldbufptr;
11425             PL_oldbufptr = s;
11426             PL_bufptr = t+1;
11427             return newSVpvn_flags(s, wlen, UTF ? SVf_UTF8 : 0);
11428         } else {
11429             PL_bufptr = s;
11430             no_label:
11431             if (flags & PARSE_OPTIONAL) {
11432                 return NULL;
11433             } else {
11434                 qerror(Perl_mess(aTHX_ "Parse error"));
11435                 return newSVpvs("x");
11436             }
11437         }
11438     }
11439 }
11440
11441 /*
11442 =for apidoc Amx|OP *|parse_fullstmt|U32 flags
11443
11444 Parse a single complete Perl statement.  This may be a normal imperative
11445 statement or a declaration that has compile-time effect, and may include
11446 optional labels.  It is up to the caller to ensure that the dynamic
11447 parser state (L</PL_parser> et al) is correctly set to reflect the source
11448 of the code to be parsed and the lexical context for the statement.
11449
11450 The op tree representing the statement is returned.  This may be a
11451 null pointer if the statement is null, for example if it was actually
11452 a subroutine definition (which has compile-time side effects).  If not
11453 null, it will be the result of a L</newSTATEOP> call, normally including
11454 a C<nextstate> or equivalent op.
11455
11456 If an error occurs in parsing or compilation, in most cases a valid op
11457 tree (most likely null) is returned anyway.  The error is reflected in
11458 the parser state, normally resulting in a single exception at the top
11459 level of parsing which covers all the compilation errors that occurred.
11460 Some compilation errors, however, will throw an exception immediately.
11461
11462 The I<flags> parameter is reserved for future use, and must always
11463 be zero.
11464
11465 =cut
11466 */
11467
11468 OP *
11469 Perl_parse_fullstmt(pTHX_ U32 flags)
11470 {
11471     if (flags)
11472         Perl_croak(aTHX_ "Parsing code internal error (%s)", "parse_fullstmt");
11473     return parse_recdescent_for_op(GRAMFULLSTMT, LEX_FAKEEOF_NEVER);
11474 }
11475
11476 /*
11477 =for apidoc Amx|OP *|parse_stmtseq|U32 flags
11478
11479 Parse a sequence of zero or more Perl statements.  These may be normal
11480 imperative statements, including optional labels, or declarations
11481 that have compile-time effect, or any mixture thereof.  The statement
11482 sequence ends when a closing brace or end-of-file is encountered in a
11483 place where a new statement could have validly started.  It is up to
11484 the caller to ensure that the dynamic parser state (L</PL_parser> et al)
11485 is correctly set to reflect the source of the code to be parsed and the
11486 lexical context for the statements.
11487
11488 The op tree representing the statement sequence is returned.  This may
11489 be a null pointer if the statements were all null, for example if there
11490 were no statements or if there were only subroutine definitions (which
11491 have compile-time side effects).  If not null, it will be a C<lineseq>
11492 list, normally including C<nextstate> or equivalent ops.
11493
11494 If an error occurs in parsing or compilation, in most cases a valid op
11495 tree is returned anyway.  The error is reflected in the parser state,
11496 normally resulting in a single exception at the top level of parsing
11497 which covers all the compilation errors that occurred.  Some compilation
11498 errors, however, will throw an exception immediately.
11499
11500 The I<flags> parameter is reserved for future use, and must always
11501 be zero.
11502
11503 =cut
11504 */
11505
11506 OP *
11507 Perl_parse_stmtseq(pTHX_ U32 flags)
11508 {
11509     OP *stmtseqop;
11510     I32 c;
11511     if (flags)
11512         Perl_croak(aTHX_ "Parsing code internal error (%s)", "parse_stmtseq");
11513     stmtseqop = parse_recdescent_for_op(GRAMSTMTSEQ, LEX_FAKEEOF_CLOSING);
11514     c = lex_peek_unichar(0);
11515     if (c != -1 && c != /*{*/'}')
11516         qerror(Perl_mess(aTHX_ "Parse error"));
11517     return stmtseqop;
11518 }
11519
11520 #define lex_token_boundary() S_lex_token_boundary(aTHX)
11521 static void
11522 S_lex_token_boundary(pTHX)
11523 {
11524     PL_oldoldbufptr = PL_oldbufptr;
11525     PL_oldbufptr = PL_bufptr;
11526 }
11527
11528 #define parse_opt_lexvar() S_parse_opt_lexvar(aTHX)
11529 static OP *
11530 S_parse_opt_lexvar(pTHX)
11531 {
11532     I32 sigil, c;
11533     char *s, *d;
11534     OP *var;
11535     lex_token_boundary();
11536     sigil = lex_read_unichar(0);
11537     if (lex_peek_unichar(0) == '#') {
11538         qerror(Perl_mess(aTHX_ "Parse error"));
11539         return NULL;
11540     }
11541     lex_read_space(0);
11542     c = lex_peek_unichar(0);
11543     if (c == -1 || !(UTF ? isIDFIRST_uni(c) : isIDFIRST_A(c)))
11544         return NULL;
11545     s = PL_bufptr;
11546     d = PL_tokenbuf + 1;
11547     PL_tokenbuf[0] = (char)sigil;
11548     parse_ident(&s, &d, PL_tokenbuf + sizeof(PL_tokenbuf) - 1, 0, cBOOL(UTF));
11549     PL_bufptr = s;
11550     if (d == PL_tokenbuf+1)
11551         return NULL;
11552     var = newOP(sigil == '$' ? OP_PADSV : sigil == '@' ? OP_PADAV : OP_PADHV,
11553                 OPf_MOD | (OPpLVAL_INTRO<<8));
11554     var->op_targ = allocmy(PL_tokenbuf, d - PL_tokenbuf, UTF ? SVf_UTF8 : 0);
11555     return var;
11556 }
11557
11558 OP *
11559 Perl_parse_subsignature(pTHX)
11560 {
11561     I32 c;
11562     int prev_type = 0, pos = 0, min_arity = 0, max_arity = 0;
11563     OP *initops = NULL;
11564     lex_read_space(0);
11565     c = lex_peek_unichar(0);
11566     while (c != /*(*/')') {
11567         switch (c) {
11568             case '$': {
11569                 OP *var, *expr;
11570                 if (prev_type == 2)
11571                     qerror(Perl_mess(aTHX_ "Slurpy parameter not last"));
11572                 var = parse_opt_lexvar();
11573                 expr = var ?
11574                     newBINOP(OP_AELEM, 0,
11575                         ref(newUNOP(OP_RV2AV, 0, newGVOP(OP_GV, 0, PL_defgv)),
11576                             OP_RV2AV),
11577                         newSVOP(OP_CONST, 0, newSViv(pos))) :
11578                     NULL;
11579                 lex_read_space(0);
11580                 c = lex_peek_unichar(0);
11581                 if (c == '=') {
11582                     lex_token_boundary();
11583                     lex_read_unichar(0);
11584                     lex_read_space(0);
11585                     c = lex_peek_unichar(0);
11586                     if (c == ',' || c == /*(*/')') {
11587                         if (var)
11588                             qerror(Perl_mess(aTHX_ "Optional parameter "
11589                                     "lacks default expression"));
11590                     } else {
11591                         OP *defexpr = parse_termexpr(0);
11592                         if (defexpr->op_type == OP_UNDEF &&
11593                                 !(defexpr->op_flags & OPf_KIDS)) {
11594                             op_free(defexpr);
11595                         } else {
11596                             OP *ifop = 
11597                                 newBINOP(OP_GE, 0,
11598                                     scalar(newUNOP(OP_RV2AV, 0,
11599                                             newGVOP(OP_GV, 0, PL_defgv))),
11600                                     newSVOP(OP_CONST, 0, newSViv(pos+1)));
11601                             expr = var ?
11602                                 newCONDOP(0, ifop, expr, defexpr) :
11603                                 newLOGOP(OP_OR, 0, ifop, defexpr);
11604                         }
11605                     }
11606                     prev_type = 1;
11607                 } else {
11608                     if (prev_type == 1)
11609                         qerror(Perl_mess(aTHX_ "Mandatory parameter "
11610                                 "follows optional parameter"));
11611                     prev_type = 0;
11612                     min_arity = pos + 1;
11613                 }
11614                 if (var) expr = newASSIGNOP(OPf_STACKED, var, 0, expr);
11615                 if (expr)
11616                     initops = op_append_list(OP_LINESEQ, initops,
11617                                 newSTATEOP(0, NULL, expr));
11618                 max_arity = ++pos;
11619             } break;
11620             case '@':
11621             case '%': {
11622                 OP *var;
11623                 if (prev_type == 2)
11624                     qerror(Perl_mess(aTHX_ "Slurpy parameter not last"));
11625                 var = parse_opt_lexvar();
11626                 if (c == '%') {
11627                     OP *chkop = newLOGOP((pos & 1) ? OP_OR : OP_AND, 0,
11628                             newBINOP(OP_BIT_AND, 0,
11629                                 scalar(newUNOP(OP_RV2AV, 0,
11630                                     newGVOP(OP_GV, 0, PL_defgv))),
11631                                 newSVOP(OP_CONST, 0, newSViv(1))),
11632                             op_convert_list(OP_DIE, 0,
11633                                 op_convert_list(OP_SPRINTF, 0,
11634                                     op_append_list(OP_LIST,
11635                                         newSVOP(OP_CONST, 0,
11636                                             newSVpvs("Odd name/value argument for subroutine at %s line %d.\n")),
11637                                         newSLICEOP(0,
11638                                             op_append_list(OP_LIST,
11639                                                 newSVOP(OP_CONST, 0, newSViv(1)),
11640                                                 newSVOP(OP_CONST, 0, newSViv(2))),
11641                                             newOP(OP_CALLER, 0))))));
11642                     if (pos != min_arity)
11643                         chkop = newLOGOP(OP_AND, 0,
11644                                     newBINOP(OP_GT, 0,
11645                                         scalar(newUNOP(OP_RV2AV, 0,
11646                                             newGVOP(OP_GV, 0, PL_defgv))),
11647                                         newSVOP(OP_CONST, 0, newSViv(pos))),
11648                                     chkop);
11649                     initops = op_append_list(OP_LINESEQ,
11650                                 newSTATEOP(0, NULL, chkop),
11651                                 initops);
11652                 }
11653                 if (var) {
11654                     OP *slice = pos ?
11655                         op_prepend_elem(OP_ASLICE,
11656                             newOP(OP_PUSHMARK, 0),
11657                             newLISTOP(OP_ASLICE, 0,
11658                                 list(newRANGE(0,
11659                                     newSVOP(OP_CONST, 0, newSViv(pos)),
11660                                     newUNOP(OP_AV2ARYLEN, 0,
11661                                         ref(newUNOP(OP_RV2AV, 0,
11662                                                 newGVOP(OP_GV, 0, PL_defgv)),
11663                                             OP_AV2ARYLEN)))),
11664                                 ref(newUNOP(OP_RV2AV, 0,
11665                                         newGVOP(OP_GV, 0, PL_defgv)),
11666                                     OP_ASLICE))) :
11667                         newUNOP(OP_RV2AV, 0, newGVOP(OP_GV, 0, PL_defgv));
11668                     initops = op_append_list(OP_LINESEQ, initops,
11669                         newSTATEOP(0, NULL,
11670                             newASSIGNOP(OPf_STACKED, var, 0, slice)));
11671                 }
11672                 prev_type = 2;
11673                 max_arity = -1;
11674             } break;
11675             default:
11676                 parse_error:
11677                 qerror(Perl_mess(aTHX_ "Parse error"));
11678                 return NULL;
11679         }
11680         lex_read_space(0);
11681         c = lex_peek_unichar(0);
11682         switch (c) {
11683             case /*(*/')': break;
11684             case ',':
11685                 do {
11686                     lex_token_boundary();
11687                     lex_read_unichar(0);
11688                     lex_read_space(0);
11689                     c = lex_peek_unichar(0);
11690                 } while (c == ',');
11691                 break;
11692             default:
11693                 goto parse_error;
11694         }
11695     }
11696     if (min_arity != 0) {
11697         initops = op_append_list(OP_LINESEQ,
11698             newSTATEOP(0, NULL,
11699                 newLOGOP(OP_OR, 0,
11700                     newBINOP(OP_GE, 0,
11701                         scalar(newUNOP(OP_RV2AV, 0,
11702                             newGVOP(OP_GV, 0, PL_defgv))),
11703                         newSVOP(OP_CONST, 0, newSViv(min_arity))),
11704                     op_convert_list(OP_DIE, 0,
11705                         op_convert_list(OP_SPRINTF, 0,
11706                             op_append_list(OP_LIST,
11707                                 newSVOP(OP_CONST, 0,
11708                                     newSVpvs("Too few arguments for subroutine at %s line %d.\n")),
11709                                 newSLICEOP(0,
11710                                     op_append_list(OP_LIST,
11711                                         newSVOP(OP_CONST, 0, newSViv(1)),
11712                                         newSVOP(OP_CONST, 0, newSViv(2))),
11713                                     newOP(OP_CALLER, 0))))))),
11714             initops);
11715     }
11716     if (max_arity != -1) {
11717         initops = op_append_list(OP_LINESEQ,
11718             newSTATEOP(0, NULL,
11719                 newLOGOP(OP_OR, 0,
11720                     newBINOP(OP_LE, 0,
11721                         scalar(newUNOP(OP_RV2AV, 0,
11722                             newGVOP(OP_GV, 0, PL_defgv))),
11723                         newSVOP(OP_CONST, 0, newSViv(max_arity))),
11724                     op_convert_list(OP_DIE, 0,
11725                         op_convert_list(OP_SPRINTF, 0,
11726                             op_append_list(OP_LIST,
11727                                 newSVOP(OP_CONST, 0,
11728                                     newSVpvs("Too many arguments for subroutine at %s line %d.\n")),
11729                                 newSLICEOP(0,
11730                                     op_append_list(OP_LIST,
11731                                         newSVOP(OP_CONST, 0, newSViv(1)),
11732                                         newSVOP(OP_CONST, 0, newSViv(2))),
11733                                     newOP(OP_CALLER, 0))))))),
11734             initops);
11735     }
11736     return initops;
11737 }
11738
11739 /*
11740  * ex: set ts=8 sts=4 sw=4 et:
11741  */