This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Avoid redundant copies in string evals
[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
27 This is the lower layer of the Perl parser, managing characters and tokens.
28
29 =for apidoc AmU|yy_parser *|PL_parser
30
31 Pointer to a structure encapsulating the state of the parsing operation
32 currently in progress.  The pointer can be locally changed to perform
33 a nested parse without interfering with the state of an outer parse.
34 Individual members of C<PL_parser> have their own documentation.
35
36 =cut
37 */
38
39 #include "EXTERN.h"
40 #define PERL_IN_TOKE_C
41 #include "perl.h"
42 #include "dquote_static.c"
43
44 #define new_constant(a,b,c,d,e,f,g)     \
45         S_new_constant(aTHX_ a,b,STR_WITH_LEN(c),d,e,f, g)
46
47 #define pl_yylval       (PL_parser->yylval)
48
49 /* XXX temporary backwards compatibility */
50 #define PL_lex_brackets         (PL_parser->lex_brackets)
51 #define PL_lex_allbrackets      (PL_parser->lex_allbrackets)
52 #define PL_lex_fakeeof          (PL_parser->lex_fakeeof)
53 #define PL_lex_brackstack       (PL_parser->lex_brackstack)
54 #define PL_lex_casemods         (PL_parser->lex_casemods)
55 #define PL_lex_casestack        (PL_parser->lex_casestack)
56 #define PL_lex_defer            (PL_parser->lex_defer)
57 #define PL_lex_dojoin           (PL_parser->lex_dojoin)
58 #define PL_lex_expect           (PL_parser->lex_expect)
59 #define PL_lex_formbrack        (PL_parser->lex_formbrack)
60 #define PL_lex_inpat            (PL_parser->lex_inpat)
61 #define PL_lex_inwhat           (PL_parser->lex_inwhat)
62 #define PL_lex_op               (PL_parser->lex_op)
63 #define PL_lex_repl             (PL_parser->lex_repl)
64 #define PL_lex_starts           (PL_parser->lex_starts)
65 #define PL_lex_stuff            (PL_parser->lex_stuff)
66 #define PL_multi_start          (PL_parser->multi_start)
67 #define PL_multi_open           (PL_parser->multi_open)
68 #define PL_multi_close          (PL_parser->multi_close)
69 #define PL_pending_ident        (PL_parser->pending_ident)
70 #define PL_preambled            (PL_parser->preambled)
71 #define PL_sublex_info          (PL_parser->sublex_info)
72 #define PL_linestr              (PL_parser->linestr)
73 #define PL_expect               (PL_parser->expect)
74 #define PL_copline              (PL_parser->copline)
75 #define PL_bufptr               (PL_parser->bufptr)
76 #define PL_oldbufptr            (PL_parser->oldbufptr)
77 #define PL_oldoldbufptr         (PL_parser->oldoldbufptr)
78 #define PL_linestart            (PL_parser->linestart)
79 #define PL_bufend               (PL_parser->bufend)
80 #define PL_last_uni             (PL_parser->last_uni)
81 #define PL_last_lop             (PL_parser->last_lop)
82 #define PL_last_lop_op          (PL_parser->last_lop_op)
83 #define PL_lex_state            (PL_parser->lex_state)
84 #define PL_rsfp                 (PL_parser->rsfp)
85 #define PL_rsfp_filters         (PL_parser->rsfp_filters)
86 #define PL_in_my                (PL_parser->in_my)
87 #define PL_in_my_stash          (PL_parser->in_my_stash)
88 #define PL_tokenbuf             (PL_parser->tokenbuf)
89 #define PL_multi_end            (PL_parser->multi_end)
90 #define PL_error_count          (PL_parser->error_count)
91
92 #ifdef PERL_MAD
93 #  define PL_endwhite           (PL_parser->endwhite)
94 #  define PL_faketokens         (PL_parser->faketokens)
95 #  define PL_lasttoke           (PL_parser->lasttoke)
96 #  define PL_nextwhite          (PL_parser->nextwhite)
97 #  define PL_realtokenstart     (PL_parser->realtokenstart)
98 #  define PL_skipwhite          (PL_parser->skipwhite)
99 #  define PL_thisclose          (PL_parser->thisclose)
100 #  define PL_thismad            (PL_parser->thismad)
101 #  define PL_thisopen           (PL_parser->thisopen)
102 #  define PL_thisstuff          (PL_parser->thisstuff)
103 #  define PL_thistoken          (PL_parser->thistoken)
104 #  define PL_thiswhite          (PL_parser->thiswhite)
105 #  define PL_thiswhite          (PL_parser->thiswhite)
106 #  define PL_nexttoke           (PL_parser->nexttoke)
107 #  define PL_curforce           (PL_parser->curforce)
108 #else
109 #  define PL_nexttoke           (PL_parser->nexttoke)
110 #  define PL_nexttype           (PL_parser->nexttype)
111 #  define PL_nextval            (PL_parser->nextval)
112 #endif
113
114 /* This can't be done with embed.fnc, because struct yy_parser contains a
115    member named pending_ident, which clashes with the generated #define  */
116 static int
117 S_pending_ident(pTHX);
118
119 static const char ident_too_long[] = "Identifier too long";
120
121 #ifdef PERL_MAD
122 #  define CURMAD(slot,sv) if (PL_madskills) { curmad(slot,sv); sv = 0; }
123 #  define NEXTVAL_NEXTTOKE PL_nexttoke[PL_curforce].next_val
124 #else
125 #  define CURMAD(slot,sv)
126 #  define NEXTVAL_NEXTTOKE PL_nextval[PL_nexttoke]
127 #endif
128
129 #define XENUMMASK  0x3f
130 #define XFAKEEOF   0x40
131 #define XFAKEBRACK 0x80
132
133 #ifdef USE_UTF8_SCRIPTS
134 #   define UTF (!IN_BYTES)
135 #else
136 #   define UTF ((PL_linestr && DO_UTF8(PL_linestr)) || ( !(PL_parser->lex_flags & LEX_IGNORE_UTF8_HINTS) && (PL_hints & HINT_UTF8)))
137 #endif
138
139 /* The maximum number of characters preceding the unrecognized one to display */
140 #define UNRECOGNIZED_PRECEDE_COUNT 10
141
142 /* In variables named $^X, these are the legal values for X.
143  * 1999-02-27 mjd-perl-patch@plover.com */
144 #define isCONTROLVAR(x) (isUPPER(x) || strchr("[\\]^_?", (x)))
145
146 #define SPACE_OR_TAB(c) ((c)==' '||(c)=='\t')
147
148 /* LEX_* are values for PL_lex_state, the state of the lexer.
149  * They are arranged oddly so that the guard on the switch statement
150  * can get by with a single comparison (if the compiler is smart enough).
151  */
152
153 /* #define LEX_NOTPARSING               11 is done in perl.h. */
154
155 #define LEX_NORMAL              10 /* normal code (ie not within "...")     */
156 #define LEX_INTERPNORMAL         9 /* code within a string, eg "$foo[$x+1]" */
157 #define LEX_INTERPCASEMOD        8 /* expecting a \U, \Q or \E etc          */
158 #define LEX_INTERPPUSH           7 /* starting a new sublex parse level     */
159 #define LEX_INTERPSTART          6 /* expecting the start of a $var         */
160
161                                    /* at end of code, eg "$x" followed by:  */
162 #define LEX_INTERPEND            5 /* ... eg not one of [, { or ->          */
163 #define LEX_INTERPENDMAYBE       4 /* ... eg one of [, { or ->              */
164
165 #define LEX_INTERPCONCAT         3 /* expecting anything, eg at start of
166                                         string or after \E, $foo, etc       */
167 #define LEX_INTERPCONST          2 /* NOT USED */
168 #define LEX_FORMLINE             1 /* expecting a format line               */
169 #define LEX_KNOWNEXT             0 /* next token known; just return it      */
170
171
172 #ifdef DEBUGGING
173 static const char* const lex_state_names[] = {
174     "KNOWNEXT",
175     "FORMLINE",
176     "INTERPCONST",
177     "INTERPCONCAT",
178     "INTERPENDMAYBE",
179     "INTERPEND",
180     "INTERPSTART",
181     "INTERPPUSH",
182     "INTERPCASEMOD",
183     "INTERPNORMAL",
184     "NORMAL"
185 };
186 #endif
187
188 #ifdef ff_next
189 #undef ff_next
190 #endif
191
192 #include "keywords.h"
193
194 /* CLINE is a macro that ensures PL_copline has a sane value */
195
196 #ifdef CLINE
197 #undef CLINE
198 #endif
199 #define CLINE (PL_copline = (CopLINE(PL_curcop) < PL_copline ? CopLINE(PL_curcop) : PL_copline))
200
201 #ifdef PERL_MAD
202 #  define SKIPSPACE0(s) skipspace0(s)
203 #  define SKIPSPACE1(s) skipspace1(s)
204 #  define SKIPSPACE2(s,tsv) skipspace2(s,&tsv)
205 #  define PEEKSPACE(s) skipspace2(s,0)
206 #else
207 #  define SKIPSPACE0(s) skipspace(s)
208 #  define SKIPSPACE1(s) skipspace(s)
209 #  define SKIPSPACE2(s,tsv) skipspace(s)
210 #  define PEEKSPACE(s) skipspace(s)
211 #endif
212
213 /*
214  * Convenience functions to return different tokens and prime the
215  * lexer for the next token.  They all take an argument.
216  *
217  * TOKEN        : generic token (used for '(', DOLSHARP, etc)
218  * OPERATOR     : generic operator
219  * AOPERATOR    : assignment operator
220  * PREBLOCK     : beginning the block after an if, while, foreach, ...
221  * PRETERMBLOCK : beginning a non-code-defining {} block (eg, hash ref)
222  * PREREF       : *EXPR where EXPR is not a simple identifier
223  * TERM         : expression term
224  * LOOPX        : loop exiting command (goto, last, dump, etc)
225  * FTST         : file test operator
226  * FUN0         : zero-argument function
227  * FUN0OP       : zero-argument function, with its op created in this file
228  * FUN1         : not used, except for not, which isn't a UNIOP
229  * BOop         : bitwise or or xor
230  * BAop         : bitwise and
231  * SHop         : shift operator
232  * PWop         : power operator
233  * PMop         : pattern-matching operator
234  * Aop          : addition-level operator
235  * Mop          : multiplication-level operator
236  * Eop          : equality-testing operator
237  * Rop          : relational operator <= != gt
238  *
239  * Also see LOP and lop() below.
240  */
241
242 #ifdef DEBUGGING /* Serve -DT. */
243 #   define REPORT(retval) tokereport((I32)retval, &pl_yylval)
244 #else
245 #   define REPORT(retval) (retval)
246 #endif
247
248 #define TOKEN(retval) return ( PL_bufptr = s, REPORT(retval))
249 #define OPERATOR(retval) return (PL_expect = XTERM, PL_bufptr = s, REPORT(retval))
250 #define AOPERATOR(retval) return ao((PL_expect = XTERM, PL_bufptr = s, REPORT(retval)))
251 #define PREBLOCK(retval) return (PL_expect = XBLOCK,PL_bufptr = s, REPORT(retval))
252 #define PRETERMBLOCK(retval) return (PL_expect = XTERMBLOCK,PL_bufptr = s, REPORT(retval))
253 #define PREREF(retval) return (PL_expect = XREF,PL_bufptr = s, REPORT(retval))
254 #define TERM(retval) return (CLINE, PL_expect = XOPERATOR, PL_bufptr = s, REPORT(retval))
255 #define LOOPX(f) return (pl_yylval.ival=f, PL_expect=XTERM, PL_bufptr=s, REPORT((int)LOOPEX))
256 #define FTST(f)  return (pl_yylval.ival=f, PL_expect=XTERMORDORDOR, PL_bufptr=s, REPORT((int)UNIOP))
257 #define FUN0(f)  return (pl_yylval.ival=f, PL_expect=XOPERATOR, PL_bufptr=s, REPORT((int)FUNC0))
258 #define FUN0OP(f)  return (pl_yylval.opval=f, CLINE, PL_expect=XOPERATOR, PL_bufptr=s, REPORT((int)FUNC0OP))
259 #define FUN1(f)  return (pl_yylval.ival=f, PL_expect=XOPERATOR, PL_bufptr=s, REPORT((int)FUNC1))
260 #define BOop(f)  return ao((pl_yylval.ival=f, PL_expect=XTERM, PL_bufptr=s, REPORT((int)BITOROP)))
261 #define BAop(f)  return ao((pl_yylval.ival=f, PL_expect=XTERM, PL_bufptr=s, REPORT((int)BITANDOP)))
262 #define SHop(f)  return ao((pl_yylval.ival=f, PL_expect=XTERM, PL_bufptr=s, REPORT((int)SHIFTOP)))
263 #define PWop(f)  return ao((pl_yylval.ival=f, PL_expect=XTERM, PL_bufptr=s, REPORT((int)POWOP)))
264 #define PMop(f)  return(pl_yylval.ival=f, PL_expect=XTERM, PL_bufptr=s, REPORT((int)MATCHOP))
265 #define Aop(f)   return ao((pl_yylval.ival=f, PL_expect=XTERM, PL_bufptr=s, REPORT((int)ADDOP)))
266 #define Mop(f)   return ao((pl_yylval.ival=f, PL_expect=XTERM, PL_bufptr=s, REPORT((int)MULOP)))
267 #define Eop(f)   return (pl_yylval.ival=f, PL_expect=XTERM, PL_bufptr=s, REPORT((int)EQOP))
268 #define Rop(f)   return (pl_yylval.ival=f, PL_expect=XTERM, PL_bufptr=s, REPORT((int)RELOP))
269
270 /* This bit of chicanery makes a unary function followed by
271  * a parenthesis into a function with one argument, highest precedence.
272  * The UNIDOR macro is for unary functions that can be followed by the //
273  * operator (such as C<shift // 0>).
274  */
275 #define UNI2(f,x) { \
276         pl_yylval.ival = f; \
277         PL_expect = x; \
278         PL_bufptr = s; \
279         PL_last_uni = PL_oldbufptr; \
280         PL_last_lop_op = f; \
281         if (*s == '(') \
282             return REPORT( (int)FUNC1 ); \
283         s = PEEKSPACE(s); \
284         return REPORT( *s=='(' ? (int)FUNC1 : (int)UNIOP ); \
285         }
286 #define UNI(f)    UNI2(f,XTERM)
287 #define UNIDOR(f) UNI2(f,XTERMORDORDOR)
288
289 #define UNIBRACK(f) { \
290         pl_yylval.ival = f; \
291         PL_bufptr = s; \
292         PL_last_uni = PL_oldbufptr; \
293         if (*s == '(') \
294             return REPORT( (int)FUNC1 ); \
295         s = PEEKSPACE(s); \
296         return REPORT( (*s == '(') ? (int)FUNC1 : (int)UNIOP ); \
297         }
298
299 /* grandfather return to old style */
300 #define OLDLOP(f) \
301         do { \
302             if (!PL_lex_allbrackets && PL_lex_fakeeof > LEX_FAKEEOF_LOWLOGIC) \
303                 PL_lex_fakeeof = LEX_FAKEEOF_LOWLOGIC; \
304             pl_yylval.ival = (f); \
305             PL_expect = XTERM; \
306             PL_bufptr = s; \
307             return (int)LSTOP; \
308         } while(0)
309
310 #ifdef DEBUGGING
311
312 /* how to interpret the pl_yylval associated with the token */
313 enum token_type {
314     TOKENTYPE_NONE,
315     TOKENTYPE_IVAL,
316     TOKENTYPE_OPNUM, /* pl_yylval.ival contains an opcode number */
317     TOKENTYPE_PVAL,
318     TOKENTYPE_OPVAL,
319     TOKENTYPE_GVVAL
320 };
321
322 static struct debug_tokens {
323     const int token;
324     enum token_type type;
325     const char *name;
326 } const debug_tokens[] =
327 {
328     { ADDOP,            TOKENTYPE_OPNUM,        "ADDOP" },
329     { ANDAND,           TOKENTYPE_NONE,         "ANDAND" },
330     { ANDOP,            TOKENTYPE_NONE,         "ANDOP" },
331     { ANONSUB,          TOKENTYPE_IVAL,         "ANONSUB" },
332     { ARROW,            TOKENTYPE_NONE,         "ARROW" },
333     { ASSIGNOP,         TOKENTYPE_OPNUM,        "ASSIGNOP" },
334     { BITANDOP,         TOKENTYPE_OPNUM,        "BITANDOP" },
335     { BITOROP,          TOKENTYPE_OPNUM,        "BITOROP" },
336     { COLONATTR,        TOKENTYPE_NONE,         "COLONATTR" },
337     { CONTINUE,         TOKENTYPE_NONE,         "CONTINUE" },
338     { DEFAULT,          TOKENTYPE_NONE,         "DEFAULT" },
339     { DO,               TOKENTYPE_NONE,         "DO" },
340     { DOLSHARP,         TOKENTYPE_NONE,         "DOLSHARP" },
341     { DORDOR,           TOKENTYPE_NONE,         "DORDOR" },
342     { DOROP,            TOKENTYPE_OPNUM,        "DOROP" },
343     { DOTDOT,           TOKENTYPE_IVAL,         "DOTDOT" },
344     { ELSE,             TOKENTYPE_NONE,         "ELSE" },
345     { ELSIF,            TOKENTYPE_IVAL,         "ELSIF" },
346     { EQOP,             TOKENTYPE_OPNUM,        "EQOP" },
347     { FOR,              TOKENTYPE_IVAL,         "FOR" },
348     { FORMAT,           TOKENTYPE_NONE,         "FORMAT" },
349     { FUNC,             TOKENTYPE_OPNUM,        "FUNC" },
350     { FUNC0,            TOKENTYPE_OPNUM,        "FUNC0" },
351     { FUNC0OP,          TOKENTYPE_OPVAL,        "FUNC0OP" },
352     { FUNC0SUB,         TOKENTYPE_OPVAL,        "FUNC0SUB" },
353     { FUNC1,            TOKENTYPE_OPNUM,        "FUNC1" },
354     { FUNCMETH,         TOKENTYPE_OPVAL,        "FUNCMETH" },
355     { GIVEN,            TOKENTYPE_IVAL,         "GIVEN" },
356     { HASHBRACK,        TOKENTYPE_NONE,         "HASHBRACK" },
357     { IF,               TOKENTYPE_IVAL,         "IF" },
358     { LABEL,            TOKENTYPE_PVAL,         "LABEL" },
359     { LOCAL,            TOKENTYPE_IVAL,         "LOCAL" },
360     { LOOPEX,           TOKENTYPE_OPNUM,        "LOOPEX" },
361     { LSTOP,            TOKENTYPE_OPNUM,        "LSTOP" },
362     { LSTOPSUB,         TOKENTYPE_OPVAL,        "LSTOPSUB" },
363     { MATCHOP,          TOKENTYPE_OPNUM,        "MATCHOP" },
364     { METHOD,           TOKENTYPE_OPVAL,        "METHOD" },
365     { MULOP,            TOKENTYPE_OPNUM,        "MULOP" },
366     { MY,               TOKENTYPE_IVAL,         "MY" },
367     { MYSUB,            TOKENTYPE_NONE,         "MYSUB" },
368     { NOAMP,            TOKENTYPE_NONE,         "NOAMP" },
369     { NOTOP,            TOKENTYPE_NONE,         "NOTOP" },
370     { OROP,             TOKENTYPE_IVAL,         "OROP" },
371     { OROR,             TOKENTYPE_NONE,         "OROR" },
372     { PACKAGE,          TOKENTYPE_NONE,         "PACKAGE" },
373     { PLUGEXPR,         TOKENTYPE_OPVAL,        "PLUGEXPR" },
374     { PLUGSTMT,         TOKENTYPE_OPVAL,        "PLUGSTMT" },
375     { PMFUNC,           TOKENTYPE_OPVAL,        "PMFUNC" },
376     { POSTDEC,          TOKENTYPE_NONE,         "POSTDEC" },
377     { POSTINC,          TOKENTYPE_NONE,         "POSTINC" },
378     { POWOP,            TOKENTYPE_OPNUM,        "POWOP" },
379     { PREDEC,           TOKENTYPE_NONE,         "PREDEC" },
380     { PREINC,           TOKENTYPE_NONE,         "PREINC" },
381     { PRIVATEREF,       TOKENTYPE_OPVAL,        "PRIVATEREF" },
382     { REFGEN,           TOKENTYPE_NONE,         "REFGEN" },
383     { RELOP,            TOKENTYPE_OPNUM,        "RELOP" },
384     { SHIFTOP,          TOKENTYPE_OPNUM,        "SHIFTOP" },
385     { SUB,              TOKENTYPE_NONE,         "SUB" },
386     { THING,            TOKENTYPE_OPVAL,        "THING" },
387     { UMINUS,           TOKENTYPE_NONE,         "UMINUS" },
388     { UNIOP,            TOKENTYPE_OPNUM,        "UNIOP" },
389     { UNIOPSUB,         TOKENTYPE_OPVAL,        "UNIOPSUB" },
390     { UNLESS,           TOKENTYPE_IVAL,         "UNLESS" },
391     { UNTIL,            TOKENTYPE_IVAL,         "UNTIL" },
392     { USE,              TOKENTYPE_IVAL,         "USE" },
393     { WHEN,             TOKENTYPE_IVAL,         "WHEN" },
394     { WHILE,            TOKENTYPE_IVAL,         "WHILE" },
395     { WORD,             TOKENTYPE_OPVAL,        "WORD" },
396     { YADAYADA,         TOKENTYPE_IVAL,         "YADAYADA" },
397     { 0,                TOKENTYPE_NONE,         NULL }
398 };
399
400 /* dump the returned token in rv, plus any optional arg in pl_yylval */
401
402 STATIC int
403 S_tokereport(pTHX_ I32 rv, const YYSTYPE* lvalp)
404 {
405     dVAR;
406
407     PERL_ARGS_ASSERT_TOKEREPORT;
408
409     if (DEBUG_T_TEST) {
410         const char *name = NULL;
411         enum token_type type = TOKENTYPE_NONE;
412         const struct debug_tokens *p;
413         SV* const report = newSVpvs("<== ");
414
415         for (p = debug_tokens; p->token; p++) {
416             if (p->token == (int)rv) {
417                 name = p->name;
418                 type = p->type;
419                 break;
420             }
421         }
422         if (name)
423             Perl_sv_catpv(aTHX_ report, name);
424         else if ((char)rv > ' ' && (char)rv < '~')
425             Perl_sv_catpvf(aTHX_ report, "'%c'", (char)rv);
426         else if (!rv)
427             sv_catpvs(report, "EOF");
428         else
429             Perl_sv_catpvf(aTHX_ report, "?? %"IVdf, (IV)rv);
430         switch (type) {
431         case TOKENTYPE_NONE:
432         case TOKENTYPE_GVVAL: /* doesn't appear to be used */
433             break;
434         case TOKENTYPE_IVAL:
435             Perl_sv_catpvf(aTHX_ report, "(ival=%"IVdf")", (IV)lvalp->ival);
436             break;
437         case TOKENTYPE_OPNUM:
438             Perl_sv_catpvf(aTHX_ report, "(ival=op_%s)",
439                                     PL_op_name[lvalp->ival]);
440             break;
441         case TOKENTYPE_PVAL:
442             Perl_sv_catpvf(aTHX_ report, "(pval=\"%s\")", lvalp->pval);
443             break;
444         case TOKENTYPE_OPVAL:
445             if (lvalp->opval) {
446                 Perl_sv_catpvf(aTHX_ report, "(opval=op_%s)",
447                                     PL_op_name[lvalp->opval->op_type]);
448                 if (lvalp->opval->op_type == OP_CONST) {
449                     Perl_sv_catpvf(aTHX_ report, " %s",
450                         SvPEEK(cSVOPx_sv(lvalp->opval)));
451                 }
452
453             }
454             else
455                 sv_catpvs(report, "(opval=null)");
456             break;
457         }
458         PerlIO_printf(Perl_debug_log, "### %s\n\n", SvPV_nolen_const(report));
459     };
460     return (int)rv;
461 }
462
463
464 /* print the buffer with suitable escapes */
465
466 STATIC void
467 S_printbuf(pTHX_ const char *const fmt, const char *const s)
468 {
469     SV* const tmp = newSVpvs("");
470
471     PERL_ARGS_ASSERT_PRINTBUF;
472
473     PerlIO_printf(Perl_debug_log, fmt, pv_display(tmp, s, strlen(s), 0, 60));
474     SvREFCNT_dec(tmp);
475 }
476
477 #endif
478
479 static int
480 S_deprecate_commaless_var_list(pTHX) {
481     PL_expect = XTERM;
482     deprecate("comma-less variable list");
483     return REPORT(','); /* grandfather non-comma-format format */
484 }
485
486 /*
487  * S_ao
488  *
489  * This subroutine detects &&=, ||=, and //= and turns an ANDAND, OROR or DORDOR
490  * into an OP_ANDASSIGN, OP_ORASSIGN, or OP_DORASSIGN
491  */
492
493 STATIC int
494 S_ao(pTHX_ int toketype)
495 {
496     dVAR;
497     if (*PL_bufptr == '=') {
498         PL_bufptr++;
499         if (toketype == ANDAND)
500             pl_yylval.ival = OP_ANDASSIGN;
501         else if (toketype == OROR)
502             pl_yylval.ival = OP_ORASSIGN;
503         else if (toketype == DORDOR)
504             pl_yylval.ival = OP_DORASSIGN;
505         toketype = ASSIGNOP;
506     }
507     return toketype;
508 }
509
510 /*
511  * S_no_op
512  * When Perl expects an operator and finds something else, no_op
513  * prints the warning.  It always prints "<something> found where
514  * operator expected.  It prints "Missing semicolon on previous line?"
515  * if the surprise occurs at the start of the line.  "do you need to
516  * predeclare ..." is printed out for code like "sub bar; foo bar $x"
517  * where the compiler doesn't know if foo is a method call or a function.
518  * It prints "Missing operator before end of line" if there's nothing
519  * after the missing operator, or "... before <...>" if there is something
520  * after the missing operator.
521  */
522
523 STATIC void
524 S_no_op(pTHX_ const char *const what, char *s)
525 {
526     dVAR;
527     char * const oldbp = PL_bufptr;
528     const bool is_first = (PL_oldbufptr == PL_linestart);
529
530     PERL_ARGS_ASSERT_NO_OP;
531
532     if (!s)
533         s = oldbp;
534     else
535         PL_bufptr = s;
536     yywarn(Perl_form(aTHX_ "%s found where operator expected", what));
537     if (ckWARN_d(WARN_SYNTAX)) {
538         if (is_first)
539             Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
540                     "\t(Missing semicolon on previous line?)\n");
541         else if (PL_oldoldbufptr && isIDFIRST_lazy_if(PL_oldoldbufptr,UTF)) {
542             const char *t;
543             for (t = PL_oldoldbufptr; (isALNUM_lazy_if(t,UTF) || *t == ':'); t++)
544                 NOOP;
545             if (t < PL_bufptr && isSPACE(*t))
546                 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
547                         "\t(Do you need to predeclare %.*s?)\n",
548                     (int)(t - PL_oldoldbufptr), PL_oldoldbufptr);
549         }
550         else {
551             assert(s >= oldbp);
552             Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
553                     "\t(Missing operator before %.*s?)\n", (int)(s - oldbp), oldbp);
554         }
555     }
556     PL_bufptr = oldbp;
557 }
558
559 /*
560  * S_missingterm
561  * Complain about missing quote/regexp/heredoc terminator.
562  * If it's called with NULL then it cauterizes the line buffer.
563  * If we're in a delimited string and the delimiter is a control
564  * character, it's reformatted into a two-char sequence like ^C.
565  * This is fatal.
566  */
567
568 STATIC void
569 S_missingterm(pTHX_ char *s)
570 {
571     dVAR;
572     char tmpbuf[3];
573     char q;
574     if (s) {
575         char * const nl = strrchr(s,'\n');
576         if (nl)
577             *nl = '\0';
578     }
579     else if (isCNTRL(PL_multi_close)) {
580         *tmpbuf = '^';
581         tmpbuf[1] = (char)toCTRL(PL_multi_close);
582         tmpbuf[2] = '\0';
583         s = tmpbuf;
584     }
585     else {
586         *tmpbuf = (char)PL_multi_close;
587         tmpbuf[1] = '\0';
588         s = tmpbuf;
589     }
590     q = strchr(s,'"') ? '\'' : '"';
591     Perl_croak(aTHX_ "Can't find string terminator %c%s%c anywhere before EOF",q,s,q);
592 }
593
594 /*
595  * Check whether the named feature is enabled.
596  */
597 bool
598 Perl_feature_is_enabled(pTHX_ const char *const name, STRLEN namelen)
599 {
600     dVAR;
601     HV * const hinthv = GvHV(PL_hintgv);
602     char he_name[8 + MAX_FEATURE_LEN] = "feature_";
603
604     PERL_ARGS_ASSERT_FEATURE_IS_ENABLED;
605
606     if (namelen > MAX_FEATURE_LEN)
607         return FALSE;
608     memcpy(&he_name[8], name, namelen);
609
610     return (hinthv && hv_exists(hinthv, he_name, 8 + namelen));
611 }
612
613 /*
614  * experimental text filters for win32 carriage-returns, utf16-to-utf8 and
615  * utf16-to-utf8-reversed.
616  */
617
618 #ifdef PERL_CR_FILTER
619 static void
620 strip_return(SV *sv)
621 {
622     register const char *s = SvPVX_const(sv);
623     register const char * const e = s + SvCUR(sv);
624
625     PERL_ARGS_ASSERT_STRIP_RETURN;
626
627     /* outer loop optimized to do nothing if there are no CR-LFs */
628     while (s < e) {
629         if (*s++ == '\r' && *s == '\n') {
630             /* hit a CR-LF, need to copy the rest */
631             register char *d = s - 1;
632             *d++ = *s++;
633             while (s < e) {
634                 if (*s == '\r' && s[1] == '\n')
635                     s++;
636                 *d++ = *s++;
637             }
638             SvCUR(sv) -= s - d;
639             return;
640         }
641     }
642 }
643
644 STATIC I32
645 S_cr_textfilter(pTHX_ int idx, SV *sv, int maxlen)
646 {
647     const I32 count = FILTER_READ(idx+1, sv, maxlen);
648     if (count > 0 && !maxlen)
649         strip_return(sv);
650     return count;
651 }
652 #endif
653
654 /*
655 =for apidoc Amx|void|lex_start|SV *line|PerlIO *rsfp|U32 flags
656
657 Creates and initialises a new lexer/parser state object, supplying
658 a context in which to lex and parse from a new source of Perl code.
659 A pointer to the new state object is placed in L</PL_parser>.  An entry
660 is made on the save stack so that upon unwinding the new state object
661 will be destroyed and the former value of L</PL_parser> will be restored.
662 Nothing else need be done to clean up the parsing context.
663
664 The code to be parsed comes from I<line> and I<rsfp>.  I<line>, if
665 non-null, provides a string (in SV form) containing code to be parsed.
666 A copy of the string is made, so subsequent modification of I<line>
667 does not affect parsing.  I<rsfp>, if non-null, provides an input stream
668 from which code will be read to be parsed.  If both are non-null, the
669 code in I<line> comes first and must consist of complete lines of input,
670 and I<rsfp> supplies the remainder of the source.
671
672 The I<flags> parameter is reserved for future use, and must always
673 be zero, except for one flag that is currently reserved for perl's internal
674 use.
675
676 =cut
677 */
678
679 /* LEX_START_SAME_FILTER indicates that this is not a new file, so it
680    can share filters with the current parser. */
681
682 void
683 Perl_lex_start(pTHX_ SV *line, PerlIO *rsfp, U32 flags)
684 {
685     dVAR;
686     const char *s = NULL;
687     STRLEN len;
688     yy_parser *parser, *oparser;
689     if (flags && flags & ~LEX_START_FLAGS)
690         Perl_croak(aTHX_ "Lexing code internal error (%s)", "lex_start");
691
692     /* create and initialise a parser */
693
694     Newxz(parser, 1, yy_parser);
695     parser->old_parser = oparser = PL_parser;
696     PL_parser = parser;
697
698     parser->stack = NULL;
699     parser->ps = NULL;
700     parser->stack_size = 0;
701
702     /* on scope exit, free this parser and restore any outer one */
703     SAVEPARSER(parser);
704     parser->saved_curcop = PL_curcop;
705
706     /* initialise lexer state */
707
708 #ifdef PERL_MAD
709     parser->curforce = -1;
710 #else
711     parser->nexttoke = 0;
712 #endif
713     parser->error_count = oparser ? oparser->error_count : 0;
714     parser->copline = NOLINE;
715     parser->lex_state = LEX_NORMAL;
716     parser->expect = XSTATE;
717     parser->rsfp = rsfp;
718     parser->rsfp_filters =
719       !(flags & LEX_START_SAME_FILTER) || !oparser
720         ? newAV()
721         : MUTABLE_AV(SvREFCNT_inc(oparser->rsfp_filters));
722
723     Newx(parser->lex_brackstack, 120, char);
724     Newx(parser->lex_casestack, 12, char);
725     *parser->lex_casestack = '\0';
726
727     if (line) {
728         s = SvPV_const(line, len);
729         parser->linestr = flags & LEX_START_COPIED
730                             ? SvREFCNT_inc_simple_NN(line)
731                             : newSVpvn_flags(s, len, SvUTF8(line));
732         if (s[len-1] != ';')
733             sv_catpvs(parser->linestr, "\n;");
734     } else {
735         parser->linestr = newSVpvs("\n;");
736     }
737     parser->oldoldbufptr =
738         parser->oldbufptr =
739         parser->bufptr =
740         parser->linestart = SvPVX(parser->linestr);
741     parser->bufend = parser->bufptr + SvCUR(parser->linestr);
742     parser->last_lop = parser->last_uni = NULL;
743     parser->lex_flags = flags & (LEX_IGNORE_UTF8_HINTS|LEX_EVALBYTES);
744
745     parser->in_pod = parser->filtered = 0;
746 }
747
748
749 /* delete a parser object */
750
751 void
752 Perl_parser_free(pTHX_  const yy_parser *parser)
753 {
754     PERL_ARGS_ASSERT_PARSER_FREE;
755
756     PL_curcop = parser->saved_curcop;
757     SvREFCNT_dec(parser->linestr);
758
759     if (parser->rsfp == PerlIO_stdin())
760         PerlIO_clearerr(parser->rsfp);
761     else if (parser->rsfp && (!parser->old_parser ||
762                 (parser->old_parser && parser->rsfp != parser->old_parser->rsfp)))
763         PerlIO_close(parser->rsfp);
764     SvREFCNT_dec(parser->rsfp_filters);
765
766     Safefree(parser->lex_brackstack);
767     Safefree(parser->lex_casestack);
768     PL_parser = parser->old_parser;
769     Safefree(parser);
770 }
771
772
773 /*
774 =for apidoc AmxU|SV *|PL_parser-E<gt>linestr
775
776 Buffer scalar containing the chunk currently under consideration of the
777 text currently being lexed.  This is always a plain string scalar (for
778 which C<SvPOK> is true).  It is not intended to be used as a scalar by
779 normal scalar means; instead refer to the buffer directly by the pointer
780 variables described below.
781
782 The lexer maintains various C<char*> pointers to things in the
783 C<PL_parser-E<gt>linestr> buffer.  If C<PL_parser-E<gt>linestr> is ever
784 reallocated, all of these pointers must be updated.  Don't attempt to
785 do this manually, but rather use L</lex_grow_linestr> if you need to
786 reallocate the buffer.
787
788 The content of the text chunk in the buffer is commonly exactly one
789 complete line of input, up to and including a newline terminator,
790 but there are situations where it is otherwise.  The octets of the
791 buffer may be intended to be interpreted as either UTF-8 or Latin-1.
792 The function L</lex_bufutf8> tells you which.  Do not use the C<SvUTF8>
793 flag on this scalar, which may disagree with it.
794
795 For direct examination of the buffer, the variable
796 L</PL_parser-E<gt>bufend> points to the end of the buffer.  The current
797 lexing position is pointed to by L</PL_parser-E<gt>bufptr>.  Direct use
798 of these pointers is usually preferable to examination of the scalar
799 through normal scalar means.
800
801 =for apidoc AmxU|char *|PL_parser-E<gt>bufend
802
803 Direct pointer to the end of the chunk of text currently being lexed, the
804 end of the lexer buffer.  This is equal to C<SvPVX(PL_parser-E<gt>linestr)
805 + SvCUR(PL_parser-E<gt>linestr)>.  A NUL character (zero octet) is
806 always located at the end of the buffer, and does not count as part of
807 the buffer's contents.
808
809 =for apidoc AmxU|char *|PL_parser-E<gt>bufptr
810
811 Points to the current position of lexing inside the lexer buffer.
812 Characters around this point may be freely examined, within
813 the range delimited by C<SvPVX(L</PL_parser-E<gt>linestr>)> and
814 L</PL_parser-E<gt>bufend>.  The octets of the buffer may be intended to be
815 interpreted as either UTF-8 or Latin-1, as indicated by L</lex_bufutf8>.
816
817 Lexing code (whether in the Perl core or not) moves this pointer past
818 the characters that it consumes.  It is also expected to perform some
819 bookkeeping whenever a newline character is consumed.  This movement
820 can be more conveniently performed by the function L</lex_read_to>,
821 which handles newlines appropriately.
822
823 Interpretation of the buffer's octets can be abstracted out by
824 using the slightly higher-level functions L</lex_peek_unichar> and
825 L</lex_read_unichar>.
826
827 =for apidoc AmxU|char *|PL_parser-E<gt>linestart
828
829 Points to the start of the current line inside the lexer buffer.
830 This is useful for indicating at which column an error occurred, and
831 not much else.  This must be updated by any lexing code that consumes
832 a newline; the function L</lex_read_to> handles this detail.
833
834 =cut
835 */
836
837 /*
838 =for apidoc Amx|bool|lex_bufutf8
839
840 Indicates whether the octets in the lexer buffer
841 (L</PL_parser-E<gt>linestr>) should be interpreted as the UTF-8 encoding
842 of Unicode characters.  If not, they should be interpreted as Latin-1
843 characters.  This is analogous to the C<SvUTF8> flag for scalars.
844
845 In UTF-8 mode, it is not guaranteed that the lexer buffer actually
846 contains valid UTF-8.  Lexing code must be robust in the face of invalid
847 encoding.
848
849 The actual C<SvUTF8> flag of the L</PL_parser-E<gt>linestr> scalar
850 is significant, but not the whole story regarding the input character
851 encoding.  Normally, when a file is being read, the scalar contains octets
852 and its C<SvUTF8> flag is off, but the octets should be interpreted as
853 UTF-8 if the C<use utf8> pragma is in effect.  During a string eval,
854 however, the scalar may have the C<SvUTF8> flag on, and in this case its
855 octets should be interpreted as UTF-8 unless the C<use bytes> pragma
856 is in effect.  This logic may change in the future; use this function
857 instead of implementing the logic yourself.
858
859 =cut
860 */
861
862 bool
863 Perl_lex_bufutf8(pTHX)
864 {
865     return UTF;
866 }
867
868 /*
869 =for apidoc Amx|char *|lex_grow_linestr|STRLEN len
870
871 Reallocates the lexer buffer (L</PL_parser-E<gt>linestr>) to accommodate
872 at least I<len> octets (including terminating NUL).  Returns a
873 pointer to the reallocated buffer.  This is necessary before making
874 any direct modification of the buffer that would increase its length.
875 L</lex_stuff_pvn> provides a more convenient way to insert text into
876 the buffer.
877
878 Do not use C<SvGROW> or C<sv_grow> directly on C<PL_parser-E<gt>linestr>;
879 this function updates all of the lexer's variables that point directly
880 into the buffer.
881
882 =cut
883 */
884
885 char *
886 Perl_lex_grow_linestr(pTHX_ STRLEN len)
887 {
888     SV *linestr;
889     char *buf;
890     STRLEN bufend_pos, bufptr_pos, oldbufptr_pos, oldoldbufptr_pos;
891     STRLEN linestart_pos, last_uni_pos, last_lop_pos;
892     linestr = PL_parser->linestr;
893     buf = SvPVX(linestr);
894     if (len <= SvLEN(linestr))
895         return buf;
896     bufend_pos = PL_parser->bufend - buf;
897     bufptr_pos = PL_parser->bufptr - buf;
898     oldbufptr_pos = PL_parser->oldbufptr - buf;
899     oldoldbufptr_pos = PL_parser->oldoldbufptr - buf;
900     linestart_pos = PL_parser->linestart - buf;
901     last_uni_pos = PL_parser->last_uni ? PL_parser->last_uni - buf : 0;
902     last_lop_pos = PL_parser->last_lop ? PL_parser->last_lop - buf : 0;
903     buf = sv_grow(linestr, len);
904     PL_parser->bufend = buf + bufend_pos;
905     PL_parser->bufptr = buf + bufptr_pos;
906     PL_parser->oldbufptr = buf + oldbufptr_pos;
907     PL_parser->oldoldbufptr = buf + oldoldbufptr_pos;
908     PL_parser->linestart = buf + linestart_pos;
909     if (PL_parser->last_uni)
910         PL_parser->last_uni = buf + last_uni_pos;
911     if (PL_parser->last_lop)
912         PL_parser->last_lop = buf + last_lop_pos;
913     return buf;
914 }
915
916 /*
917 =for apidoc Amx|void|lex_stuff_pvn|const char *pv|STRLEN len|U32 flags
918
919 Insert characters into the lexer buffer (L</PL_parser-E<gt>linestr>),
920 immediately after the current lexing point (L</PL_parser-E<gt>bufptr>),
921 reallocating the buffer if necessary.  This means that lexing code that
922 runs later will see the characters as if they had appeared in the input.
923 It is not recommended to do this as part of normal parsing, and most
924 uses of this facility run the risk of the inserted characters being
925 interpreted in an unintended manner.
926
927 The string to be inserted is represented by I<len> octets starting
928 at I<pv>.  These octets are interpreted as either UTF-8 or Latin-1,
929 according to whether the C<LEX_STUFF_UTF8> flag is set in I<flags>.
930 The characters are recoded for the lexer buffer, according to how the
931 buffer is currently being interpreted (L</lex_bufutf8>).  If a string
932 to be inserted is available as a Perl scalar, the L</lex_stuff_sv>
933 function is more convenient.
934
935 =cut
936 */
937
938 void
939 Perl_lex_stuff_pvn(pTHX_ const char *pv, STRLEN len, U32 flags)
940 {
941     dVAR;
942     char *bufptr;
943     PERL_ARGS_ASSERT_LEX_STUFF_PVN;
944     if (flags & ~(LEX_STUFF_UTF8))
945         Perl_croak(aTHX_ "Lexing code internal error (%s)", "lex_stuff_pvn");
946     if (UTF) {
947         if (flags & LEX_STUFF_UTF8) {
948             goto plain_copy;
949         } else {
950             STRLEN highhalf = 0;
951             const char *p, *e = pv+len;
952             for (p = pv; p != e; p++)
953                 highhalf += !!(((U8)*p) & 0x80);
954             if (!highhalf)
955                 goto plain_copy;
956             lex_grow_linestr(SvCUR(PL_parser->linestr)+1+len+highhalf);
957             bufptr = PL_parser->bufptr;
958             Move(bufptr, bufptr+len+highhalf, PL_parser->bufend+1-bufptr, char);
959             SvCUR_set(PL_parser->linestr,
960                 SvCUR(PL_parser->linestr) + len+highhalf);
961             PL_parser->bufend += len+highhalf;
962             for (p = pv; p != e; p++) {
963                 U8 c = (U8)*p;
964                 if (c & 0x80) {
965                     *bufptr++ = (char)(0xc0 | (c >> 6));
966                     *bufptr++ = (char)(0x80 | (c & 0x3f));
967                 } else {
968                     *bufptr++ = (char)c;
969                 }
970             }
971         }
972     } else {
973         if (flags & LEX_STUFF_UTF8) {
974             STRLEN highhalf = 0;
975             const char *p, *e = pv+len;
976             for (p = pv; p != e; p++) {
977                 U8 c = (U8)*p;
978                 if (c >= 0xc4) {
979                     Perl_croak(aTHX_ "Lexing code attempted to stuff "
980                                 "non-Latin-1 character into Latin-1 input");
981                 } else if (c >= 0xc2 && p+1 != e &&
982                             (((U8)p[1]) & 0xc0) == 0x80) {
983                     p++;
984                     highhalf++;
985                 } else if (c >= 0x80) {
986                     /* malformed UTF-8 */
987                     ENTER;
988                     SAVESPTR(PL_warnhook);
989                     PL_warnhook = PERL_WARNHOOK_FATAL;
990                     utf8n_to_uvuni((U8*)p, e-p, NULL, 0);
991                     LEAVE;
992                 }
993             }
994             if (!highhalf)
995                 goto plain_copy;
996             lex_grow_linestr(SvCUR(PL_parser->linestr)+1+len-highhalf);
997             bufptr = PL_parser->bufptr;
998             Move(bufptr, bufptr+len-highhalf, PL_parser->bufend+1-bufptr, char);
999             SvCUR_set(PL_parser->linestr,
1000                 SvCUR(PL_parser->linestr) + len-highhalf);
1001             PL_parser->bufend += len-highhalf;
1002             for (p = pv; p != e; p++) {
1003                 U8 c = (U8)*p;
1004                 if (c & 0x80) {
1005                     *bufptr++ = (char)(((c & 0x3) << 6) | (p[1] & 0x3f));
1006                     p++;
1007                 } else {
1008                     *bufptr++ = (char)c;
1009                 }
1010             }
1011         } else {
1012             plain_copy:
1013             lex_grow_linestr(SvCUR(PL_parser->linestr)+1+len);
1014             bufptr = PL_parser->bufptr;
1015             Move(bufptr, bufptr+len, PL_parser->bufend+1-bufptr, char);
1016             SvCUR_set(PL_parser->linestr, SvCUR(PL_parser->linestr) + len);
1017             PL_parser->bufend += len;
1018             Copy(pv, bufptr, len, char);
1019         }
1020     }
1021 }
1022
1023 /*
1024 =for apidoc Amx|void|lex_stuff_pv|const char *pv|U32 flags
1025
1026 Insert characters into the lexer buffer (L</PL_parser-E<gt>linestr>),
1027 immediately after the current lexing point (L</PL_parser-E<gt>bufptr>),
1028 reallocating the buffer if necessary.  This means that lexing code that
1029 runs later will see the characters as if they had appeared in the input.
1030 It is not recommended to do this as part of normal parsing, and most
1031 uses of this facility run the risk of the inserted characters being
1032 interpreted in an unintended manner.
1033
1034 The string to be inserted is represented by octets starting at I<pv>
1035 and continuing to the first nul.  These octets are interpreted as either
1036 UTF-8 or Latin-1, according to whether the C<LEX_STUFF_UTF8> flag is set
1037 in I<flags>.  The characters are recoded for the lexer buffer, according
1038 to how the buffer is currently being interpreted (L</lex_bufutf8>).
1039 If it is not convenient to nul-terminate a string to be inserted, the
1040 L</lex_stuff_pvn> function is more appropriate.
1041
1042 =cut
1043 */
1044
1045 void
1046 Perl_lex_stuff_pv(pTHX_ const char *pv, U32 flags)
1047 {
1048     PERL_ARGS_ASSERT_LEX_STUFF_PV;
1049     lex_stuff_pvn(pv, strlen(pv), flags);
1050 }
1051
1052 /*
1053 =for apidoc Amx|void|lex_stuff_sv|SV *sv|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 the string value of I<sv>.  The characters
1064 are recoded for the lexer buffer, according to how the buffer is currently
1065 being interpreted (L</lex_bufutf8>).  If a string to be inserted is
1066 not already a Perl scalar, the L</lex_stuff_pvn> function avoids the
1067 need to construct a scalar.
1068
1069 =cut
1070 */
1071
1072 void
1073 Perl_lex_stuff_sv(pTHX_ SV *sv, U32 flags)
1074 {
1075     char *pv;
1076     STRLEN len;
1077     PERL_ARGS_ASSERT_LEX_STUFF_SV;
1078     if (flags)
1079         Perl_croak(aTHX_ "Lexing code internal error (%s)", "lex_stuff_sv");
1080     pv = SvPV(sv, len);
1081     lex_stuff_pvn(pv, len, flags | (SvUTF8(sv) ? LEX_STUFF_UTF8 : 0));
1082 }
1083
1084 /*
1085 =for apidoc Amx|void|lex_unstuff|char *ptr
1086
1087 Discards text about to be lexed, from L</PL_parser-E<gt>bufptr> up to
1088 I<ptr>.  Text following I<ptr> will be moved, and the buffer shortened.
1089 This hides the discarded text from any lexing code that runs later,
1090 as if the text had never appeared.
1091
1092 This is not the normal way to consume lexed text.  For that, use
1093 L</lex_read_to>.
1094
1095 =cut
1096 */
1097
1098 void
1099 Perl_lex_unstuff(pTHX_ char *ptr)
1100 {
1101     char *buf, *bufend;
1102     STRLEN unstuff_len;
1103     PERL_ARGS_ASSERT_LEX_UNSTUFF;
1104     buf = PL_parser->bufptr;
1105     if (ptr < buf)
1106         Perl_croak(aTHX_ "Lexing code internal error (%s)", "lex_unstuff");
1107     if (ptr == buf)
1108         return;
1109     bufend = PL_parser->bufend;
1110     if (ptr > bufend)
1111         Perl_croak(aTHX_ "Lexing code internal error (%s)", "lex_unstuff");
1112     unstuff_len = ptr - buf;
1113     Move(ptr, buf, bufend+1-ptr, char);
1114     SvCUR_set(PL_parser->linestr, SvCUR(PL_parser->linestr) - unstuff_len);
1115     PL_parser->bufend = bufend - unstuff_len;
1116 }
1117
1118 /*
1119 =for apidoc Amx|void|lex_read_to|char *ptr
1120
1121 Consume text in the lexer buffer, from L</PL_parser-E<gt>bufptr> up
1122 to I<ptr>.  This advances L</PL_parser-E<gt>bufptr> to match I<ptr>,
1123 performing the correct bookkeeping whenever a newline character is passed.
1124 This is the normal way to consume lexed text.
1125
1126 Interpretation of the buffer's octets can be abstracted out by
1127 using the slightly higher-level functions L</lex_peek_unichar> and
1128 L</lex_read_unichar>.
1129
1130 =cut
1131 */
1132
1133 void
1134 Perl_lex_read_to(pTHX_ char *ptr)
1135 {
1136     char *s;
1137     PERL_ARGS_ASSERT_LEX_READ_TO;
1138     s = PL_parser->bufptr;
1139     if (ptr < s || ptr > PL_parser->bufend)
1140         Perl_croak(aTHX_ "Lexing code internal error (%s)", "lex_read_to");
1141     for (; s != ptr; s++)
1142         if (*s == '\n') {
1143             CopLINE_inc(PL_curcop);
1144             PL_parser->linestart = s+1;
1145         }
1146     PL_parser->bufptr = ptr;
1147 }
1148
1149 /*
1150 =for apidoc Amx|void|lex_discard_to|char *ptr
1151
1152 Discards the first part of the L</PL_parser-E<gt>linestr> buffer,
1153 up to I<ptr>.  The remaining content of the buffer will be moved, and
1154 all pointers into the buffer updated appropriately.  I<ptr> must not
1155 be later in the buffer than the position of L</PL_parser-E<gt>bufptr>:
1156 it is not permitted to discard text that has yet to be lexed.
1157
1158 Normally it is not necessarily to do this directly, because it suffices to
1159 use the implicit discarding behaviour of L</lex_next_chunk> and things
1160 based on it.  However, if a token stretches across multiple lines,
1161 and the lexing code has kept multiple lines of text in the buffer for
1162 that purpose, then after completion of the token it would be wise to
1163 explicitly discard the now-unneeded earlier lines, to avoid future
1164 multi-line tokens growing the buffer without bound.
1165
1166 =cut
1167 */
1168
1169 void
1170 Perl_lex_discard_to(pTHX_ char *ptr)
1171 {
1172     char *buf;
1173     STRLEN discard_len;
1174     PERL_ARGS_ASSERT_LEX_DISCARD_TO;
1175     buf = SvPVX(PL_parser->linestr);
1176     if (ptr < buf)
1177         Perl_croak(aTHX_ "Lexing code internal error (%s)", "lex_discard_to");
1178     if (ptr == buf)
1179         return;
1180     if (ptr > PL_parser->bufptr)
1181         Perl_croak(aTHX_ "Lexing code internal error (%s)", "lex_discard_to");
1182     discard_len = ptr - buf;
1183     if (PL_parser->oldbufptr < ptr)
1184         PL_parser->oldbufptr = ptr;
1185     if (PL_parser->oldoldbufptr < ptr)
1186         PL_parser->oldoldbufptr = ptr;
1187     if (PL_parser->last_uni && PL_parser->last_uni < ptr)
1188         PL_parser->last_uni = NULL;
1189     if (PL_parser->last_lop && PL_parser->last_lop < ptr)
1190         PL_parser->last_lop = NULL;
1191     Move(ptr, buf, PL_parser->bufend+1-ptr, char);
1192     SvCUR_set(PL_parser->linestr, SvCUR(PL_parser->linestr) - discard_len);
1193     PL_parser->bufend -= discard_len;
1194     PL_parser->bufptr -= discard_len;
1195     PL_parser->oldbufptr -= discard_len;
1196     PL_parser->oldoldbufptr -= discard_len;
1197     if (PL_parser->last_uni)
1198         PL_parser->last_uni -= discard_len;
1199     if (PL_parser->last_lop)
1200         PL_parser->last_lop -= discard_len;
1201 }
1202
1203 /*
1204 =for apidoc Amx|bool|lex_next_chunk|U32 flags
1205
1206 Reads in the next chunk of text to be lexed, appending it to
1207 L</PL_parser-E<gt>linestr>.  This should be called when lexing code has
1208 looked to the end of the current chunk and wants to know more.  It is
1209 usual, but not necessary, for lexing to have consumed the entirety of
1210 the current chunk at this time.
1211
1212 If L</PL_parser-E<gt>bufptr> is pointing to the very end of the current
1213 chunk (i.e., the current chunk has been entirely consumed), normally the
1214 current chunk will be discarded at the same time that the new chunk is
1215 read in.  If I<flags> includes C<LEX_KEEP_PREVIOUS>, the current chunk
1216 will not be discarded.  If the current chunk has not been entirely
1217 consumed, then it will not be discarded regardless of the flag.
1218
1219 Returns true if some new text was added to the buffer, or false if the
1220 buffer has reached the end of the input text.
1221
1222 =cut
1223 */
1224
1225 #define LEX_FAKE_EOF 0x80000000
1226
1227 bool
1228 Perl_lex_next_chunk(pTHX_ U32 flags)
1229 {
1230     SV *linestr;
1231     char *buf;
1232     STRLEN old_bufend_pos, new_bufend_pos;
1233     STRLEN bufptr_pos, oldbufptr_pos, oldoldbufptr_pos;
1234     STRLEN linestart_pos, last_uni_pos, last_lop_pos;
1235     bool got_some_for_debugger = 0;
1236     bool got_some;
1237     if (flags & ~(LEX_KEEP_PREVIOUS|LEX_FAKE_EOF))
1238         Perl_croak(aTHX_ "Lexing code internal error (%s)", "lex_next_chunk");
1239     linestr = PL_parser->linestr;
1240     buf = SvPVX(linestr);
1241     if (!(flags & LEX_KEEP_PREVIOUS) &&
1242             PL_parser->bufptr == PL_parser->bufend) {
1243         old_bufend_pos = bufptr_pos = oldbufptr_pos = oldoldbufptr_pos = 0;
1244         linestart_pos = 0;
1245         if (PL_parser->last_uni != PL_parser->bufend)
1246             PL_parser->last_uni = NULL;
1247         if (PL_parser->last_lop != PL_parser->bufend)
1248             PL_parser->last_lop = NULL;
1249         last_uni_pos = last_lop_pos = 0;
1250         *buf = 0;
1251         SvCUR(linestr) = 0;
1252     } else {
1253         old_bufend_pos = PL_parser->bufend - buf;
1254         bufptr_pos = PL_parser->bufptr - buf;
1255         oldbufptr_pos = PL_parser->oldbufptr - buf;
1256         oldoldbufptr_pos = PL_parser->oldoldbufptr - buf;
1257         linestart_pos = PL_parser->linestart - buf;
1258         last_uni_pos = PL_parser->last_uni ? PL_parser->last_uni - buf : 0;
1259         last_lop_pos = PL_parser->last_lop ? PL_parser->last_lop - buf : 0;
1260     }
1261     if (flags & LEX_FAKE_EOF) {
1262         goto eof;
1263     } else if (!PL_parser->rsfp && !PL_parser->filtered) {
1264         got_some = 0;
1265     } else if (filter_gets(linestr, old_bufend_pos)) {
1266         got_some = 1;
1267         got_some_for_debugger = 1;
1268     } else {
1269         if (!SvPOK(linestr))   /* can get undefined by filter_gets */
1270             sv_setpvs(linestr, "");
1271         eof:
1272         /* End of real input.  Close filehandle (unless it was STDIN),
1273          * then add implicit termination.
1274          */
1275         if ((PerlIO*)PL_parser->rsfp == PerlIO_stdin())
1276             PerlIO_clearerr(PL_parser->rsfp);
1277         else if (PL_parser->rsfp)
1278             (void)PerlIO_close(PL_parser->rsfp);
1279         PL_parser->rsfp = NULL;
1280         PL_parser->in_pod = PL_parser->filtered = 0;
1281 #ifdef PERL_MAD
1282         if (PL_madskills && !PL_in_eval && (PL_minus_p || PL_minus_n))
1283             PL_faketokens = 1;
1284 #endif
1285         if (!PL_in_eval && PL_minus_p) {
1286             sv_catpvs(linestr,
1287                 /*{*/";}continue{print or die qq(-p destination: $!\\n);}");
1288             PL_minus_n = PL_minus_p = 0;
1289         } else if (!PL_in_eval && PL_minus_n) {
1290             sv_catpvs(linestr, /*{*/";}");
1291             PL_minus_n = 0;
1292         } else
1293             sv_catpvs(linestr, ";");
1294         got_some = 1;
1295     }
1296     buf = SvPVX(linestr);
1297     new_bufend_pos = SvCUR(linestr);
1298     PL_parser->bufend = buf + new_bufend_pos;
1299     PL_parser->bufptr = buf + bufptr_pos;
1300     PL_parser->oldbufptr = buf + oldbufptr_pos;
1301     PL_parser->oldoldbufptr = buf + oldoldbufptr_pos;
1302     PL_parser->linestart = buf + linestart_pos;
1303     if (PL_parser->last_uni)
1304         PL_parser->last_uni = buf + last_uni_pos;
1305     if (PL_parser->last_lop)
1306         PL_parser->last_lop = buf + last_lop_pos;
1307     if (got_some_for_debugger && (PERLDB_LINE || PERLDB_SAVESRC) &&
1308             PL_curstash != PL_debstash) {
1309         /* debugger active and we're not compiling the debugger code,
1310          * so store the line into the debugger's array of lines
1311          */
1312         update_debugger_info(NULL, buf+old_bufend_pos,
1313             new_bufend_pos-old_bufend_pos);
1314     }
1315     return got_some;
1316 }
1317
1318 /*
1319 =for apidoc Amx|I32|lex_peek_unichar|U32 flags
1320
1321 Looks ahead one (Unicode) character in the text currently being lexed.
1322 Returns the codepoint (unsigned integer value) of the next character,
1323 or -1 if lexing has reached the end of the input text.  To consume the
1324 peeked character, use L</lex_read_unichar>.
1325
1326 If the next character is in (or extends into) the next chunk of input
1327 text, the next chunk will be read in.  Normally the current chunk will be
1328 discarded at the same time, but if I<flags> includes C<LEX_KEEP_PREVIOUS>
1329 then the current chunk will not be discarded.
1330
1331 If the input is being interpreted as UTF-8 and a UTF-8 encoding error
1332 is encountered, an exception is generated.
1333
1334 =cut
1335 */
1336
1337 I32
1338 Perl_lex_peek_unichar(pTHX_ U32 flags)
1339 {
1340     dVAR;
1341     char *s, *bufend;
1342     if (flags & ~(LEX_KEEP_PREVIOUS))
1343         Perl_croak(aTHX_ "Lexing code internal error (%s)", "lex_peek_unichar");
1344     s = PL_parser->bufptr;
1345     bufend = PL_parser->bufend;
1346     if (UTF) {
1347         U8 head;
1348         I32 unichar;
1349         STRLEN len, retlen;
1350         if (s == bufend) {
1351             if (!lex_next_chunk(flags))
1352                 return -1;
1353             s = PL_parser->bufptr;
1354             bufend = PL_parser->bufend;
1355         }
1356         head = (U8)*s;
1357         if (!(head & 0x80))
1358             return head;
1359         if (head & 0x40) {
1360             len = PL_utf8skip[head];
1361             while ((STRLEN)(bufend-s) < len) {
1362                 if (!lex_next_chunk(flags | LEX_KEEP_PREVIOUS))
1363                     break;
1364                 s = PL_parser->bufptr;
1365                 bufend = PL_parser->bufend;
1366             }
1367         }
1368         unichar = utf8n_to_uvuni((U8*)s, bufend-s, &retlen, UTF8_CHECK_ONLY);
1369         if (retlen == (STRLEN)-1) {
1370             /* malformed UTF-8 */
1371             ENTER;
1372             SAVESPTR(PL_warnhook);
1373             PL_warnhook = PERL_WARNHOOK_FATAL;
1374             utf8n_to_uvuni((U8*)s, bufend-s, NULL, 0);
1375             LEAVE;
1376         }
1377         return unichar;
1378     } else {
1379         if (s == bufend) {
1380             if (!lex_next_chunk(flags))
1381                 return -1;
1382             s = PL_parser->bufptr;
1383         }
1384         return (U8)*s;
1385     }
1386 }
1387
1388 /*
1389 =for apidoc Amx|I32|lex_read_unichar|U32 flags
1390
1391 Reads the next (Unicode) character in the text currently being lexed.
1392 Returns the codepoint (unsigned integer value) of the character read,
1393 and moves L</PL_parser-E<gt>bufptr> past the character, or returns -1
1394 if lexing has reached the end of the input text.  To non-destructively
1395 examine the next character, use L</lex_peek_unichar> instead.
1396
1397 If the next character is in (or extends into) the next chunk of input
1398 text, the next chunk will be read in.  Normally the current chunk will be
1399 discarded at the same time, but if I<flags> includes C<LEX_KEEP_PREVIOUS>
1400 then the current chunk will not be discarded.
1401
1402 If the input is being interpreted as UTF-8 and a UTF-8 encoding error
1403 is encountered, an exception is generated.
1404
1405 =cut
1406 */
1407
1408 I32
1409 Perl_lex_read_unichar(pTHX_ U32 flags)
1410 {
1411     I32 c;
1412     if (flags & ~(LEX_KEEP_PREVIOUS))
1413         Perl_croak(aTHX_ "Lexing code internal error (%s)", "lex_read_unichar");
1414     c = lex_peek_unichar(flags);
1415     if (c != -1) {
1416         if (c == '\n')
1417             CopLINE_inc(PL_curcop);
1418         if (UTF)
1419             PL_parser->bufptr += UTF8SKIP(PL_parser->bufptr);
1420         else
1421             ++(PL_parser->bufptr);
1422     }
1423     return c;
1424 }
1425
1426 /*
1427 =for apidoc Amx|void|lex_read_space|U32 flags
1428
1429 Reads optional spaces, in Perl style, in the text currently being
1430 lexed.  The spaces may include ordinary whitespace characters and
1431 Perl-style comments.  C<#line> directives are processed if encountered.
1432 L</PL_parser-E<gt>bufptr> is moved past the spaces, so that it points
1433 at a non-space character (or the end of the input text).
1434
1435 If spaces extend into the next chunk of input text, the next chunk will
1436 be read in.  Normally the current chunk will be discarded at the same
1437 time, but if I<flags> includes C<LEX_KEEP_PREVIOUS> then the current
1438 chunk will not be discarded.
1439
1440 =cut
1441 */
1442
1443 #define LEX_NO_NEXT_CHUNK 0x80000000
1444
1445 void
1446 Perl_lex_read_space(pTHX_ U32 flags)
1447 {
1448     char *s, *bufend;
1449     bool need_incline = 0;
1450     if (flags & ~(LEX_KEEP_PREVIOUS|LEX_NO_NEXT_CHUNK))
1451         Perl_croak(aTHX_ "Lexing code internal error (%s)", "lex_read_space");
1452 #ifdef PERL_MAD
1453     if (PL_skipwhite) {
1454         sv_free(PL_skipwhite);
1455         PL_skipwhite = NULL;
1456     }
1457     if (PL_madskills)
1458         PL_skipwhite = newSVpvs("");
1459 #endif /* PERL_MAD */
1460     s = PL_parser->bufptr;
1461     bufend = PL_parser->bufend;
1462     while (1) {
1463         char c = *s;
1464         if (c == '#') {
1465             do {
1466                 c = *++s;
1467             } while (!(c == '\n' || (c == 0 && s == bufend)));
1468         } else if (c == '\n') {
1469             s++;
1470             PL_parser->linestart = s;
1471             if (s == bufend)
1472                 need_incline = 1;
1473             else
1474                 incline(s);
1475         } else if (isSPACE(c)) {
1476             s++;
1477         } else if (c == 0 && s == bufend) {
1478             bool got_more;
1479 #ifdef PERL_MAD
1480             if (PL_madskills)
1481                 sv_catpvn(PL_skipwhite, PL_parser->bufptr, s-PL_parser->bufptr);
1482 #endif /* PERL_MAD */
1483             if (flags & LEX_NO_NEXT_CHUNK)
1484                 break;
1485             PL_parser->bufptr = s;
1486             CopLINE_inc(PL_curcop);
1487             got_more = lex_next_chunk(flags);
1488             CopLINE_dec(PL_curcop);
1489             s = PL_parser->bufptr;
1490             bufend = PL_parser->bufend;
1491             if (!got_more)
1492                 break;
1493             if (need_incline && PL_parser->rsfp) {
1494                 incline(s);
1495                 need_incline = 0;
1496             }
1497         } else {
1498             break;
1499         }
1500     }
1501 #ifdef PERL_MAD
1502     if (PL_madskills)
1503         sv_catpvn(PL_skipwhite, PL_parser->bufptr, s-PL_parser->bufptr);
1504 #endif /* PERL_MAD */
1505     PL_parser->bufptr = s;
1506 }
1507
1508 /*
1509  * S_incline
1510  * This subroutine has nothing to do with tilting, whether at windmills
1511  * or pinball tables.  Its name is short for "increment line".  It
1512  * increments the current line number in CopLINE(PL_curcop) and checks
1513  * to see whether the line starts with a comment of the form
1514  *    # line 500 "foo.pm"
1515  * If so, it sets the current line number and file to the values in the comment.
1516  */
1517
1518 STATIC void
1519 S_incline(pTHX_ const char *s)
1520 {
1521     dVAR;
1522     const char *t;
1523     const char *n;
1524     const char *e;
1525     line_t line_num;
1526
1527     PERL_ARGS_ASSERT_INCLINE;
1528
1529     CopLINE_inc(PL_curcop);
1530     if (*s++ != '#')
1531         return;
1532     while (SPACE_OR_TAB(*s))
1533         s++;
1534     if (strnEQ(s, "line", 4))
1535         s += 4;
1536     else
1537         return;
1538     if (SPACE_OR_TAB(*s))
1539         s++;
1540     else
1541         return;
1542     while (SPACE_OR_TAB(*s))
1543         s++;
1544     if (!isDIGIT(*s))
1545         return;
1546
1547     n = s;
1548     while (isDIGIT(*s))
1549         s++;
1550     if (!SPACE_OR_TAB(*s) && *s != '\r' && *s != '\n' && *s != '\0')
1551         return;
1552     while (SPACE_OR_TAB(*s))
1553         s++;
1554     if (*s == '"' && (t = strchr(s+1, '"'))) {
1555         s++;
1556         e = t + 1;
1557     }
1558     else {
1559         t = s;
1560         while (!isSPACE(*t))
1561             t++;
1562         e = t;
1563     }
1564     while (SPACE_OR_TAB(*e) || *e == '\r' || *e == '\f')
1565         e++;
1566     if (*e != '\n' && *e != '\0')
1567         return;         /* false alarm */
1568
1569     line_num = atoi(n)-1;
1570
1571     if (t - s > 0) {
1572         const STRLEN len = t - s;
1573         SV *const temp_sv = CopFILESV(PL_curcop);
1574         const char *cf;
1575         STRLEN tmplen;
1576
1577         if (temp_sv) {
1578             cf = SvPVX(temp_sv);
1579             tmplen = SvCUR(temp_sv);
1580         } else {
1581             cf = NULL;
1582             tmplen = 0;
1583         }
1584
1585         if (!PL_rsfp && !PL_parser->filtered) {
1586             /* must copy *{"::_<(eval N)[oldfilename:L]"}
1587              * to *{"::_<newfilename"} */
1588             /* However, the long form of evals is only turned on by the
1589                debugger - usually they're "(eval %lu)" */
1590             char smallbuf[128];
1591             char *tmpbuf;
1592             GV **gvp;
1593             STRLEN tmplen2 = len;
1594             if (tmplen + 2 <= sizeof smallbuf)
1595                 tmpbuf = smallbuf;
1596             else
1597                 Newx(tmpbuf, tmplen + 2, char);
1598             tmpbuf[0] = '_';
1599             tmpbuf[1] = '<';
1600             memcpy(tmpbuf + 2, cf, tmplen);
1601             tmplen += 2;
1602             gvp = (GV**)hv_fetch(PL_defstash, tmpbuf, tmplen, FALSE);
1603             if (gvp) {
1604                 char *tmpbuf2;
1605                 GV *gv2;
1606
1607                 if (tmplen2 + 2 <= sizeof smallbuf)
1608                     tmpbuf2 = smallbuf;
1609                 else
1610                     Newx(tmpbuf2, tmplen2 + 2, char);
1611
1612                 if (tmpbuf2 != smallbuf || tmpbuf != smallbuf) {
1613                     /* Either they malloc'd it, or we malloc'd it,
1614                        so no prefix is present in ours.  */
1615                     tmpbuf2[0] = '_';
1616                     tmpbuf2[1] = '<';
1617                 }
1618
1619                 memcpy(tmpbuf2 + 2, s, tmplen2);
1620                 tmplen2 += 2;
1621
1622                 gv2 = *(GV**)hv_fetch(PL_defstash, tmpbuf2, tmplen2, TRUE);
1623                 if (!isGV(gv2)) {
1624                     gv_init(gv2, PL_defstash, tmpbuf2, tmplen2, FALSE);
1625                     /* adjust ${"::_<newfilename"} to store the new file name */
1626                     GvSV(gv2) = newSVpvn(tmpbuf2 + 2, tmplen2 - 2);
1627                     /* The line number may differ. If that is the case,
1628                        alias the saved lines that are in the array.
1629                        Otherwise alias the whole array. */
1630                     if (CopLINE(PL_curcop) == line_num) {
1631                         GvHV(gv2) = MUTABLE_HV(SvREFCNT_inc(GvHV(*gvp)));
1632                         GvAV(gv2) = MUTABLE_AV(SvREFCNT_inc(GvAV(*gvp)));
1633                     }
1634                     else if (GvAV(*gvp)) {
1635                         AV * const av = GvAV(*gvp);
1636                         const I32 start = CopLINE(PL_curcop)+1;
1637                         I32 items = AvFILLp(av) - start;
1638                         if (items > 0) {
1639                             AV * const av2 = GvAVn(gv2);
1640                             SV **svp = AvARRAY(av) + start;
1641                             I32 l = (I32)line_num+1;
1642                             while (items--)
1643                                 av_store(av2, l++, SvREFCNT_inc(*svp++));
1644                         }
1645                     }
1646                 }
1647
1648                 if (tmpbuf2 != smallbuf) Safefree(tmpbuf2);
1649             }
1650             if (tmpbuf != smallbuf) Safefree(tmpbuf);
1651         }
1652         CopFILE_free(PL_curcop);
1653         CopFILE_setn(PL_curcop, s, len);
1654     }
1655     CopLINE_set(PL_curcop, line_num);
1656 }
1657
1658 #ifdef PERL_MAD
1659 /* skip space before PL_thistoken */
1660
1661 STATIC char *
1662 S_skipspace0(pTHX_ register char *s)
1663 {
1664     PERL_ARGS_ASSERT_SKIPSPACE0;
1665
1666     s = skipspace(s);
1667     if (!PL_madskills)
1668         return s;
1669     if (PL_skipwhite) {
1670         if (!PL_thiswhite)
1671             PL_thiswhite = newSVpvs("");
1672         sv_catsv(PL_thiswhite, PL_skipwhite);
1673         sv_free(PL_skipwhite);
1674         PL_skipwhite = 0;
1675     }
1676     PL_realtokenstart = s - SvPVX(PL_linestr);
1677     return s;
1678 }
1679
1680 /* skip space after PL_thistoken */
1681
1682 STATIC char *
1683 S_skipspace1(pTHX_ register char *s)
1684 {
1685     const char *start = s;
1686     I32 startoff = start - SvPVX(PL_linestr);
1687
1688     PERL_ARGS_ASSERT_SKIPSPACE1;
1689
1690     s = skipspace(s);
1691     if (!PL_madskills)
1692         return s;
1693     start = SvPVX(PL_linestr) + startoff;
1694     if (!PL_thistoken && PL_realtokenstart >= 0) {
1695         const char * const tstart = SvPVX(PL_linestr) + PL_realtokenstart;
1696         PL_thistoken = newSVpvn(tstart, start - tstart);
1697     }
1698     PL_realtokenstart = -1;
1699     if (PL_skipwhite) {
1700         if (!PL_nextwhite)
1701             PL_nextwhite = newSVpvs("");
1702         sv_catsv(PL_nextwhite, PL_skipwhite);
1703         sv_free(PL_skipwhite);
1704         PL_skipwhite = 0;
1705     }
1706     return s;
1707 }
1708
1709 STATIC char *
1710 S_skipspace2(pTHX_ register char *s, SV **svp)
1711 {
1712     char *start;
1713     const I32 bufptroff = PL_bufptr - SvPVX(PL_linestr);
1714     const I32 startoff = s - SvPVX(PL_linestr);
1715
1716     PERL_ARGS_ASSERT_SKIPSPACE2;
1717
1718     s = skipspace(s);
1719     PL_bufptr = SvPVX(PL_linestr) + bufptroff;
1720     if (!PL_madskills || !svp)
1721         return s;
1722     start = SvPVX(PL_linestr) + startoff;
1723     if (!PL_thistoken && PL_realtokenstart >= 0) {
1724         char * const tstart = SvPVX(PL_linestr) + PL_realtokenstart;
1725         PL_thistoken = newSVpvn(tstart, start - tstart);
1726         PL_realtokenstart = -1;
1727     }
1728     if (PL_skipwhite) {
1729         if (!*svp)
1730             *svp = newSVpvs("");
1731         sv_setsv(*svp, PL_skipwhite);
1732         sv_free(PL_skipwhite);
1733         PL_skipwhite = 0;
1734     }
1735     
1736     return s;
1737 }
1738 #endif
1739
1740 STATIC void
1741 S_update_debugger_info(pTHX_ SV *orig_sv, const char *const buf, STRLEN len)
1742 {
1743     AV *av = CopFILEAVx(PL_curcop);
1744     if (av) {
1745         SV * const sv = newSV_type(SVt_PVMG);
1746         if (orig_sv)
1747             sv_setsv(sv, orig_sv);
1748         else
1749             sv_setpvn(sv, buf, len);
1750         (void)SvIOK_on(sv);
1751         SvIV_set(sv, 0);
1752         av_store(av, (I32)CopLINE(PL_curcop), sv);
1753     }
1754 }
1755
1756 /*
1757  * S_skipspace
1758  * Called to gobble the appropriate amount and type of whitespace.
1759  * Skips comments as well.
1760  */
1761
1762 STATIC char *
1763 S_skipspace(pTHX_ register char *s)
1764 {
1765 #ifdef PERL_MAD
1766     char *start = s;
1767 #endif /* PERL_MAD */
1768     PERL_ARGS_ASSERT_SKIPSPACE;
1769 #ifdef PERL_MAD
1770     if (PL_skipwhite) {
1771         sv_free(PL_skipwhite);
1772         PL_skipwhite = NULL;
1773     }
1774 #endif /* PERL_MAD */
1775     if (PL_lex_formbrack && PL_lex_brackets <= PL_lex_formbrack) {
1776         while (s < PL_bufend && SPACE_OR_TAB(*s))
1777             s++;
1778     } else {
1779         STRLEN bufptr_pos = PL_bufptr - SvPVX(PL_linestr);
1780         PL_bufptr = s;
1781         lex_read_space(LEX_KEEP_PREVIOUS |
1782                 (PL_sublex_info.sub_inwhat || PL_lex_state == LEX_FORMLINE ?
1783                     LEX_NO_NEXT_CHUNK : 0));
1784         s = PL_bufptr;
1785         PL_bufptr = SvPVX(PL_linestr) + bufptr_pos;
1786         if (PL_linestart > PL_bufptr)
1787             PL_bufptr = PL_linestart;
1788         return s;
1789     }
1790 #ifdef PERL_MAD
1791     if (PL_madskills)
1792         PL_skipwhite = newSVpvn(start, s-start);
1793 #endif /* PERL_MAD */
1794     return s;
1795 }
1796
1797 /*
1798  * S_check_uni
1799  * Check the unary operators to ensure there's no ambiguity in how they're
1800  * used.  An ambiguous piece of code would be:
1801  *     rand + 5
1802  * This doesn't mean rand() + 5.  Because rand() is a unary operator,
1803  * the +5 is its argument.
1804  */
1805
1806 STATIC void
1807 S_check_uni(pTHX)
1808 {
1809     dVAR;
1810     const char *s;
1811     const char *t;
1812
1813     if (PL_oldoldbufptr != PL_last_uni)
1814         return;
1815     while (isSPACE(*PL_last_uni))
1816         PL_last_uni++;
1817     s = PL_last_uni;
1818     while (isALNUM_lazy_if(s,UTF) || *s == '-')
1819         s++;
1820     if ((t = strchr(s, '(')) && t < PL_bufptr)
1821         return;
1822
1823     Perl_ck_warner_d(aTHX_ packWARN(WARN_AMBIGUOUS),
1824                      "Warning: Use of \"%.*s\" without parentheses is ambiguous",
1825                      (int)(s - PL_last_uni), PL_last_uni);
1826 }
1827
1828 /*
1829  * LOP : macro to build a list operator.  Its behaviour has been replaced
1830  * with a subroutine, S_lop() for which LOP is just another name.
1831  */
1832
1833 #define LOP(f,x) return lop(f,x,s)
1834
1835 /*
1836  * S_lop
1837  * Build a list operator (or something that might be one).  The rules:
1838  *  - if we have a next token, then it's a list operator [why?]
1839  *  - if the next thing is an opening paren, then it's a function
1840  *  - else it's a list operator
1841  */
1842
1843 STATIC I32
1844 S_lop(pTHX_ I32 f, int x, char *s)
1845 {
1846     dVAR;
1847
1848     PERL_ARGS_ASSERT_LOP;
1849
1850     pl_yylval.ival = f;
1851     CLINE;
1852     PL_expect = x;
1853     PL_bufptr = s;
1854     PL_last_lop = PL_oldbufptr;
1855     PL_last_lop_op = (OPCODE)f;
1856 #ifdef PERL_MAD
1857     if (PL_lasttoke)
1858         goto lstop;
1859 #else
1860     if (PL_nexttoke)
1861         goto lstop;
1862 #endif
1863     if (*s == '(')
1864         return REPORT(FUNC);
1865     s = PEEKSPACE(s);
1866     if (*s == '(')
1867         return REPORT(FUNC);
1868     else {
1869         lstop:
1870         if (!PL_lex_allbrackets && PL_lex_fakeeof > LEX_FAKEEOF_LOWLOGIC)
1871             PL_lex_fakeeof = LEX_FAKEEOF_LOWLOGIC;
1872         return REPORT(LSTOP);
1873     }
1874 }
1875
1876 #ifdef PERL_MAD
1877  /*
1878  * S_start_force
1879  * Sets up for an eventual force_next().  start_force(0) basically does
1880  * an unshift, while start_force(-1) does a push.  yylex removes items
1881  * on the "pop" end.
1882  */
1883
1884 STATIC void
1885 S_start_force(pTHX_ int where)
1886 {
1887     int i;
1888
1889     if (where < 0)      /* so people can duplicate start_force(PL_curforce) */
1890         where = PL_lasttoke;
1891     assert(PL_curforce < 0 || PL_curforce == where);
1892     if (PL_curforce != where) {
1893         for (i = PL_lasttoke; i > where; --i) {
1894             PL_nexttoke[i] = PL_nexttoke[i-1];
1895         }
1896         PL_lasttoke++;
1897     }
1898     if (PL_curforce < 0)        /* in case of duplicate start_force() */
1899         Zero(&PL_nexttoke[where], 1, NEXTTOKE);
1900     PL_curforce = where;
1901     if (PL_nextwhite) {
1902         if (PL_madskills)
1903             curmad('^', newSVpvs(""));
1904         CURMAD('_', PL_nextwhite);
1905     }
1906 }
1907
1908 STATIC void
1909 S_curmad(pTHX_ char slot, SV *sv)
1910 {
1911     MADPROP **where;
1912
1913     if (!sv)
1914         return;
1915     if (PL_curforce < 0)
1916         where = &PL_thismad;
1917     else
1918         where = &PL_nexttoke[PL_curforce].next_mad;
1919
1920     if (PL_faketokens)
1921         sv_setpvs(sv, "");
1922     else {
1923         if (!IN_BYTES) {
1924             if (UTF && is_utf8_string((U8*)SvPVX(sv), SvCUR(sv)))
1925                 SvUTF8_on(sv);
1926             else if (PL_encoding) {
1927                 sv_recode_to_utf8(sv, PL_encoding);
1928             }
1929         }
1930     }
1931
1932     /* keep a slot open for the head of the list? */
1933     if (slot != '_' && *where && (*where)->mad_key == '^') {
1934         (*where)->mad_key = slot;
1935         sv_free(MUTABLE_SV(((*where)->mad_val)));
1936         (*where)->mad_val = (void*)sv;
1937     }
1938     else
1939         addmad(newMADsv(slot, sv), where, 0);
1940 }
1941 #else
1942 #  define start_force(where)    NOOP
1943 #  define curmad(slot, sv)      NOOP
1944 #endif
1945
1946 /*
1947  * S_force_next
1948  * When the lexer realizes it knows the next token (for instance,
1949  * it is reordering tokens for the parser) then it can call S_force_next
1950  * to know what token to return the next time the lexer is called.  Caller
1951  * will need to set PL_nextval[] (or PL_nexttoke[].next_val with PERL_MAD),
1952  * and possibly PL_expect to ensure the lexer handles the token correctly.
1953  */
1954
1955 STATIC void
1956 S_force_next(pTHX_ I32 type)
1957 {
1958     dVAR;
1959 #ifdef DEBUGGING
1960     if (DEBUG_T_TEST) {
1961         PerlIO_printf(Perl_debug_log, "### forced token:\n");
1962         tokereport(type, &NEXTVAL_NEXTTOKE);
1963     }
1964 #endif
1965 #ifdef PERL_MAD
1966     if (PL_curforce < 0)
1967         start_force(PL_lasttoke);
1968     PL_nexttoke[PL_curforce].next_type = type;
1969     if (PL_lex_state != LEX_KNOWNEXT)
1970         PL_lex_defer = PL_lex_state;
1971     PL_lex_state = LEX_KNOWNEXT;
1972     PL_lex_expect = PL_expect;
1973     PL_curforce = -1;
1974 #else
1975     PL_nexttype[PL_nexttoke] = type;
1976     PL_nexttoke++;
1977     if (PL_lex_state != LEX_KNOWNEXT) {
1978         PL_lex_defer = PL_lex_state;
1979         PL_lex_expect = PL_expect;
1980         PL_lex_state = LEX_KNOWNEXT;
1981     }
1982 #endif
1983 }
1984
1985 void
1986 Perl_yyunlex(pTHX)
1987 {
1988     int yyc = PL_parser->yychar;
1989     if (yyc != YYEMPTY) {
1990         if (yyc) {
1991             start_force(-1);
1992             NEXTVAL_NEXTTOKE = PL_parser->yylval;
1993             if (yyc == '{'/*}*/ || yyc == HASHBRACK || yyc == '['/*]*/) {
1994                 PL_lex_allbrackets--;
1995                 PL_lex_brackets--;
1996                 yyc |= (3<<24) | (PL_lex_brackstack[PL_lex_brackets] << 16);
1997             } else if (yyc == '('/*)*/) {
1998                 PL_lex_allbrackets--;
1999                 yyc |= (2<<24);
2000             }
2001             force_next(yyc);
2002         }
2003         PL_parser->yychar = YYEMPTY;
2004     }
2005 }
2006
2007 STATIC SV *
2008 S_newSV_maybe_utf8(pTHX_ const char *const start, STRLEN len)
2009 {
2010     dVAR;
2011     SV * const sv = newSVpvn_utf8(start, len,
2012                                   !IN_BYTES
2013                                   && UTF
2014                                   && !is_ascii_string((const U8*)start, len)
2015                                   && is_utf8_string((const U8*)start, len));
2016     return sv;
2017 }
2018
2019 /*
2020  * S_force_word
2021  * When the lexer knows the next thing is a word (for instance, it has
2022  * just seen -> and it knows that the next char is a word char, then
2023  * it calls S_force_word to stick the next word into the PL_nexttoke/val
2024  * lookahead.
2025  *
2026  * Arguments:
2027  *   char *start : buffer position (must be within PL_linestr)
2028  *   int token   : PL_next* will be this type of bare word (e.g., METHOD,WORD)
2029  *   int check_keyword : if true, Perl checks to make sure the word isn't
2030  *       a keyword (do this if the word is a label, e.g. goto FOO)
2031  *   int allow_pack : if true, : characters will also be allowed (require,
2032  *       use, etc. do this)
2033  *   int allow_initial_tick : used by the "sub" lexer only.
2034  */
2035
2036 STATIC char *
2037 S_force_word(pTHX_ register char *start, int token, int check_keyword, int allow_pack, int allow_initial_tick)
2038 {
2039     dVAR;
2040     register char *s;
2041     STRLEN len;
2042
2043     PERL_ARGS_ASSERT_FORCE_WORD;
2044
2045     start = SKIPSPACE1(start);
2046     s = start;
2047     if (isIDFIRST_lazy_if(s,UTF) ||
2048         (allow_pack && *s == ':') ||
2049         (allow_initial_tick && *s == '\'') )
2050     {
2051         s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, allow_pack, &len);
2052         if (check_keyword && keyword(PL_tokenbuf, len, 0))
2053             return start;
2054         start_force(PL_curforce);
2055         if (PL_madskills)
2056             curmad('X', newSVpvn(start,s-start));
2057         if (token == METHOD) {
2058             s = SKIPSPACE1(s);
2059             if (*s == '(')
2060                 PL_expect = XTERM;
2061             else {
2062                 PL_expect = XOPERATOR;
2063             }
2064         }
2065         if (PL_madskills)
2066             curmad('g', newSVpvs( "forced" ));
2067         NEXTVAL_NEXTTOKE.opval
2068             = (OP*)newSVOP(OP_CONST,0,
2069                            S_newSV_maybe_utf8(aTHX_ PL_tokenbuf, len));
2070         NEXTVAL_NEXTTOKE.opval->op_private |= OPpCONST_BARE;
2071         force_next(token);
2072     }
2073     return s;
2074 }
2075
2076 /*
2077  * S_force_ident
2078  * Called when the lexer wants $foo *foo &foo etc, but the program
2079  * text only contains the "foo" portion.  The first argument is a pointer
2080  * to the "foo", and the second argument is the type symbol to prefix.
2081  * Forces the next token to be a "WORD".
2082  * Creates the symbol if it didn't already exist (via gv_fetchpv()).
2083  */
2084
2085 STATIC void
2086 S_force_ident(pTHX_ register const char *s, int kind)
2087 {
2088     dVAR;
2089
2090     PERL_ARGS_ASSERT_FORCE_IDENT;
2091
2092     if (*s) {
2093         const STRLEN len = strlen(s);
2094         OP* const o = (OP*)newSVOP(OP_CONST, 0, newSVpvn_flags(s, len,
2095                                                                 UTF ? SVf_UTF8 : 0));
2096         start_force(PL_curforce);
2097         NEXTVAL_NEXTTOKE.opval = o;
2098         force_next(WORD);
2099         if (kind) {
2100             o->op_private = OPpCONST_ENTERED;
2101             /* XXX see note in pp_entereval() for why we forgo typo
2102                warnings if the symbol must be introduced in an eval.
2103                GSAR 96-10-12 */
2104             gv_fetchpvn_flags(s, len,
2105                               (PL_in_eval ? (GV_ADDMULTI | GV_ADDINEVAL)
2106                               : GV_ADD) | ( UTF ? SVf_UTF8 : 0 ),
2107                               kind == '$' ? SVt_PV :
2108                               kind == '@' ? SVt_PVAV :
2109                               kind == '%' ? SVt_PVHV :
2110                               SVt_PVGV
2111                               );
2112         }
2113     }
2114 }
2115
2116 NV
2117 Perl_str_to_version(pTHX_ SV *sv)
2118 {
2119     NV retval = 0.0;
2120     NV nshift = 1.0;
2121     STRLEN len;
2122     const char *start = SvPV_const(sv,len);
2123     const char * const end = start + len;
2124     const bool utf = SvUTF8(sv) ? TRUE : FALSE;
2125
2126     PERL_ARGS_ASSERT_STR_TO_VERSION;
2127
2128     while (start < end) {
2129         STRLEN skip;
2130         UV n;
2131         if (utf)
2132             n = utf8n_to_uvchr((U8*)start, len, &skip, 0);
2133         else {
2134             n = *(U8*)start;
2135             skip = 1;
2136         }
2137         retval += ((NV)n)/nshift;
2138         start += skip;
2139         nshift *= 1000;
2140     }
2141     return retval;
2142 }
2143
2144 /*
2145  * S_force_version
2146  * Forces the next token to be a version number.
2147  * If the next token appears to be an invalid version number, (e.g. "v2b"),
2148  * and if "guessing" is TRUE, then no new token is created (and the caller
2149  * must use an alternative parsing method).
2150  */
2151
2152 STATIC char *
2153 S_force_version(pTHX_ char *s, int guessing)
2154 {
2155     dVAR;
2156     OP *version = NULL;
2157     char *d;
2158 #ifdef PERL_MAD
2159     I32 startoff = s - SvPVX(PL_linestr);
2160 #endif
2161
2162     PERL_ARGS_ASSERT_FORCE_VERSION;
2163
2164     s = SKIPSPACE1(s);
2165
2166     d = s;
2167     if (*d == 'v')
2168         d++;
2169     if (isDIGIT(*d)) {
2170         while (isDIGIT(*d) || *d == '_' || *d == '.')
2171             d++;
2172 #ifdef PERL_MAD
2173         if (PL_madskills) {
2174             start_force(PL_curforce);
2175             curmad('X', newSVpvn(s,d-s));
2176         }
2177 #endif
2178         if (*d == ';' || isSPACE(*d) || *d == '{' || *d == '}' || !*d) {
2179             SV *ver;
2180 #ifdef USE_LOCALE_NUMERIC
2181             char *loc = setlocale(LC_NUMERIC, "C");
2182 #endif
2183             s = scan_num(s, &pl_yylval);
2184 #ifdef USE_LOCALE_NUMERIC
2185             setlocale(LC_NUMERIC, loc);
2186 #endif
2187             version = pl_yylval.opval;
2188             ver = cSVOPx(version)->op_sv;
2189             if (SvPOK(ver) && !SvNIOK(ver)) {
2190                 SvUPGRADE(ver, SVt_PVNV);
2191                 SvNV_set(ver, str_to_version(ver));
2192                 SvNOK_on(ver);          /* hint that it is a version */
2193             }
2194         }
2195         else if (guessing) {
2196 #ifdef PERL_MAD
2197             if (PL_madskills) {
2198                 sv_free(PL_nextwhite);  /* let next token collect whitespace */
2199                 PL_nextwhite = 0;
2200                 s = SvPVX(PL_linestr) + startoff;
2201             }
2202 #endif
2203             return s;
2204         }
2205     }
2206
2207 #ifdef PERL_MAD
2208     if (PL_madskills && !version) {
2209         sv_free(PL_nextwhite);  /* let next token collect whitespace */
2210         PL_nextwhite = 0;
2211         s = SvPVX(PL_linestr) + startoff;
2212     }
2213 #endif
2214     /* NOTE: The parser sees the package name and the VERSION swapped */
2215     start_force(PL_curforce);
2216     NEXTVAL_NEXTTOKE.opval = version;
2217     force_next(WORD);
2218
2219     return s;
2220 }
2221
2222 /*
2223  * S_force_strict_version
2224  * Forces the next token to be a version number using strict syntax rules.
2225  */
2226
2227 STATIC char *
2228 S_force_strict_version(pTHX_ char *s)
2229 {
2230     dVAR;
2231     OP *version = NULL;
2232 #ifdef PERL_MAD
2233     I32 startoff = s - SvPVX(PL_linestr);
2234 #endif
2235     const char *errstr = NULL;
2236
2237     PERL_ARGS_ASSERT_FORCE_STRICT_VERSION;
2238
2239     while (isSPACE(*s)) /* leading whitespace */
2240         s++;
2241
2242     if (is_STRICT_VERSION(s,&errstr)) {
2243         SV *ver = newSV(0);
2244         s = (char *)scan_version(s, ver, 0);
2245         version = newSVOP(OP_CONST, 0, ver);
2246     }
2247     else if ( (*s != ';' && *s != '{' && *s != '}' ) &&
2248             (s = SKIPSPACE1(s), (*s != ';' && *s != '{' && *s != '}' )))
2249     {
2250         PL_bufptr = s;
2251         if (errstr)
2252             yyerror(errstr); /* version required */
2253         return s;
2254     }
2255
2256 #ifdef PERL_MAD
2257     if (PL_madskills && !version) {
2258         sv_free(PL_nextwhite);  /* let next token collect whitespace */
2259         PL_nextwhite = 0;
2260         s = SvPVX(PL_linestr) + startoff;
2261     }
2262 #endif
2263     /* NOTE: The parser sees the package name and the VERSION swapped */
2264     start_force(PL_curforce);
2265     NEXTVAL_NEXTTOKE.opval = version;
2266     force_next(WORD);
2267
2268     return s;
2269 }
2270
2271 /*
2272  * S_tokeq
2273  * Tokenize a quoted string passed in as an SV.  It finds the next
2274  * chunk, up to end of string or a backslash.  It may make a new
2275  * SV containing that chunk (if HINT_NEW_STRING is on).  It also
2276  * turns \\ into \.
2277  */
2278
2279 STATIC SV *
2280 S_tokeq(pTHX_ SV *sv)
2281 {
2282     dVAR;
2283     register char *s;
2284     register char *send;
2285     register char *d;
2286     STRLEN len = 0;
2287     SV *pv = sv;
2288
2289     PERL_ARGS_ASSERT_TOKEQ;
2290
2291     if (!SvLEN(sv))
2292         goto finish;
2293
2294     s = SvPV_force(sv, len);
2295     if (SvTYPE(sv) >= SVt_PVIV && SvIVX(sv) == -1)
2296         goto finish;
2297     send = s + len;
2298     /* This is relying on the SV being "well formed" with a trailing '\0'  */
2299     while (s < send && !(*s == '\\' && s[1] == '\\'))
2300         s++;
2301     if (s == send)
2302         goto finish;
2303     d = s;
2304     if ( PL_hints & HINT_NEW_STRING ) {
2305         pv = newSVpvn_flags(SvPVX_const(pv), len, SVs_TEMP | SvUTF8(sv));
2306     }
2307     while (s < send) {
2308         if (*s == '\\') {
2309             if (s + 1 < send && (s[1] == '\\'))
2310                 s++;            /* all that, just for this */
2311         }
2312         *d++ = *s++;
2313     }
2314     *d = '\0';
2315     SvCUR_set(sv, d - SvPVX_const(sv));
2316   finish:
2317     if ( PL_hints & HINT_NEW_STRING )
2318        return new_constant(NULL, 0, "q", sv, pv, "q", 1);
2319     return sv;
2320 }
2321
2322 /*
2323  * Now come three functions related to double-quote context,
2324  * S_sublex_start, S_sublex_push, and S_sublex_done.  They're used when
2325  * converting things like "\u\Lgnat" into ucfirst(lc("gnat")).  They
2326  * interact with PL_lex_state, and create fake ( ... ) argument lists
2327  * to handle functions and concatenation.
2328  * They assume that whoever calls them will be setting up a fake
2329  * join call, because each subthing puts a ',' after it.  This lets
2330  *   "lower \luPpEr"
2331  * become
2332  *  join($, , 'lower ', lcfirst( 'uPpEr', ) ,)
2333  *
2334  * (I'm not sure whether the spurious commas at the end of lcfirst's
2335  * arguments and join's arguments are created or not).
2336  */
2337
2338 /*
2339  * S_sublex_start
2340  * Assumes that pl_yylval.ival is the op we're creating (e.g. OP_LCFIRST).
2341  *
2342  * Pattern matching will set PL_lex_op to the pattern-matching op to
2343  * make (we return THING if pl_yylval.ival is OP_NULL, PMFUNC otherwise).
2344  *
2345  * OP_CONST and OP_READLINE are easy--just make the new op and return.
2346  *
2347  * Everything else becomes a FUNC.
2348  *
2349  * Sets PL_lex_state to LEX_INTERPPUSH unless (ival was OP_NULL or we
2350  * had an OP_CONST or OP_READLINE).  This just sets us up for a
2351  * call to S_sublex_push().
2352  */
2353
2354 STATIC I32
2355 S_sublex_start(pTHX)
2356 {
2357     dVAR;
2358     register const I32 op_type = pl_yylval.ival;
2359
2360     if (op_type == OP_NULL) {
2361         pl_yylval.opval = PL_lex_op;
2362         PL_lex_op = NULL;
2363         return THING;
2364     }
2365     if (op_type == OP_CONST || op_type == OP_READLINE) {
2366         SV *sv = tokeq(PL_lex_stuff);
2367
2368         if (SvTYPE(sv) == SVt_PVIV) {
2369             /* Overloaded constants, nothing fancy: Convert to SVt_PV: */
2370             STRLEN len;
2371             const char * const p = SvPV_const(sv, len);
2372             SV * const nsv = newSVpvn_flags(p, len, SvUTF8(sv));
2373             SvREFCNT_dec(sv);
2374             sv = nsv;
2375         }
2376         pl_yylval.opval = (OP*)newSVOP(op_type, 0, sv);
2377         PL_lex_stuff = NULL;
2378         /* Allow <FH> // "foo" */
2379         if (op_type == OP_READLINE)
2380             PL_expect = XTERMORDORDOR;
2381         return THING;
2382     }
2383     else if (op_type == OP_BACKTICK && PL_lex_op) {
2384         /* readpipe() vas overriden */
2385         cSVOPx(cLISTOPx(cUNOPx(PL_lex_op)->op_first)->op_first->op_sibling)->op_sv = tokeq(PL_lex_stuff);
2386         pl_yylval.opval = PL_lex_op;
2387         PL_lex_op = NULL;
2388         PL_lex_stuff = NULL;
2389         return THING;
2390     }
2391
2392     PL_sublex_info.super_state = PL_lex_state;
2393     PL_sublex_info.sub_inwhat = (U16)op_type;
2394     PL_sublex_info.sub_op = PL_lex_op;
2395     PL_lex_state = LEX_INTERPPUSH;
2396
2397     PL_expect = XTERM;
2398     if (PL_lex_op) {
2399         pl_yylval.opval = PL_lex_op;
2400         PL_lex_op = NULL;
2401         return PMFUNC;
2402     }
2403     else
2404         return FUNC;
2405 }
2406
2407 /*
2408  * S_sublex_push
2409  * Create a new scope to save the lexing state.  The scope will be
2410  * ended in S_sublex_done.  Returns a '(', starting the function arguments
2411  * to the uc, lc, etc. found before.
2412  * Sets PL_lex_state to LEX_INTERPCONCAT.
2413  */
2414
2415 STATIC I32
2416 S_sublex_push(pTHX)
2417 {
2418     dVAR;
2419     ENTER;
2420
2421     PL_lex_state = PL_sublex_info.super_state;
2422     SAVEBOOL(PL_lex_dojoin);
2423     SAVEI32(PL_lex_brackets);
2424     SAVEI32(PL_lex_allbrackets);
2425     SAVEI8(PL_lex_fakeeof);
2426     SAVEI32(PL_lex_casemods);
2427     SAVEI32(PL_lex_starts);
2428     SAVEI8(PL_lex_state);
2429     SAVEVPTR(PL_lex_inpat);
2430     SAVEI16(PL_lex_inwhat);
2431     SAVECOPLINE(PL_curcop);
2432     SAVEPPTR(PL_bufptr);
2433     SAVEPPTR(PL_bufend);
2434     SAVEPPTR(PL_oldbufptr);
2435     SAVEPPTR(PL_oldoldbufptr);
2436     SAVEPPTR(PL_last_lop);
2437     SAVEPPTR(PL_last_uni);
2438     SAVEPPTR(PL_linestart);
2439     SAVESPTR(PL_linestr);
2440     SAVEGENERICPV(PL_lex_brackstack);
2441     SAVEGENERICPV(PL_lex_casestack);
2442
2443     PL_linestr = PL_lex_stuff;
2444     PL_lex_stuff = NULL;
2445
2446     PL_bufend = PL_bufptr = PL_oldbufptr = PL_oldoldbufptr = PL_linestart
2447         = SvPVX(PL_linestr);
2448     PL_bufend += SvCUR(PL_linestr);
2449     PL_last_lop = PL_last_uni = NULL;
2450     SAVEFREESV(PL_linestr);
2451
2452     PL_lex_dojoin = FALSE;
2453     PL_lex_brackets = 0;
2454     PL_lex_allbrackets = 0;
2455     PL_lex_fakeeof = LEX_FAKEEOF_NEVER;
2456     Newx(PL_lex_brackstack, 120, char);
2457     Newx(PL_lex_casestack, 12, char);
2458     PL_lex_casemods = 0;
2459     *PL_lex_casestack = '\0';
2460     PL_lex_starts = 0;
2461     PL_lex_state = LEX_INTERPCONCAT;
2462     CopLINE_set(PL_curcop, (line_t)PL_multi_start);
2463
2464     PL_lex_inwhat = PL_sublex_info.sub_inwhat;
2465     if (PL_lex_inwhat == OP_TRANSR) PL_lex_inwhat = OP_TRANS;
2466     if (PL_lex_inwhat == OP_MATCH || PL_lex_inwhat == OP_QR || PL_lex_inwhat == OP_SUBST)
2467         PL_lex_inpat = PL_sublex_info.sub_op;
2468     else
2469         PL_lex_inpat = NULL;
2470
2471     return '(';
2472 }
2473
2474 /*
2475  * S_sublex_done
2476  * Restores lexer state after a S_sublex_push.
2477  */
2478
2479 STATIC I32
2480 S_sublex_done(pTHX)
2481 {
2482     dVAR;
2483     if (!PL_lex_starts++) {
2484         SV * const sv = newSVpvs("");
2485         if (SvUTF8(PL_linestr))
2486             SvUTF8_on(sv);
2487         PL_expect = XOPERATOR;
2488         pl_yylval.opval = (OP*)newSVOP(OP_CONST, 0, sv);
2489         return THING;
2490     }
2491
2492     if (PL_lex_casemods) {              /* oops, we've got some unbalanced parens */
2493         PL_lex_state = LEX_INTERPCASEMOD;
2494         return yylex();
2495     }
2496
2497     /* Is there a right-hand side to take care of? (s//RHS/ or tr//RHS/) */
2498     assert(PL_lex_inwhat != OP_TRANSR);
2499     if (PL_lex_repl && (PL_lex_inwhat == OP_SUBST || PL_lex_inwhat == OP_TRANS)) {
2500         PL_linestr = PL_lex_repl;
2501         PL_lex_inpat = 0;
2502         PL_bufend = PL_bufptr = PL_oldbufptr = PL_oldoldbufptr = PL_linestart = SvPVX(PL_linestr);
2503         PL_bufend += SvCUR(PL_linestr);
2504         PL_last_lop = PL_last_uni = NULL;
2505         SAVEFREESV(PL_linestr);
2506         PL_lex_dojoin = FALSE;
2507         PL_lex_brackets = 0;
2508         PL_lex_allbrackets = 0;
2509         PL_lex_fakeeof = LEX_FAKEEOF_NEVER;
2510         PL_lex_casemods = 0;
2511         *PL_lex_casestack = '\0';
2512         PL_lex_starts = 0;
2513         if (SvEVALED(PL_lex_repl)) {
2514             PL_lex_state = LEX_INTERPNORMAL;
2515             PL_lex_starts++;
2516             /*  we don't clear PL_lex_repl here, so that we can check later
2517                 whether this is an evalled subst; that means we rely on the
2518                 logic to ensure sublex_done() is called again only via the
2519                 branch (in yylex()) that clears PL_lex_repl, else we'll loop */
2520         }
2521         else {
2522             PL_lex_state = LEX_INTERPCONCAT;
2523             PL_lex_repl = NULL;
2524         }
2525         return ',';
2526     }
2527     else {
2528 #ifdef PERL_MAD
2529         if (PL_madskills) {
2530             if (PL_thiswhite) {
2531                 if (!PL_endwhite)
2532                     PL_endwhite = newSVpvs("");
2533                 sv_catsv(PL_endwhite, PL_thiswhite);
2534                 PL_thiswhite = 0;
2535             }
2536             if (PL_thistoken)
2537                 sv_setpvs(PL_thistoken,"");
2538             else
2539                 PL_realtokenstart = -1;
2540         }
2541 #endif
2542         LEAVE;
2543         PL_bufend = SvPVX(PL_linestr);
2544         PL_bufend += SvCUR(PL_linestr);
2545         PL_expect = XOPERATOR;
2546         PL_sublex_info.sub_inwhat = 0;
2547         return ')';
2548     }
2549 }
2550
2551 /*
2552   scan_const
2553
2554   Extracts a pattern, double-quoted string, or transliteration.  This
2555   is terrifying code.
2556
2557   It looks at PL_lex_inwhat and PL_lex_inpat to find out whether it's
2558   processing a pattern (PL_lex_inpat is true), a transliteration
2559   (PL_lex_inwhat == OP_TRANS is true), or a double-quoted string.
2560
2561   Returns a pointer to the character scanned up to. If this is
2562   advanced from the start pointer supplied (i.e. if anything was
2563   successfully parsed), will leave an OP for the substring scanned
2564   in pl_yylval. Caller must intuit reason for not parsing further
2565   by looking at the next characters herself.
2566
2567   In patterns:
2568     backslashes:
2569       constants: \N{NAME} only
2570       case and quoting: \U \Q \E
2571     stops on @ and $, but not for $ as tail anchor
2572
2573   In transliterations:
2574     characters are VERY literal, except for - not at the start or end
2575     of the string, which indicates a range. If the range is in bytes,
2576     scan_const expands the range to the full set of intermediate
2577     characters. If the range is in utf8, the hyphen is replaced with
2578     a certain range mark which will be handled by pmtrans() in op.c.
2579
2580   In double-quoted strings:
2581     backslashes:
2582       double-quoted style: \r and \n
2583       constants: \x31, etc.
2584       deprecated backrefs: \1 (in substitution replacements)
2585       case and quoting: \U \Q \E
2586     stops on @ and $
2587
2588   scan_const does *not* construct ops to handle interpolated strings.
2589   It stops processing as soon as it finds an embedded $ or @ variable
2590   and leaves it to the caller to work out what's going on.
2591
2592   embedded arrays (whether in pattern or not) could be:
2593       @foo, @::foo, @'foo, @{foo}, @$foo, @+, @-.
2594
2595   $ in double-quoted strings must be the symbol of an embedded scalar.
2596
2597   $ in pattern could be $foo or could be tail anchor.  Assumption:
2598   it's a tail anchor if $ is the last thing in the string, or if it's
2599   followed by one of "()| \r\n\t"
2600
2601   \1 (backreferences) are turned into $1
2602
2603   The structure of the code is
2604       while (there's a character to process) {
2605           handle transliteration ranges
2606           skip regexp comments /(?#comment)/ and codes /(?{code})/
2607           skip #-initiated comments in //x patterns
2608           check for embedded arrays
2609           check for embedded scalars
2610           if (backslash) {
2611               deprecate \1 in substitution replacements
2612               handle string-changing backslashes \l \U \Q \E, etc.
2613               switch (what was escaped) {
2614                   handle \- in a transliteration (becomes a literal -)
2615                   if a pattern and not \N{, go treat as regular character
2616                   handle \132 (octal characters)
2617                   handle \x15 and \x{1234} (hex characters)
2618                   handle \N{name} (named characters, also \N{3,5} in a pattern)
2619                   handle \cV (control characters)
2620                   handle printf-style backslashes (\f, \r, \n, etc)
2621               } (end switch)
2622               continue
2623           } (end if backslash)
2624           handle regular character
2625     } (end while character to read)
2626                 
2627 */
2628
2629 STATIC char *
2630 S_scan_const(pTHX_ char *start)
2631 {
2632     dVAR;
2633     register char *send = PL_bufend;            /* end of the constant */
2634     SV *sv = newSV(send - start);               /* sv for the constant.  See
2635                                                    note below on sizing. */
2636     register char *s = start;                   /* start of the constant */
2637     register char *d = SvPVX(sv);               /* destination for copies */
2638     bool dorange = FALSE;                       /* are we in a translit range? */
2639     bool didrange = FALSE;                      /* did we just finish a range? */
2640     bool has_utf8 = FALSE;                      /* Output constant is UTF8 */
2641     bool  this_utf8 = cBOOL(UTF);               /* Is the source string assumed
2642                                                    to be UTF8?  But, this can
2643                                                    show as true when the source
2644                                                    isn't utf8, as for example
2645                                                    when it is entirely composed
2646                                                    of hex constants */
2647
2648     /* Note on sizing:  The scanned constant is placed into sv, which is
2649      * initialized by newSV() assuming one byte of output for every byte of
2650      * input.  This routine expects newSV() to allocate an extra byte for a
2651      * trailing NUL, which this routine will append if it gets to the end of
2652      * the input.  There may be more bytes of input than output (eg., \N{LATIN
2653      * CAPITAL LETTER A}), or more output than input if the constant ends up
2654      * recoded to utf8, but each time a construct is found that might increase
2655      * the needed size, SvGROW() is called.  Its size parameter each time is
2656      * based on the best guess estimate at the time, namely the length used so
2657      * far, plus the length the current construct will occupy, plus room for
2658      * the trailing NUL, plus one byte for every input byte still unscanned */ 
2659
2660     UV uv;
2661 #ifdef EBCDIC
2662     UV literal_endpoint = 0;
2663     bool native_range = TRUE; /* turned to FALSE if the first endpoint is Unicode. */
2664 #endif
2665
2666     PERL_ARGS_ASSERT_SCAN_CONST;
2667
2668     assert(PL_lex_inwhat != OP_TRANSR);
2669     if (PL_lex_inwhat == OP_TRANS && PL_sublex_info.sub_op) {
2670         /* If we are doing a trans and we know we want UTF8 set expectation */
2671         has_utf8   = PL_sublex_info.sub_op->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF);
2672         this_utf8  = PL_sublex_info.sub_op->op_private & (PL_lex_repl ? OPpTRANS_FROM_UTF : OPpTRANS_TO_UTF);
2673     }
2674
2675
2676     while (s < send || dorange) {
2677
2678         /* get transliterations out of the way (they're most literal) */
2679         if (PL_lex_inwhat == OP_TRANS) {
2680             /* expand a range A-Z to the full set of characters.  AIE! */
2681             if (dorange) {
2682                 I32 i;                          /* current expanded character */
2683                 I32 min;                        /* first character in range */
2684                 I32 max;                        /* last character in range */
2685
2686 #ifdef EBCDIC
2687                 UV uvmax = 0;
2688 #endif
2689
2690                 if (has_utf8
2691 #ifdef EBCDIC
2692                     && !native_range
2693 #endif
2694                     ) {
2695                     char * const c = (char*)utf8_hop((U8*)d, -1);
2696                     char *e = d++;
2697                     while (e-- > c)
2698                         *(e + 1) = *e;
2699                     *c = (char)UTF_TO_NATIVE(0xff);
2700                     /* mark the range as done, and continue */
2701                     dorange = FALSE;
2702                     didrange = TRUE;
2703                     continue;
2704                 }
2705
2706                 i = d - SvPVX_const(sv);                /* remember current offset */
2707 #ifdef EBCDIC
2708                 SvGROW(sv,
2709                        SvLEN(sv) + (has_utf8 ?
2710                                     (512 - UTF_CONTINUATION_MARK +
2711                                      UNISKIP(0x100))
2712                                     : 256));
2713                 /* How many two-byte within 0..255: 128 in UTF-8,
2714                  * 96 in UTF-8-mod. */
2715 #else
2716                 SvGROW(sv, SvLEN(sv) + 256);    /* never more than 256 chars in a range */
2717 #endif
2718                 d = SvPVX(sv) + i;              /* refresh d after realloc */
2719 #ifdef EBCDIC
2720                 if (has_utf8) {
2721                     int j;
2722                     for (j = 0; j <= 1; j++) {
2723                         char * const c = (char*)utf8_hop((U8*)d, -1);
2724                         const UV uv    = utf8n_to_uvchr((U8*)c, d - c, NULL, 0);
2725                         if (j)
2726                             min = (U8)uv;
2727                         else if (uv < 256)
2728                             max = (U8)uv;
2729                         else {
2730                             max = (U8)0xff; /* only to \xff */
2731                             uvmax = uv; /* \x{100} to uvmax */
2732                         }
2733                         d = c; /* eat endpoint chars */
2734                      }
2735                 }
2736                else {
2737 #endif
2738                    d -= 2;              /* eat the first char and the - */
2739                    min = (U8)*d;        /* first char in range */
2740                    max = (U8)d[1];      /* last char in range  */
2741 #ifdef EBCDIC
2742                }
2743 #endif
2744
2745                 if (min > max) {
2746                     Perl_croak(aTHX_
2747                                "Invalid range \"%c-%c\" in transliteration operator",
2748                                (char)min, (char)max);
2749                 }
2750
2751 #ifdef EBCDIC
2752                 if (literal_endpoint == 2 &&
2753                     ((isLOWER(min) && isLOWER(max)) ||
2754                      (isUPPER(min) && isUPPER(max)))) {
2755                     if (isLOWER(min)) {
2756                         for (i = min; i <= max; i++)
2757                             if (isLOWER(i))
2758                                 *d++ = NATIVE_TO_NEED(has_utf8,i);
2759                     } else {
2760                         for (i = min; i <= max; i++)
2761                             if (isUPPER(i))
2762                                 *d++ = NATIVE_TO_NEED(has_utf8,i);
2763                     }
2764                 }
2765                 else
2766 #endif
2767                     for (i = min; i <= max; i++)
2768 #ifdef EBCDIC
2769                         if (has_utf8) {
2770                             const U8 ch = (U8)NATIVE_TO_UTF(i);
2771                             if (UNI_IS_INVARIANT(ch))
2772                                 *d++ = (U8)i;
2773                             else {
2774                                 *d++ = (U8)UTF8_EIGHT_BIT_HI(ch);
2775                                 *d++ = (U8)UTF8_EIGHT_BIT_LO(ch);
2776                             }
2777                         }
2778                         else
2779 #endif
2780                             *d++ = (char)i;
2781  
2782 #ifdef EBCDIC
2783                 if (uvmax) {
2784                     d = (char*)uvchr_to_utf8((U8*)d, 0x100);
2785                     if (uvmax > 0x101)
2786                         *d++ = (char)UTF_TO_NATIVE(0xff);
2787                     if (uvmax > 0x100)
2788                         d = (char*)uvchr_to_utf8((U8*)d, uvmax);
2789                 }
2790 #endif
2791
2792                 /* mark the range as done, and continue */
2793                 dorange = FALSE;
2794                 didrange = TRUE;
2795 #ifdef EBCDIC
2796                 literal_endpoint = 0;
2797 #endif
2798                 continue;
2799             }
2800
2801             /* range begins (ignore - as first or last char) */
2802             else if (*s == '-' && s+1 < send  && s != start) {
2803                 if (didrange) {
2804                     Perl_croak(aTHX_ "Ambiguous range in transliteration operator");
2805                 }
2806                 if (has_utf8
2807 #ifdef EBCDIC
2808                     && !native_range
2809 #endif
2810                     ) {
2811                     *d++ = (char)UTF_TO_NATIVE(0xff);   /* use illegal utf8 byte--see pmtrans */
2812                     s++;
2813                     continue;
2814                 }
2815                 dorange = TRUE;
2816                 s++;
2817             }
2818             else {
2819                 didrange = FALSE;
2820 #ifdef EBCDIC
2821                 literal_endpoint = 0;
2822                 native_range = TRUE;
2823 #endif
2824             }
2825         }
2826
2827         /* if we get here, we're not doing a transliteration */
2828
2829         /* skip for regexp comments /(?#comment)/ and code /(?{code})/,
2830            except for the last char, which will be done separately. */
2831         else if (*s == '(' && PL_lex_inpat && s[1] == '?') {
2832             if (s[2] == '#') {
2833                 while (s+1 < send && *s != ')')
2834                     *d++ = NATIVE_TO_NEED(has_utf8,*s++);
2835             }
2836             else if (s[2] == '{' /* This should match regcomp.c */
2837                     || (s[2] == '?' && s[3] == '{'))
2838             {
2839                 I32 count = 1;
2840                 char *regparse = s + (s[2] == '{' ? 3 : 4);
2841                 char c;
2842
2843                 while (count && (c = *regparse)) {
2844                     if (c == '\\' && regparse[1])
2845                         regparse++;
2846                     else if (c == '{')
2847                         count++;
2848                     else if (c == '}')
2849                         count--;
2850                     regparse++;
2851                 }
2852                 if (*regparse != ')')
2853                     regparse--;         /* Leave one char for continuation. */
2854                 while (s < regparse)
2855                     *d++ = NATIVE_TO_NEED(has_utf8,*s++);
2856             }
2857         }
2858
2859         /* likewise skip #-initiated comments in //x patterns */
2860         else if (*s == '#' && PL_lex_inpat &&
2861           ((PMOP*)PL_lex_inpat)->op_pmflags & RXf_PMf_EXTENDED) {
2862             while (s+1 < send && *s != '\n')
2863                 *d++ = NATIVE_TO_NEED(has_utf8,*s++);
2864         }
2865
2866         /* check for embedded arrays
2867            (@foo, @::foo, @'foo, @{foo}, @$foo, @+, @-)
2868            */
2869         else if (*s == '@' && s[1]) {
2870             if (isALNUM_lazy_if(s+1,UTF))
2871                 break;
2872             if (strchr(":'{$", s[1]))
2873                 break;
2874             if (!PL_lex_inpat && (s[1] == '+' || s[1] == '-'))
2875                 break; /* in regexp, neither @+ nor @- are interpolated */
2876         }
2877
2878         /* check for embedded scalars.  only stop if we're sure it's a
2879            variable.
2880         */
2881         else if (*s == '$') {
2882             if (!PL_lex_inpat)  /* not a regexp, so $ must be var */
2883                 break;
2884             if (s + 1 < send && !strchr("()| \r\n\t", s[1])) {
2885                 if (s[1] == '\\') {
2886                     Perl_ck_warner(aTHX_ packWARN(WARN_AMBIGUOUS),
2887                                    "Possible unintended interpolation of $\\ in regex");
2888                 }
2889                 break;          /* in regexp, $ might be tail anchor */
2890             }
2891         }
2892
2893         /* End of else if chain - OP_TRANS rejoin rest */
2894
2895         /* backslashes */
2896         if (*s == '\\' && s+1 < send) {
2897             char* e;    /* Can be used for ending '}', etc. */
2898
2899             s++;
2900
2901             /* warn on \1 - \9 in substitution replacements, but note that \11
2902              * is an octal; and \19 is \1 followed by '9' */
2903             if (PL_lex_inwhat == OP_SUBST && !PL_lex_inpat &&
2904                 isDIGIT(*s) && *s != '0' && !isDIGIT(s[1]))
2905             {
2906                 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX), "\\%c better written as $%c", *s, *s);
2907                 *--s = '$';
2908                 break;
2909             }
2910
2911             /* string-change backslash escapes */
2912             if (PL_lex_inwhat != OP_TRANS && *s && strchr("lLuUEQ", *s)) {
2913                 --s;
2914                 break;
2915             }
2916             /* In a pattern, process \N, but skip any other backslash escapes.
2917              * This is because we don't want to translate an escape sequence
2918              * into a meta symbol and have the regex compiler use the meta
2919              * symbol meaning, e.g. \x{2E} would be confused with a dot.  But
2920              * in spite of this, we do have to process \N here while the proper
2921              * charnames handler is in scope.  See bugs #56444 and #62056.
2922              * There is a complication because \N in a pattern may also stand
2923              * for 'match a non-nl', and not mean a charname, in which case its
2924              * processing should be deferred to the regex compiler.  To be a
2925              * charname it must be followed immediately by a '{', and not look
2926              * like \N followed by a curly quantifier, i.e., not something like
2927              * \N{3,}.  regcurly returns a boolean indicating if it is a legal
2928              * quantifier */
2929             else if (PL_lex_inpat
2930                     && (*s != 'N'
2931                         || s[1] != '{'
2932                         || regcurly(s + 1)))
2933             {
2934                 *d++ = NATIVE_TO_NEED(has_utf8,'\\');
2935                 goto default_action;
2936             }
2937
2938             switch (*s) {
2939
2940             /* quoted - in transliterations */
2941             case '-':
2942                 if (PL_lex_inwhat == OP_TRANS) {
2943                     *d++ = *s++;
2944                     continue;
2945                 }
2946                 /* FALL THROUGH */
2947             default:
2948                 {
2949                     if ((isALPHA(*s) || isDIGIT(*s)))
2950                         Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
2951                                        "Unrecognized escape \\%c passed through",
2952                                        *s);
2953                     /* default action is to copy the quoted character */
2954                     goto default_action;
2955                 }
2956
2957             /* eg. \132 indicates the octal constant 0132 */
2958             case '0': case '1': case '2': case '3':
2959             case '4': case '5': case '6': case '7':
2960                 {
2961                     I32 flags = 0;
2962                     STRLEN len = 3;
2963                     uv = NATIVE_TO_UNI(grok_oct(s, &len, &flags, NULL));
2964                     s += len;
2965                 }
2966                 goto NUM_ESCAPE_INSERT;
2967
2968             /* eg. \o{24} indicates the octal constant \024 */
2969             case 'o':
2970                 {
2971                     STRLEN len;
2972                     const char* error;
2973
2974                     bool valid = grok_bslash_o(s, &uv, &len, &error, 1);
2975                     s += len;
2976                     if (! valid) {
2977                         yyerror(error);
2978                         continue;
2979                     }
2980                     goto NUM_ESCAPE_INSERT;
2981                 }
2982
2983             /* eg. \x24 indicates the hex constant 0x24 */
2984             case 'x':
2985                 ++s;
2986                 if (*s == '{') {
2987                     char* const e = strchr(s, '}');
2988                     I32 flags = PERL_SCAN_ALLOW_UNDERSCORES |
2989                       PERL_SCAN_DISALLOW_PREFIX;
2990                     STRLEN len;
2991
2992                     ++s;
2993                     if (!e) {
2994                         yyerror("Missing right brace on \\x{}");
2995                         continue;
2996                     }
2997                     len = e - s;
2998                     uv = NATIVE_TO_UNI(grok_hex(s, &len, &flags, NULL));
2999                     s = e + 1;
3000                 }
3001                 else {
3002                     {
3003                         STRLEN len = 2;
3004                         I32 flags = PERL_SCAN_DISALLOW_PREFIX;
3005                         uv = NATIVE_TO_UNI(grok_hex(s, &len, &flags, NULL));
3006                         s += len;
3007                     }
3008                 }
3009
3010               NUM_ESCAPE_INSERT:
3011                 /* Insert oct or hex escaped character.  There will always be
3012                  * enough room in sv since such escapes will be longer than any
3013                  * UTF-8 sequence they can end up as, except if they force us
3014                  * to recode the rest of the string into utf8 */
3015                 
3016                 /* Here uv is the ordinal of the next character being added in
3017                  * unicode (converted from native). */
3018                 if (!UNI_IS_INVARIANT(uv)) {
3019                     if (!has_utf8 && uv > 255) {
3020                         /* Might need to recode whatever we have accumulated so
3021                          * far if it contains any chars variant in utf8 or
3022                          * utf-ebcdic. */
3023                           
3024                         SvCUR_set(sv, d - SvPVX_const(sv));
3025                         SvPOK_on(sv);
3026                         *d = '\0';
3027                         /* See Note on sizing above.  */
3028                         sv_utf8_upgrade_flags_grow(sv,
3029                                         SV_GMAGIC|SV_FORCE_UTF8_UPGRADE,
3030                                         UNISKIP(uv) + (STRLEN)(send - s) + 1);
3031                         d = SvPVX(sv) + SvCUR(sv);
3032                         has_utf8 = TRUE;
3033                     }
3034
3035                     if (has_utf8) {
3036                         d = (char*)uvuni_to_utf8((U8*)d, uv);
3037                         if (PL_lex_inwhat == OP_TRANS &&
3038                             PL_sublex_info.sub_op) {
3039                             PL_sublex_info.sub_op->op_private |=
3040                                 (PL_lex_repl ? OPpTRANS_FROM_UTF
3041                                              : OPpTRANS_TO_UTF);
3042                         }
3043 #ifdef EBCDIC
3044                         if (uv > 255 && !dorange)
3045                             native_range = FALSE;
3046 #endif
3047                     }
3048                     else {
3049                         *d++ = (char)uv;
3050                     }
3051                 }
3052                 else {
3053                     *d++ = (char) uv;
3054                 }
3055                 continue;
3056
3057             case 'N':
3058                 /* In a non-pattern \N must be a named character, like \N{LATIN
3059                  * SMALL LETTER A} or \N{U+0041}.  For patterns, it also can
3060                  * mean to match a non-newline.  For non-patterns, named
3061                  * characters are converted to their string equivalents. In
3062                  * patterns, named characters are not converted to their
3063                  * ultimate forms for the same reasons that other escapes
3064                  * aren't.  Instead, they are converted to the \N{U+...} form
3065                  * to get the value from the charnames that is in effect right
3066                  * now, while preserving the fact that it was a named character
3067                  * so that the regex compiler knows this */
3068
3069                 /* This section of code doesn't generally use the
3070                  * NATIVE_TO_NEED() macro to transform the input.  I (khw) did
3071                  * a close examination of this macro and determined it is a
3072                  * no-op except on utfebcdic variant characters.  Every
3073                  * character generated by this that would normally need to be
3074                  * enclosed by this macro is invariant, so the macro is not
3075                  * needed, and would complicate use of copy().  XXX There are
3076                  * other parts of this file where the macro is used
3077                  * inconsistently, but are saved by it being a no-op */
3078
3079                 /* The structure of this section of code (besides checking for
3080                  * errors and upgrading to utf8) is:
3081                  *  Further disambiguate between the two meanings of \N, and if
3082                  *      not a charname, go process it elsewhere
3083                  *  If of form \N{U+...}, pass it through if a pattern;
3084                  *      otherwise convert to utf8
3085                  *  Otherwise must be \N{NAME}: convert to \N{U+c1.c2...} if a
3086                  *  pattern; otherwise convert to utf8 */
3087
3088                 /* Here, s points to the 'N'; the test below is guaranteed to
3089                  * succeed if we are being called on a pattern as we already
3090                  * know from a test above that the next character is a '{'.
3091                  * On a non-pattern \N must mean 'named sequence, which
3092                  * requires braces */
3093                 s++;
3094                 if (*s != '{') {
3095                     yyerror("Missing braces on \\N{}"); 
3096                     continue;
3097                 }
3098                 s++;
3099
3100                 /* If there is no matching '}', it is an error. */
3101                 if (! (e = strchr(s, '}'))) {
3102                     if (! PL_lex_inpat) {
3103                         yyerror("Missing right brace on \\N{}");
3104                     } else {
3105                         yyerror("Missing right brace on \\N{} or unescaped left brace after \\N.");
3106                     }
3107                     continue;
3108                 }
3109
3110                 /* Here it looks like a named character */
3111
3112                 if (PL_lex_inpat) {
3113
3114                     /* XXX This block is temporary code.  \N{} implies that the
3115                      * pattern is to have Unicode semantics, and therefore
3116                      * currently has to be encoded in utf8.  By putting it in
3117                      * utf8 now, we save a whole pass in the regular expression
3118                      * compiler.  Once that code is changed so Unicode
3119                      * semantics doesn't necessarily have to be in utf8, this
3120                      * block should be removed.  However, the code that parses
3121                      * the output of this would have to be changed to not
3122                      * necessarily expect utf8 */
3123                     if (!has_utf8) {
3124                         SvCUR_set(sv, d - SvPVX_const(sv));
3125                         SvPOK_on(sv);
3126                         *d = '\0';
3127                         /* See Note on sizing above.  */
3128                         sv_utf8_upgrade_flags_grow(sv,
3129                                         SV_GMAGIC|SV_FORCE_UTF8_UPGRADE,
3130                                         /* 5 = '\N{' + cur char + NUL */
3131                                         (STRLEN)(send - s) + 5);
3132                         d = SvPVX(sv) + SvCUR(sv);
3133                         has_utf8 = TRUE;
3134                     }
3135                 }
3136
3137                 if (*s == 'U' && s[1] == '+') { /* \N{U+...} */
3138                     I32 flags = PERL_SCAN_ALLOW_UNDERSCORES
3139                                 | PERL_SCAN_DISALLOW_PREFIX;
3140                     STRLEN len;
3141
3142                     /* For \N{U+...}, the '...' is a unicode value even on
3143                      * EBCDIC machines */
3144                     s += 2;         /* Skip to next char after the 'U+' */
3145                     len = e - s;
3146                     uv = grok_hex(s, &len, &flags, NULL);
3147                     if (len == 0 || len != (STRLEN)(e - s)) {
3148                         yyerror("Invalid hexadecimal number in \\N{U+...}");
3149                         s = e + 1;
3150                         continue;
3151                     }
3152
3153                     if (PL_lex_inpat) {
3154
3155                         /* On non-EBCDIC platforms, pass through to the regex
3156                          * compiler unchanged.  The reason we evaluated the
3157                          * number above is to make sure there wasn't a syntax
3158                          * error.  But on EBCDIC we convert to native so
3159                          * downstream code can continue to assume it's native
3160                          */
3161                         s -= 5;     /* Include the '\N{U+' */
3162 #ifdef EBCDIC
3163                         d += my_snprintf(d, e - s + 1 + 1,  /* includes the }
3164                                                                and the \0 */
3165                                     "\\N{U+%X}",
3166                                     (unsigned int) UNI_TO_NATIVE(uv));
3167 #else
3168                         Copy(s, d, e - s + 1, char);    /* 1 = include the } */
3169                         d += e - s + 1;
3170 #endif
3171                     }
3172                     else {  /* Not a pattern: convert the hex to string */
3173
3174                          /* If destination is not in utf8, unconditionally
3175                           * recode it to be so.  This is because \N{} implies
3176                           * Unicode semantics, and scalars have to be in utf8
3177                           * to guarantee those semantics */
3178                         if (! has_utf8) {
3179                             SvCUR_set(sv, d - SvPVX_const(sv));
3180                             SvPOK_on(sv);
3181                             *d = '\0';
3182                             /* See Note on sizing above.  */
3183                             sv_utf8_upgrade_flags_grow(
3184                                         sv,
3185                                         SV_GMAGIC|SV_FORCE_UTF8_UPGRADE,
3186                                         UNISKIP(uv) + (STRLEN)(send - e) + 1);
3187                             d = SvPVX(sv) + SvCUR(sv);
3188                             has_utf8 = TRUE;
3189                         }
3190
3191                         /* Add the string to the output */
3192                         if (UNI_IS_INVARIANT(uv)) {
3193                             *d++ = (char) uv;
3194                         }
3195                         else d = (char*)uvuni_to_utf8((U8*)d, uv);
3196                     }
3197                 }
3198                 else { /* Here is \N{NAME} but not \N{U+...}. */
3199
3200                     SV *res;            /* result from charnames */
3201                     const char *str;    /* the string in 'res' */
3202                     STRLEN len;         /* its length */
3203
3204                     /* Get the value for NAME */
3205                     res = newSVpvn(s, e - s);
3206                     res = new_constant( NULL, 0, "charnames",
3207                                         /* includes all of: \N{...} */
3208                                         res, NULL, s - 3, e - s + 4 );
3209
3210                     /* Most likely res will be in utf8 already since the
3211                      * standard charnames uses pack U, but a custom translator
3212                      * can leave it otherwise, so make sure.  XXX This can be
3213                      * revisited to not have charnames use utf8 for characters
3214                      * that don't need it when regexes don't have to be in utf8
3215                      * for Unicode semantics.  If doing so, remember EBCDIC */
3216                     sv_utf8_upgrade(res);
3217                     str = SvPV_const(res, len);
3218
3219                     /* Don't accept malformed input */
3220                     if (! is_utf8_string((U8 *) str, len)) {
3221                         yyerror("Malformed UTF-8 returned by \\N");
3222                     }
3223                     else if (PL_lex_inpat) {
3224
3225                         if (! len) { /* The name resolved to an empty string */
3226                             Copy("\\N{}", d, 4, char);
3227                             d += 4;
3228                         }
3229                         else {
3230                             /* In order to not lose information for the regex
3231                             * compiler, pass the result in the specially made
3232                             * syntax: \N{U+c1.c2.c3...}, where c1 etc. are
3233                             * the code points in hex of each character
3234                             * returned by charnames */
3235
3236                             const char *str_end = str + len;
3237                             STRLEN char_length;     /* cur char's byte length */
3238                             STRLEN output_length;   /* and the number of bytes
3239                                                        after this is translated
3240                                                        into hex digits */
3241                             const STRLEN off = d - SvPVX_const(sv);
3242
3243                             /* 2 hex per byte; 2 chars for '\N'; 2 chars for
3244                              * max('U+', '.'); and 1 for NUL */
3245                             char hex_string[2 * UTF8_MAXBYTES + 5];
3246
3247                             /* Get the first character of the result. */
3248                             U32 uv = utf8n_to_uvuni((U8 *) str,
3249                                                     len,
3250                                                     &char_length,
3251                                                     UTF8_ALLOW_ANYUV);
3252
3253                             /* The call to is_utf8_string() above hopefully
3254                              * guarantees that there won't be an error.  But
3255                              * it's easy here to make sure.  The function just
3256                              * above warns and returns 0 if invalid utf8, but
3257                              * it can also return 0 if the input is validly a
3258                              * NUL. Disambiguate */
3259                             if (uv == 0 && NATIVE_TO_ASCII(*str) != '\0') {
3260                                 uv = UNICODE_REPLACEMENT;
3261                             }
3262
3263                             /* Convert first code point to hex, including the
3264                              * boiler plate before it.  For all these, we
3265                              * convert to native format so that downstream code
3266                              * can continue to assume the input is native */
3267                             output_length =
3268                                 my_snprintf(hex_string, sizeof(hex_string),
3269                                             "\\N{U+%X",
3270                                             (unsigned int) UNI_TO_NATIVE(uv));
3271
3272                             /* Make sure there is enough space to hold it */
3273                             d = off + SvGROW(sv, off
3274                                                  + output_length
3275                                                  + (STRLEN)(send - e)
3276                                                  + 2);  /* '}' + NUL */
3277                             /* And output it */
3278                             Copy(hex_string, d, output_length, char);
3279                             d += output_length;
3280
3281                             /* For each subsequent character, append dot and
3282                              * its ordinal in hex */
3283                             while ((str += char_length) < str_end) {
3284                                 const STRLEN off = d - SvPVX_const(sv);
3285                                 U32 uv = utf8n_to_uvuni((U8 *) str,
3286                                                         str_end - str,
3287                                                         &char_length,
3288                                                         UTF8_ALLOW_ANYUV);
3289                                 if (uv == 0 && NATIVE_TO_ASCII(*str) != '\0') {
3290                                     uv = UNICODE_REPLACEMENT;
3291                                 }
3292
3293                                 output_length =
3294                                     my_snprintf(hex_string, sizeof(hex_string),
3295                                             ".%X",
3296                                             (unsigned int) UNI_TO_NATIVE(uv));
3297
3298                                 d = off + SvGROW(sv, off
3299                                                      + output_length
3300                                                      + (STRLEN)(send - e)
3301                                                      + 2);      /* '}' +  NUL */
3302                                 Copy(hex_string, d, output_length, char);
3303                                 d += output_length;
3304                             }
3305
3306                             *d++ = '}'; /* Done.  Add the trailing brace */
3307                         }
3308                     }
3309                     else { /* Here, not in a pattern.  Convert the name to a
3310                             * string. */
3311
3312                          /* If destination is not in utf8, unconditionally
3313                           * recode it to be so.  This is because \N{} implies
3314                           * Unicode semantics, and scalars have to be in utf8
3315                           * to guarantee those semantics */
3316                         if (! has_utf8) {
3317                             SvCUR_set(sv, d - SvPVX_const(sv));
3318                             SvPOK_on(sv);
3319                             *d = '\0';
3320                             /* See Note on sizing above.  */
3321                             sv_utf8_upgrade_flags_grow(sv,
3322                                                 SV_GMAGIC|SV_FORCE_UTF8_UPGRADE,
3323                                                 len + (STRLEN)(send - s) + 1);
3324                             d = SvPVX(sv) + SvCUR(sv);
3325                             has_utf8 = TRUE;
3326                         } else if (len > (STRLEN)(e - s + 4)) { /* I _guess_ 4 is \N{} --jhi */
3327
3328                             /* See Note on sizing above.  (NOTE: SvCUR() is not
3329                              * set correctly here). */
3330                             const STRLEN off = d - SvPVX_const(sv);
3331                             d = off + SvGROW(sv, off + len + (STRLEN)(send - s) + 1);
3332                         }
3333                         Copy(str, d, len, char);
3334                         d += len;
3335                     }
3336                     SvREFCNT_dec(res);
3337
3338                     /* Deprecate non-approved name syntax */
3339                     if (ckWARN_d(WARN_DEPRECATED)) {
3340                         bool problematic = FALSE;
3341                         char* i = s;
3342
3343                         /* For non-ut8 input, look to see that the first
3344                          * character is an alpha, then loop through the rest
3345                          * checking that each is a continuation */
3346                         if (! this_utf8) {
3347                             if (! isALPHAU(*i)) problematic = TRUE;
3348                             else for (i = s + 1; i < e; i++) {
3349                                 if (isCHARNAME_CONT(*i)) continue;
3350                                 problematic = TRUE;
3351                                 break;
3352                             }
3353                         }
3354                         else {
3355                             /* Similarly for utf8.  For invariants can check
3356                              * directly.  We accept anything above the latin1
3357                              * range because it is immaterial to Perl if it is
3358                              * correct or not, and is expensive to check.  But
3359                              * it is fairly easy in the latin1 range to convert
3360                              * the variants into a single character and check
3361                              * those */
3362                             if (UTF8_IS_INVARIANT(*i)) {
3363                                 if (! isALPHAU(*i)) problematic = TRUE;
3364                             } else if (UTF8_IS_DOWNGRADEABLE_START(*i)) {
3365                                 if (! isALPHAU(UNI_TO_NATIVE(TWO_BYTE_UTF8_TO_UNI(*i,
3366                                                                             *(i+1)))))
3367                                 {
3368                                     problematic = TRUE;
3369                                 }
3370                             }
3371                             if (! problematic) for (i = s + UTF8SKIP(s);
3372                                                     i < e;
3373                                                     i+= UTF8SKIP(i))
3374                             {
3375                                 if (UTF8_IS_INVARIANT(*i)) {
3376                                     if (isCHARNAME_CONT(*i)) continue;
3377                                 } else if (! UTF8_IS_DOWNGRADEABLE_START(*i)) {
3378                                     continue;
3379                                 } else if (isCHARNAME_CONT(
3380                                             UNI_TO_NATIVE(
3381                                             TWO_BYTE_UTF8_TO_UNI(*i, *(i+1)))))
3382                                 {
3383                                     continue;
3384                                 }
3385                                 problematic = TRUE;
3386                                 break;
3387                             }
3388                         }
3389                         if (problematic) {
3390                             /* The e-i passed to the final %.*s makes sure that
3391                              * should the trailing NUL be missing that this
3392                              * print won't run off the end of the string */
3393                             Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
3394                                         "Deprecated character in \\N{...}; marked by <-- HERE  in \\N{%.*s<-- HERE %.*s",
3395                                         (int)(i - s + 1), s, (int)(e - i), i + 1);
3396                         }
3397                     }
3398                 } /* End \N{NAME} */
3399 #ifdef EBCDIC
3400                 if (!dorange) 
3401                     native_range = FALSE; /* \N{} is defined to be Unicode */
3402 #endif
3403                 s = e + 1;  /* Point to just after the '}' */
3404                 continue;
3405
3406             /* \c is a control character */
3407             case 'c':
3408                 s++;
3409                 if (s < send) {
3410                     *d++ = grok_bslash_c(*s++, has_utf8, 1);
3411                 }
3412                 else {
3413                     yyerror("Missing control char name in \\c");
3414                 }
3415                 continue;
3416
3417             /* printf-style backslashes, formfeeds, newlines, etc */
3418             case 'b':
3419                 *d++ = NATIVE_TO_NEED(has_utf8,'\b');
3420                 break;
3421             case 'n':
3422                 *d++ = NATIVE_TO_NEED(has_utf8,'\n');
3423                 break;
3424             case 'r':
3425                 *d++ = NATIVE_TO_NEED(has_utf8,'\r');
3426                 break;
3427             case 'f':
3428                 *d++ = NATIVE_TO_NEED(has_utf8,'\f');
3429                 break;
3430             case 't':
3431                 *d++ = NATIVE_TO_NEED(has_utf8,'\t');
3432                 break;
3433             case 'e':
3434                 *d++ = ASCII_TO_NEED(has_utf8,'\033');
3435                 break;
3436             case 'a':
3437                 *d++ = ASCII_TO_NEED(has_utf8,'\007');
3438                 break;
3439             } /* end switch */
3440
3441             s++;
3442             continue;
3443         } /* end if (backslash) */
3444 #ifdef EBCDIC
3445         else
3446             literal_endpoint++;
3447 #endif
3448
3449     default_action:
3450         /* If we started with encoded form, or already know we want it,
3451            then encode the next character */
3452         if (! NATIVE_IS_INVARIANT((U8)(*s)) && (this_utf8 || has_utf8)) {
3453             STRLEN len  = 1;
3454
3455
3456             /* One might think that it is wasted effort in the case of the
3457              * source being utf8 (this_utf8 == TRUE) to take the next character
3458              * in the source, convert it to an unsigned value, and then convert
3459              * it back again.  But the source has not been validated here.  The
3460              * routine that does the conversion checks for errors like
3461              * malformed utf8 */
3462
3463             const UV nextuv   = (this_utf8) ? utf8n_to_uvchr((U8*)s, send - s, &len, 0) : (UV) ((U8) *s);
3464             const STRLEN need = UNISKIP(NATIVE_TO_UNI(nextuv));
3465             if (!has_utf8) {
3466                 SvCUR_set(sv, d - SvPVX_const(sv));
3467                 SvPOK_on(sv);
3468                 *d = '\0';
3469                 /* See Note on sizing above.  */
3470                 sv_utf8_upgrade_flags_grow(sv,
3471                                         SV_GMAGIC|SV_FORCE_UTF8_UPGRADE,
3472                                         need + (STRLEN)(send - s) + 1);
3473                 d = SvPVX(sv) + SvCUR(sv);
3474                 has_utf8 = TRUE;
3475             } else if (need > len) {
3476                 /* encoded value larger than old, may need extra space (NOTE:
3477                  * SvCUR() is not set correctly here).   See Note on sizing
3478                  * above.  */
3479                 const STRLEN off = d - SvPVX_const(sv);
3480                 d = SvGROW(sv, off + need + (STRLEN)(send - s) + 1) + off;
3481             }
3482             s += len;
3483
3484             d = (char*)uvchr_to_utf8((U8*)d, nextuv);
3485 #ifdef EBCDIC
3486             if (uv > 255 && !dorange)
3487                 native_range = FALSE;
3488 #endif
3489         }
3490         else {
3491             *d++ = NATIVE_TO_NEED(has_utf8,*s++);
3492         }
3493     } /* while loop to process each character */
3494
3495     /* terminate the string and set up the sv */
3496     *d = '\0';
3497     SvCUR_set(sv, d - SvPVX_const(sv));
3498     if (SvCUR(sv) >= SvLEN(sv))
3499         Perl_croak(aTHX_ "panic: constant overflowed allocated space");
3500
3501     SvPOK_on(sv);
3502     if (PL_encoding && !has_utf8) {
3503         sv_recode_to_utf8(sv, PL_encoding);
3504         if (SvUTF8(sv))
3505             has_utf8 = TRUE;
3506     }
3507     if (has_utf8) {
3508         SvUTF8_on(sv);
3509         if (PL_lex_inwhat == OP_TRANS && PL_sublex_info.sub_op) {
3510             PL_sublex_info.sub_op->op_private |=
3511                     (PL_lex_repl ? OPpTRANS_FROM_UTF : OPpTRANS_TO_UTF);
3512         }
3513     }
3514
3515     /* shrink the sv if we allocated more than we used */
3516     if (SvCUR(sv) + 5 < SvLEN(sv)) {
3517         SvPV_shrink_to_cur(sv);
3518     }
3519
3520     /* return the substring (via pl_yylval) only if we parsed anything */
3521     if (s > PL_bufptr) {
3522         if ( PL_hints & ( PL_lex_inpat ? HINT_NEW_RE : HINT_NEW_STRING ) ) {
3523             const char *const key = PL_lex_inpat ? "qr" : "q";
3524             const STRLEN keylen = PL_lex_inpat ? 2 : 1;
3525             const char *type;
3526             STRLEN typelen;
3527
3528             if (PL_lex_inwhat == OP_TRANS) {
3529                 type = "tr";
3530                 typelen = 2;
3531             } else if (PL_lex_inwhat == OP_SUBST && !PL_lex_inpat) {
3532                 type = "s";
3533                 typelen = 1;
3534             } else  {
3535                 type = "qq";
3536                 typelen = 2;
3537             }
3538
3539             sv = S_new_constant(aTHX_ start, s - start, key, keylen, sv, NULL,
3540                                 type, typelen);
3541         }
3542         pl_yylval.opval = (OP*)newSVOP(OP_CONST, 0, sv);
3543     } else
3544         SvREFCNT_dec(sv);
3545     return s;
3546 }
3547
3548 /* S_intuit_more
3549  * Returns TRUE if there's more to the expression (e.g., a subscript),
3550  * FALSE otherwise.
3551  *
3552  * It deals with "$foo[3]" and /$foo[3]/ and /$foo[0123456789$]+/
3553  *
3554  * ->[ and ->{ return TRUE
3555  * { and [ outside a pattern are always subscripts, so return TRUE
3556  * if we're outside a pattern and it's not { or [, then return FALSE
3557  * if we're in a pattern and the first char is a {
3558  *   {4,5} (any digits around the comma) returns FALSE
3559  * if we're in a pattern and the first char is a [
3560  *   [] returns FALSE
3561  *   [SOMETHING] has a funky algorithm to decide whether it's a
3562  *      character class or not.  It has to deal with things like
3563  *      /$foo[-3]/ and /$foo[$bar]/ as well as /$foo[$\d]+/
3564  * anything else returns TRUE
3565  */
3566
3567 /* This is the one truly awful dwimmer necessary to conflate C and sed. */
3568
3569 STATIC int
3570 S_intuit_more(pTHX_ register char *s)
3571 {
3572     dVAR;
3573
3574     PERL_ARGS_ASSERT_INTUIT_MORE;
3575
3576     if (PL_lex_brackets)
3577         return TRUE;
3578     if (*s == '-' && s[1] == '>' && (s[2] == '[' || s[2] == '{'))
3579         return TRUE;
3580     if (*s != '{' && *s != '[')
3581         return FALSE;
3582     if (!PL_lex_inpat)
3583         return TRUE;
3584
3585     /* In a pattern, so maybe we have {n,m}. */
3586     if (*s == '{') {
3587         if (regcurly(s)) {
3588             return FALSE;
3589         }
3590         return TRUE;
3591     }
3592
3593     /* On the other hand, maybe we have a character class */
3594
3595     s++;
3596     if (*s == ']' || *s == '^')
3597         return FALSE;
3598     else {
3599         /* this is terrifying, and it works */
3600         int weight = 2;         /* let's weigh the evidence */
3601         char seen[256];
3602         unsigned char un_char = 255, last_un_char;
3603         const char * const send = strchr(s,']');
3604         char tmpbuf[sizeof PL_tokenbuf * 4];
3605
3606         if (!send)              /* has to be an expression */
3607             return TRUE;
3608
3609         Zero(seen,256,char);
3610         if (*s == '$')
3611             weight -= 3;
3612         else if (isDIGIT(*s)) {
3613             if (s[1] != ']') {
3614                 if (isDIGIT(s[1]) && s[2] == ']')
3615                     weight -= 10;
3616             }
3617             else
3618                 weight -= 100;
3619         }
3620         for (; s < send; s++) {
3621             last_un_char = un_char;
3622             un_char = (unsigned char)*s;
3623             switch (*s) {
3624             case '@':
3625             case '&':
3626             case '$':
3627                 weight -= seen[un_char] * 10;
3628                 if (isALNUM_lazy_if(s+1,UTF)) {
3629                     int len;
3630                     scan_ident(s, send, tmpbuf, sizeof tmpbuf, FALSE);
3631                     len = (int)strlen(tmpbuf);
3632                     if (len > 1 && gv_fetchpvn_flags(tmpbuf, len,
3633                                                     UTF ? SVf_UTF8 : 0, SVt_PV))
3634                         weight -= 100;
3635                     else
3636                         weight -= 10;
3637                 }
3638                 else if (*s == '$' && s[1] &&
3639                   strchr("[#!%*<>()-=",s[1])) {
3640                     if (/*{*/ strchr("])} =",s[2]))
3641                         weight -= 10;
3642                     else
3643                         weight -= 1;
3644                 }
3645                 break;
3646             case '\\':
3647                 un_char = 254;
3648                 if (s[1]) {
3649                     if (strchr("wds]",s[1]))
3650                         weight += 100;
3651                     else if (seen[(U8)'\''] || seen[(U8)'"'])
3652                         weight += 1;
3653                     else if (strchr("rnftbxcav",s[1]))
3654                         weight += 40;
3655                     else if (isDIGIT(s[1])) {
3656                         weight += 40;
3657                         while (s[1] && isDIGIT(s[1]))
3658                             s++;
3659                     }
3660                 }
3661                 else
3662                     weight += 100;
3663                 break;
3664             case '-':
3665                 if (s[1] == '\\')
3666                     weight += 50;
3667                 if (strchr("aA01! ",last_un_char))
3668                     weight += 30;
3669                 if (strchr("zZ79~",s[1]))
3670                     weight += 30;
3671                 if (last_un_char == 255 && (isDIGIT(s[1]) || s[1] == '$'))
3672                     weight -= 5;        /* cope with negative subscript */
3673                 break;
3674             default:
3675                 if (!isALNUM(last_un_char)
3676                     && !(last_un_char == '$' || last_un_char == '@'
3677                          || last_un_char == '&')
3678                     && isALPHA(*s) && s[1] && isALPHA(s[1])) {
3679                     char *d = tmpbuf;
3680                     while (isALPHA(*s))
3681                         *d++ = *s++;
3682                     *d = '\0';
3683                     if (keyword(tmpbuf, d - tmpbuf, 0))
3684                         weight -= 150;
3685                 }
3686                 if (un_char == last_un_char + 1)
3687                     weight += 5;
3688                 weight -= seen[un_char];
3689                 break;
3690             }
3691             seen[un_char]++;
3692         }
3693         if (weight >= 0)        /* probably a character class */
3694             return FALSE;
3695     }
3696
3697     return TRUE;
3698 }
3699
3700 /*
3701  * S_intuit_method
3702  *
3703  * Does all the checking to disambiguate
3704  *   foo bar
3705  * between foo(bar) and bar->foo.  Returns 0 if not a method, otherwise
3706  * FUNCMETH (bar->foo(args)) or METHOD (bar->foo args).
3707  *
3708  * First argument is the stuff after the first token, e.g. "bar".
3709  *
3710  * Not a method if bar is a filehandle.
3711  * Not a method if foo is a subroutine prototyped to take a filehandle.
3712  * Not a method if it's really "Foo $bar"
3713  * Method if it's "foo $bar"
3714  * Not a method if it's really "print foo $bar"
3715  * Method if it's really "foo package::" (interpreted as package->foo)
3716  * Not a method if bar is known to be a subroutine ("sub bar; foo bar")
3717  * Not a method if bar is a filehandle or package, but is quoted with
3718  *   =>
3719  */
3720
3721 STATIC int
3722 S_intuit_method(pTHX_ char *start, GV *gv, CV *cv)
3723 {
3724     dVAR;
3725     char *s = start + (*start == '$');
3726     char tmpbuf[sizeof PL_tokenbuf];
3727     STRLEN len;
3728     GV* indirgv;
3729 #ifdef PERL_MAD
3730     int soff;
3731 #endif
3732
3733     PERL_ARGS_ASSERT_INTUIT_METHOD;
3734
3735     if (gv) {
3736         if (SvTYPE(gv) == SVt_PVGV && GvIO(gv))
3737             return 0;
3738         if (cv) {
3739             if (SvPOK(cv)) {
3740                 const char *proto = CvPROTO(cv);
3741                 if (proto) {
3742                     if (*proto == ';')
3743                         proto++;
3744                     if (*proto == '*')
3745                         return 0;
3746                 }
3747             }
3748         } else
3749             gv = NULL;
3750     }
3751     s = scan_word(s, tmpbuf, sizeof tmpbuf, TRUE, &len);
3752     /* start is the beginning of the possible filehandle/object,
3753      * and s is the end of it
3754      * tmpbuf is a copy of it
3755      */
3756
3757     if (*start == '$') {
3758         if (gv || PL_last_lop_op == OP_PRINT || PL_last_lop_op == OP_SAY ||
3759                 isUPPER(*PL_tokenbuf))
3760             return 0;
3761 #ifdef PERL_MAD
3762         len = start - SvPVX(PL_linestr);
3763 #endif
3764         s = PEEKSPACE(s);
3765 #ifdef PERL_MAD
3766         start = SvPVX(PL_linestr) + len;
3767 #endif
3768         PL_bufptr = start;
3769         PL_expect = XREF;
3770         return *s == '(' ? FUNCMETH : METHOD;
3771     }
3772     if (!keyword(tmpbuf, len, 0)) {
3773         if (len > 2 && tmpbuf[len - 2] == ':' && tmpbuf[len - 1] == ':') {
3774             len -= 2;
3775             tmpbuf[len] = '\0';
3776 #ifdef PERL_MAD
3777             soff = s - SvPVX(PL_linestr);
3778 #endif
3779             goto bare_package;
3780         }
3781         indirgv = gv_fetchpvn_flags(tmpbuf, len, ( UTF ? SVf_UTF8 : 0 ), SVt_PVCV);
3782         if (indirgv && GvCVu(indirgv))
3783             return 0;
3784         /* filehandle or package name makes it a method */
3785         if (!gv || GvIO(indirgv) || gv_stashpvn(tmpbuf, len, UTF ? SVf_UTF8 : 0)) {
3786 #ifdef PERL_MAD
3787             soff = s - SvPVX(PL_linestr);
3788 #endif
3789             s = PEEKSPACE(s);
3790             if ((PL_bufend - s) >= 2 && *s == '=' && *(s+1) == '>')
3791                 return 0;       /* no assumptions -- "=>" quotes bareword */
3792       bare_package:
3793             start_force(PL_curforce);
3794             NEXTVAL_NEXTTOKE.opval = (OP*)newSVOP(OP_CONST, 0,
3795                                                   S_newSV_maybe_utf8(aTHX_ tmpbuf, len));
3796             NEXTVAL_NEXTTOKE.opval->op_private = OPpCONST_BARE;
3797             if (PL_madskills)
3798                 curmad('X', newSVpvn_flags(start,SvPVX(PL_linestr) + soff - start,
3799                                                             ( UTF ? SVf_UTF8 : 0 )));
3800             PL_expect = XTERM;
3801             force_next(WORD);
3802             PL_bufptr = s;
3803 #ifdef PERL_MAD
3804             PL_bufptr = SvPVX(PL_linestr) + soff; /* restart before space */
3805 #endif
3806             return *s == '(' ? FUNCMETH : METHOD;
3807         }
3808     }
3809     return 0;
3810 }
3811
3812 /* Encoded script support. filter_add() effectively inserts a
3813  * 'pre-processing' function into the current source input stream.
3814  * Note that the filter function only applies to the current source file
3815  * (e.g., it will not affect files 'require'd or 'use'd by this one).
3816  *
3817  * The datasv parameter (which may be NULL) can be used to pass
3818  * private data to this instance of the filter. The filter function
3819  * can recover the SV using the FILTER_DATA macro and use it to
3820  * store private buffers and state information.
3821  *
3822  * The supplied datasv parameter is upgraded to a PVIO type
3823  * and the IoDIRP/IoANY field is used to store the function pointer,
3824  * and IOf_FAKE_DIRP is enabled on datasv to mark this as such.
3825  * Note that IoTOP_NAME, IoFMT_NAME, IoBOTTOM_NAME, if set for
3826  * private use must be set using malloc'd pointers.
3827  */
3828
3829 SV *
3830 Perl_filter_add(pTHX_ filter_t funcp, SV *datasv)
3831 {
3832     dVAR;
3833     if (!funcp)
3834         return NULL;
3835
3836     if (!PL_parser)
3837         return NULL;
3838
3839     if (PL_parser->lex_flags & LEX_IGNORE_UTF8_HINTS)
3840         Perl_croak(aTHX_ "Source filters apply only to byte streams");
3841
3842     if (!PL_rsfp_filters)
3843         PL_rsfp_filters = newAV();
3844     if (!datasv)
3845         datasv = newSV(0);
3846     SvUPGRADE(datasv, SVt_PVIO);
3847     IoANY(datasv) = FPTR2DPTR(void *, funcp); /* stash funcp into spare field */
3848     IoFLAGS(datasv) |= IOf_FAKE_DIRP;
3849     DEBUG_P(PerlIO_printf(Perl_debug_log, "filter_add func %p (%s)\n",
3850                           FPTR2DPTR(void *, IoANY(datasv)),
3851                           SvPV_nolen(datasv)));
3852     av_unshift(PL_rsfp_filters, 1);
3853     av_store(PL_rsfp_filters, 0, datasv) ;
3854     if (
3855         !PL_parser->filtered
3856      && PL_parser->lex_flags & LEX_EVALBYTES
3857      && PL_bufptr < PL_bufend
3858     ) {
3859         const char *s = PL_bufptr;
3860         while (s < PL_bufend) {
3861             if (*s == '\n') {
3862                 SV *linestr = PL_parser->linestr;
3863                 char *buf = SvPVX(linestr);
3864                 STRLEN const bufptr_pos = PL_parser->bufptr - buf;
3865                 STRLEN const oldbufptr_pos = PL_parser->oldbufptr - buf;
3866                 STRLEN const oldoldbufptr_pos=PL_parser->oldoldbufptr-buf;
3867                 STRLEN const linestart_pos = PL_parser->linestart - buf;
3868                 STRLEN const last_uni_pos =
3869                     PL_parser->last_uni ? PL_parser->last_uni - buf : 0;
3870                 STRLEN const last_lop_pos =
3871                     PL_parser->last_lop ? PL_parser->last_lop - buf : 0;
3872                 av_push(PL_rsfp_filters, linestr);
3873                 PL_parser->linestr = 
3874                     newSVpvn(SvPVX(linestr), ++s-SvPVX(linestr));
3875                 buf = SvPVX(PL_parser->linestr);
3876                 PL_parser->bufend = buf + SvCUR(PL_parser->linestr);
3877                 PL_parser->bufptr = buf + bufptr_pos;
3878                 PL_parser->oldbufptr = buf + oldbufptr_pos;
3879                 PL_parser->oldoldbufptr = buf + oldoldbufptr_pos;
3880                 PL_parser->linestart = buf + linestart_pos;
3881                 if (PL_parser->last_uni)
3882                     PL_parser->last_uni = buf + last_uni_pos;
3883                 if (PL_parser->last_lop)
3884                     PL_parser->last_lop = buf + last_lop_pos;
3885                 SvLEN(linestr) = SvCUR(linestr);
3886                 SvCUR(linestr) = s-SvPVX(linestr);
3887                 PL_parser->filtered = 1;
3888                 break;
3889             }
3890             s++;
3891         }
3892     }
3893     return(datasv);
3894 }
3895
3896
3897 /* Delete most recently added instance of this filter function. */
3898 void
3899 Perl_filter_del(pTHX_ filter_t funcp)
3900 {
3901     dVAR;
3902     SV *datasv;
3903
3904     PERL_ARGS_ASSERT_FILTER_DEL;
3905
3906 #ifdef DEBUGGING
3907     DEBUG_P(PerlIO_printf(Perl_debug_log, "filter_del func %p",
3908                           FPTR2DPTR(void*, funcp)));
3909 #endif
3910     if (!PL_parser || !PL_rsfp_filters || AvFILLp(PL_rsfp_filters)<0)
3911         return;
3912     /* if filter is on top of stack (usual case) just pop it off */
3913     datasv = FILTER_DATA(AvFILLp(PL_rsfp_filters));
3914     if (IoANY(datasv) == FPTR2DPTR(void *, funcp)) {
3915         sv_free(av_pop(PL_rsfp_filters));
3916
3917         return;
3918     }
3919     /* we need to search for the correct entry and clear it     */
3920     Perl_die(aTHX_ "filter_del can only delete in reverse order (currently)");
3921 }
3922
3923
3924 /* Invoke the idxth filter function for the current rsfp.        */
3925 /* maxlen 0 = read one text line */
3926 I32
3927 Perl_filter_read(pTHX_ int idx, SV *buf_sv, int maxlen)
3928 {
3929     dVAR;
3930     filter_t funcp;
3931     SV *datasv = NULL;
3932     /* This API is bad. It should have been using unsigned int for maxlen.
3933        Not sure if we want to change the API, but if not we should sanity
3934        check the value here.  */
3935     unsigned int correct_length
3936         = maxlen < 0 ?
3937 #ifdef PERL_MICRO
3938         0x7FFFFFFF
3939 #else
3940         INT_MAX
3941 #endif
3942         : maxlen;
3943
3944     PERL_ARGS_ASSERT_FILTER_READ;
3945
3946     if (!PL_parser || !PL_rsfp_filters)
3947         return -1;
3948     if (idx > AvFILLp(PL_rsfp_filters)) {       /* Any more filters?    */
3949         /* Provide a default input filter to make life easy.    */
3950         /* Note that we append to the line. This is handy.      */
3951         DEBUG_P(PerlIO_printf(Perl_debug_log,
3952                               "filter_read %d: from rsfp\n", idx));
3953         if (correct_length) {
3954             /* Want a block */
3955             int len ;
3956             const int old_len = SvCUR(buf_sv);
3957
3958             /* ensure buf_sv is large enough */
3959             SvGROW(buf_sv, (STRLEN)(old_len + correct_length + 1)) ;
3960             if ((len = PerlIO_read(PL_rsfp, SvPVX(buf_sv) + old_len,
3961                                    correct_length)) <= 0) {
3962                 if (PerlIO_error(PL_rsfp))
3963                     return -1;          /* error */
3964                 else
3965                     return 0 ;          /* end of file */
3966             }
3967             SvCUR_set(buf_sv, old_len + len) ;
3968             SvPVX(buf_sv)[old_len + len] = '\0';
3969         } else {
3970             /* Want a line */
3971             if (sv_gets(buf_sv, PL_rsfp, SvCUR(buf_sv)) == NULL) {
3972                 if (PerlIO_error(PL_rsfp))
3973                     return -1;          /* error */
3974                 else
3975                     return 0 ;          /* end of file */
3976             }
3977         }
3978         return SvCUR(buf_sv);
3979     }
3980     /* Skip this filter slot if filter has been deleted */
3981     if ( (datasv = FILTER_DATA(idx)) == &PL_sv_undef) {
3982         DEBUG_P(PerlIO_printf(Perl_debug_log,
3983                               "filter_read %d: skipped (filter deleted)\n",
3984                               idx));
3985         return FILTER_READ(idx+1, buf_sv, correct_length); /* recurse */
3986     }
3987     if (SvTYPE(datasv) != SVt_PVIO) {
3988         if (correct_length) {
3989             /* Want a block */
3990             const STRLEN remainder = SvLEN(datasv) - SvCUR(datasv);
3991             if (!remainder) return 0; /* eof */
3992             if (correct_length > remainder) correct_length = remainder;
3993             sv_catpvn(buf_sv, SvEND(datasv), correct_length);
3994             SvCUR_set(datasv, SvCUR(datasv) + correct_length);
3995         } else {
3996             /* Want a line */
3997             const char *s = SvEND(datasv);
3998             const char *send = SvPVX(datasv) + SvLEN(datasv);
3999             while (s < send) {
4000                 if (*s == '\n') {
4001                     s++;
4002                     break;
4003                 }
4004                 s++;
4005             }
4006             if (s == send) return 0; /* eof */
4007             sv_catpvn(buf_sv, SvEND(datasv), s-SvEND(datasv));
4008             SvCUR_set(datasv, s-SvPVX(datasv));
4009         }
4010         return SvCUR(buf_sv);
4011     }
4012     /* Get function pointer hidden within datasv        */
4013     funcp = DPTR2FPTR(filter_t, IoANY(datasv));
4014     DEBUG_P(PerlIO_printf(Perl_debug_log,
4015                           "filter_read %d: via function %p (%s)\n",
4016                           idx, (void*)datasv, SvPV_nolen_const(datasv)));
4017     /* Call function. The function is expected to       */
4018     /* call "FILTER_READ(idx+1, buf_sv)" first.         */
4019     /* Return: <0:error, =0:eof, >0:not eof             */
4020     return (*funcp)(aTHX_ idx, buf_sv, correct_length);
4021 }
4022
4023 STATIC char *
4024 S_filter_gets(pTHX_ register SV *sv, STRLEN append)
4025 {
4026     dVAR;
4027
4028     PERL_ARGS_ASSERT_FILTER_GETS;
4029
4030 #ifdef PERL_CR_FILTER
4031     if (!PL_rsfp_filters) {
4032         filter_add(S_cr_textfilter,NULL);
4033     }
4034 #endif
4035     if (PL_rsfp_filters) {
4036         if (!append)
4037             SvCUR_set(sv, 0);   /* start with empty line        */
4038         if (FILTER_READ(0, sv, 0) > 0)
4039             return ( SvPVX(sv) ) ;
4040         else
4041             return NULL ;
4042     }
4043     else
4044         return (sv_gets(sv, PL_rsfp, append));
4045 }
4046
4047 STATIC HV *
4048 S_find_in_my_stash(pTHX_ const char *pkgname, STRLEN len)
4049 {
4050     dVAR;
4051     GV *gv;
4052
4053     PERL_ARGS_ASSERT_FIND_IN_MY_STASH;
4054
4055     if (len == 11 && *pkgname == '_' && strEQ(pkgname, "__PACKAGE__"))
4056         return PL_curstash;
4057
4058     if (len > 2 &&
4059         (pkgname[len - 2] == ':' && pkgname[len - 1] == ':') &&
4060         (gv = gv_fetchpvn_flags(pkgname, len, ( UTF ? SVf_UTF8 : 0 ), SVt_PVHV)))
4061     {
4062         return GvHV(gv);                        /* Foo:: */
4063     }
4064
4065     /* use constant CLASS => 'MyClass' */
4066     gv = gv_fetchpvn_flags(pkgname, len, UTF ? SVf_UTF8 : 0, SVt_PVCV);
4067     if (gv && GvCV(gv)) {
4068         SV * const sv = cv_const_sv(GvCV(gv));
4069         if (sv)
4070             pkgname = SvPV_const(sv, len);
4071     }
4072
4073     return gv_stashpvn(pkgname, len, UTF ? SVf_UTF8 : 0);
4074 }
4075
4076 /*
4077  * S_readpipe_override
4078  * Check whether readpipe() is overridden, and generates the appropriate
4079  * optree, provided sublex_start() is called afterwards.
4080  */
4081 STATIC void
4082 S_readpipe_override(pTHX)
4083 {
4084     GV **gvp;
4085     GV *gv_readpipe = gv_fetchpvs("readpipe", GV_NOTQUAL, SVt_PVCV);
4086     pl_yylval.ival = OP_BACKTICK;
4087     if ((gv_readpipe
4088                 && GvCVu(gv_readpipe) && GvIMPORTED_CV(gv_readpipe))
4089             ||
4090             ((gvp = (GV**)hv_fetchs(PL_globalstash, "readpipe", FALSE))
4091              && (gv_readpipe = *gvp) && isGV_with_GP(gv_readpipe)
4092              && GvCVu(gv_readpipe) && GvIMPORTED_CV(gv_readpipe)))
4093     {
4094         PL_lex_op = (OP*)newUNOP(OP_ENTERSUB, OPf_STACKED,
4095             op_append_elem(OP_LIST,
4096                 newSVOP(OP_CONST, 0, &PL_sv_undef), /* value will be read later */
4097                 newCVREF(0, newGVOP(OP_GV, 0, gv_readpipe))));
4098     }
4099 }
4100
4101 #ifdef PERL_MAD 
4102  /*
4103  * Perl_madlex
4104  * The intent of this yylex wrapper is to minimize the changes to the
4105  * tokener when we aren't interested in collecting madprops.  It remains
4106  * to be seen how successful this strategy will be...
4107  */
4108
4109 int
4110 Perl_madlex(pTHX)
4111 {
4112     int optype;
4113     char *s = PL_bufptr;
4114
4115     /* make sure PL_thiswhite is initialized */
4116     PL_thiswhite = 0;
4117     PL_thismad = 0;
4118
4119     /* just do what yylex would do on pending identifier; leave PL_thiswhite alone */
4120     if (PL_lex_state != LEX_KNOWNEXT && PL_pending_ident)
4121         return S_pending_ident(aTHX);
4122
4123     /* previous token ate up our whitespace? */
4124     if (!PL_lasttoke && PL_nextwhite) {
4125         PL_thiswhite = PL_nextwhite;
4126         PL_nextwhite = 0;
4127     }
4128
4129     /* isolate the token, and figure out where it is without whitespace */
4130     PL_realtokenstart = -1;
4131     PL_thistoken = 0;
4132     optype = yylex();
4133     s = PL_bufptr;
4134     assert(PL_curforce < 0);
4135
4136     if (!PL_thismad || PL_thismad->mad_key == '^') {    /* not forced already? */
4137         if (!PL_thistoken) {
4138             if (PL_realtokenstart < 0 || !CopLINE(PL_curcop))
4139                 PL_thistoken = newSVpvs("");
4140             else {
4141                 char * const tstart = SvPVX(PL_linestr) + PL_realtokenstart;
4142                 PL_thistoken = newSVpvn(tstart, s - tstart);
4143             }
4144         }
4145         if (PL_thismad) /* install head */
4146             CURMAD('X', PL_thistoken);
4147     }
4148
4149     /* last whitespace of a sublex? */
4150     if (optype == ')' && PL_endwhite) {
4151         CURMAD('X', PL_endwhite);
4152     }
4153
4154     if (!PL_thismad) {
4155
4156         /* if no whitespace and we're at EOF, bail.  Otherwise fake EOF below. */
4157         if (!PL_thiswhite && !PL_endwhite && !optype) {
4158             sv_free(PL_thistoken);
4159             PL_thistoken = 0;
4160             return 0;
4161         }
4162
4163         /* put off final whitespace till peg */
4164         if (optype == ';' && !PL_rsfp && !PL_parser->filtered) {
4165             PL_nextwhite = PL_thiswhite;
4166             PL_thiswhite = 0;
4167         }
4168         else if (PL_thisopen) {
4169             CURMAD('q', PL_thisopen);
4170             if (PL_thistoken)
4171                 sv_free(PL_thistoken);
4172             PL_thistoken = 0;
4173         }
4174         else {
4175             /* Store actual token text as madprop X */
4176             CURMAD('X', PL_thistoken);
4177         }
4178
4179         if (PL_thiswhite) {
4180             /* add preceding whitespace as madprop _ */
4181             CURMAD('_', PL_thiswhite);
4182         }
4183
4184         if (PL_thisstuff) {
4185             /* add quoted material as madprop = */
4186             CURMAD('=', PL_thisstuff);
4187         }
4188
4189         if (PL_thisclose) {
4190             /* add terminating quote as madprop Q */
4191             CURMAD('Q', PL_thisclose);
4192         }
4193     }
4194
4195     /* special processing based on optype */
4196
4197     switch (optype) {
4198
4199     /* opval doesn't need a TOKEN since it can already store mp */
4200     case WORD:
4201     case METHOD:
4202     case FUNCMETH:
4203     case THING:
4204     case PMFUNC:
4205     case PRIVATEREF:
4206     case FUNC0SUB:
4207     case UNIOPSUB:
4208     case LSTOPSUB:
4209         if (pl_yylval.opval)
4210             append_madprops(PL_thismad, pl_yylval.opval, 0);
4211         PL_thismad = 0;
4212         return optype;
4213
4214     /* fake EOF */
4215     case 0:
4216         optype = PEG;
4217         if (PL_endwhite) {
4218             addmad(newMADsv('p', PL_endwhite), &PL_thismad, 0);
4219             PL_endwhite = 0;
4220         }
4221         break;
4222
4223     case ']':
4224     case '}':
4225         if (PL_faketokens)
4226             break;
4227         /* remember any fake bracket that lexer is about to discard */ 
4228         if (PL_lex_brackets == 1 &&
4229             ((expectation)PL_lex_brackstack[0] & XFAKEBRACK))
4230         {
4231             s = PL_bufptr;
4232             while (s < PL_bufend && (*s == ' ' || *s == '\t'))
4233                 s++;
4234             if (*s == '}') {
4235                 PL_thiswhite = newSVpvn(PL_bufptr, ++s - PL_bufptr);
4236                 addmad(newMADsv('#', PL_thiswhite), &PL_thismad, 0);
4237                 PL_thiswhite = 0;
4238                 PL_bufptr = s - 1;
4239                 break;  /* don't bother looking for trailing comment */
4240             }
4241             else
4242                 s = PL_bufptr;
4243         }
4244         if (optype == ']')
4245             break;
4246         /* FALLTHROUGH */
4247
4248     /* attach a trailing comment to its statement instead of next token */
4249     case ';':
4250         if (PL_faketokens)
4251             break;
4252         if (PL_bufptr > PL_oldbufptr && PL_bufptr[-1] == optype) {
4253             s = PL_bufptr;
4254             while (s < PL_bufend && (*s == ' ' || *s == '\t'))
4255                 s++;
4256             if (*s == '\n' || *s == '#') {
4257                 while (s < PL_bufend && *s != '\n')
4258                     s++;
4259                 if (s < PL_bufend)
4260                     s++;
4261                 PL_thiswhite = newSVpvn(PL_bufptr, s - PL_bufptr);
4262                 addmad(newMADsv('#', PL_thiswhite), &PL_thismad, 0);
4263                 PL_thiswhite = 0;
4264                 PL_bufptr = s;
4265             }
4266         }
4267         break;
4268
4269     /* pval */
4270     case LABEL:
4271         break;
4272
4273     /* ival */
4274     default:
4275         break;
4276
4277     }
4278
4279     /* Create new token struct.  Note: opvals return early above. */
4280     pl_yylval.tkval = newTOKEN(optype, pl_yylval, PL_thismad);
4281     PL_thismad = 0;
4282     return optype;
4283 }
4284 #endif
4285
4286 STATIC char *
4287 S_tokenize_use(pTHX_ int is_use, char *s) {
4288     dVAR;
4289
4290     PERL_ARGS_ASSERT_TOKENIZE_USE;
4291
4292     if (PL_expect != XSTATE)
4293         yyerror(Perl_form(aTHX_ "\"%s\" not allowed in expression",
4294                     is_use ? "use" : "no"));
4295     s = SKIPSPACE1(s);
4296     if (isDIGIT(*s) || (*s == 'v' && isDIGIT(s[1]))) {
4297         s = force_version(s, TRUE);
4298         if (*s == ';' || *s == '}'
4299                 || (s = SKIPSPACE1(s), (*s == ';' || *s == '}'))) {
4300             start_force(PL_curforce);
4301             NEXTVAL_NEXTTOKE.opval = NULL;
4302             force_next(WORD);
4303         }
4304         else if (*s == 'v') {
4305             s = force_word(s,WORD,FALSE,TRUE,FALSE);
4306             s = force_version(s, FALSE);
4307         }
4308     }
4309     else {
4310         s = force_word(s,WORD,FALSE,TRUE,FALSE);
4311         s = force_version(s, FALSE);
4312     }
4313     pl_yylval.ival = is_use;
4314     return s;
4315 }
4316 #ifdef DEBUGGING
4317     static const char* const exp_name[] =
4318         { "OPERATOR", "TERM", "REF", "STATE", "BLOCK", "ATTRBLOCK",
4319           "ATTRTERM", "TERMBLOCK", "TERMORDORDOR"
4320         };
4321 #endif
4322
4323 #define word_takes_any_delimeter(p,l) S_word_takes_any_delimeter(p,l)
4324 STATIC bool
4325 S_word_takes_any_delimeter(char *p, STRLEN len)
4326 {
4327     return (len == 1 && strchr("msyq", p[0])) ||
4328            (len == 2 && (
4329             (p[0] == 't' && p[1] == 'r') ||
4330             (p[0] == 'q' && strchr("qwxr", p[1]))));
4331 }
4332
4333 /*
4334   yylex
4335
4336   Works out what to call the token just pulled out of the input
4337   stream.  The yacc parser takes care of taking the ops we return and
4338   stitching them into a tree.
4339
4340   Returns:
4341     PRIVATEREF
4342
4343   Structure:
4344       if read an identifier
4345           if we're in a my declaration
4346               croak if they tried to say my($foo::bar)
4347               build the ops for a my() declaration
4348           if it's an access to a my() variable
4349               are we in a sort block?
4350                   croak if my($a); $a <=> $b
4351               build ops for access to a my() variable
4352           if in a dq string, and they've said @foo and we can't find @foo
4353               croak
4354           build ops for a bareword
4355       if we already built the token before, use it.
4356 */
4357
4358
4359 #ifdef __SC__
4360 #pragma segment Perl_yylex
4361 #endif
4362 int
4363 Perl_yylex(pTHX)
4364 {
4365     dVAR;
4366     register char *s = PL_bufptr;
4367     register char *d;
4368     STRLEN len;
4369     bool bof = FALSE;
4370     U32 fake_eof = 0;
4371
4372     /* orig_keyword, gvp, and gv are initialized here because
4373      * jump to the label just_a_word_zero can bypass their
4374      * initialization later. */
4375     I32 orig_keyword = 0;
4376     GV *gv = NULL;
4377     GV **gvp = NULL;
4378
4379     DEBUG_T( {
4380         SV* tmp = newSVpvs("");
4381         PerlIO_printf(Perl_debug_log, "### %"IVdf":LEX_%s/X%s %s\n",
4382             (IV)CopLINE(PL_curcop),
4383             lex_state_names[PL_lex_state],
4384             exp_name[PL_expect],
4385             pv_display(tmp, s, strlen(s), 0, 60));
4386         SvREFCNT_dec(tmp);
4387     } );
4388     /* check if there's an identifier for us to look at */
4389     if (PL_lex_state != LEX_KNOWNEXT && PL_pending_ident)
4390         return REPORT(S_pending_ident(aTHX));
4391
4392     /* no identifier pending identification */
4393
4394     switch (PL_lex_state) {
4395 #ifdef COMMENTARY
4396     case LEX_NORMAL:            /* Some compilers will produce faster */
4397     case LEX_INTERPNORMAL:      /* code if we comment these out. */
4398         break;
4399 #endif
4400
4401     /* when we've already built the next token, just pull it out of the queue */
4402     case LEX_KNOWNEXT:
4403 #ifdef PERL_MAD
4404         PL_lasttoke--;
4405         pl_yylval = PL_nexttoke[PL_lasttoke].next_val;
4406         if (PL_madskills) {
4407             PL_thismad = PL_nexttoke[PL_lasttoke].next_mad;
4408             PL_nexttoke[PL_lasttoke].next_mad = 0;
4409             if (PL_thismad && PL_thismad->mad_key == '_') {
4410                 PL_thiswhite = MUTABLE_SV(PL_thismad->mad_val);
4411                 PL_thismad->mad_val = 0;
4412                 mad_free(PL_thismad);
4413                 PL_thismad = 0;
4414             }
4415         }
4416         if (!PL_lasttoke) {
4417             PL_lex_state = PL_lex_defer;
4418             PL_expect = PL_lex_expect;
4419             PL_lex_defer = LEX_NORMAL;
4420             if (!PL_nexttoke[PL_lasttoke].next_type)
4421                 return yylex();
4422         }
4423 #else
4424         PL_nexttoke--;
4425         pl_yylval = PL_nextval[PL_nexttoke];
4426         if (!PL_nexttoke) {
4427             PL_lex_state = PL_lex_defer;
4428             PL_expect = PL_lex_expect;
4429             PL_lex_defer = LEX_NORMAL;
4430         }
4431 #endif
4432         {
4433             I32 next_type;
4434 #ifdef PERL_MAD
4435             next_type = PL_nexttoke[PL_lasttoke].next_type;
4436 #else
4437             next_type = PL_nexttype[PL_nexttoke];
4438 #endif
4439             if (next_type & (7<<24)) {
4440                 if (next_type & (1<<24)) {
4441                     if (PL_lex_brackets > 100)
4442                         Renew(PL_lex_brackstack, PL_lex_brackets + 10, char);
4443                     PL_lex_brackstack[PL_lex_brackets++] =
4444                         (char) ((next_type >> 16) & 0xff);
4445                 }
4446                 if (next_type & (2<<24))
4447                     PL_lex_allbrackets++;
4448                 if (next_type & (4<<24))
4449                     PL_lex_allbrackets--;
4450                 next_type &= 0xffff;
4451             }
4452 #ifdef PERL_MAD
4453             /* FIXME - can these be merged?  */
4454             return next_type;
4455 #else
4456             return REPORT(next_type);
4457 #endif
4458         }
4459
4460     /* interpolated case modifiers like \L \U, including \Q and \E.
4461        when we get here, PL_bufptr is at the \
4462     */
4463     case LEX_INTERPCASEMOD:
4464 #ifdef DEBUGGING
4465         if (PL_bufptr != PL_bufend && *PL_bufptr != '\\')
4466             Perl_croak(aTHX_ "panic: INTERPCASEMOD");
4467 #endif
4468         /* ha