This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
(replaced by #4172)
[perl5.git] / toke.c
CommitLineData
a0d0e21e 1/* toke.c
a687059c 2 *
4eb8286e 3 * Copyright (c) 1991-1999, Larry Wall
a687059c 4 *
d48672a2
LW
5 * You may distribute under the terms of either the GNU General Public
6 * License or the Artistic License, as specified in the README file.
378cc40b 7 *
a0d0e21e
LW
8 */
9
10/*
11 * "It all comes from here, the stench and the peril." --Frodo
378cc40b
LW
12 */
13
9cbb5ea2
GS
14/*
15 * This file is the lexer for Perl. It's closely linked to the
ffb4593c
NT
16 * parser, perly.y.
17 *
18 * The main routine is yylex(), which returns the next token.
19 */
20
378cc40b 21#include "EXTERN.h"
864dbfa3 22#define PERL_IN_TOKE_C
378cc40b 23#include "perl.h"
378cc40b 24
d3b6f988
GS
25#define yychar PL_yychar
26#define yylval PL_yylval
27
fc36a67e 28static char ident_too_long[] = "Identifier too long";
8903cb82 29
51371543
GS
30static void restore_rsfp(pTHXo_ void *f);
31static void restore_expect(pTHXo_ void *e);
32static void restore_lex_expect(pTHXo_ void *e);
33
a0ed51b3 34#define UTF (PL_hints & HINT_UTF8)
834a4ddd
LW
35/*
36 * Note: we try to be careful never to call the isXXX_utf8() functions
37 * unless we're pretty sure we've seen the beginning of a UTF-8 character
38 * (that is, the two high bits are set). Otherwise we risk loading in the
39 * heavy-duty SWASHINIT and SWASHGET routines unnecessarily.
40 */
41#define isIDFIRST_lazy(p) ((!UTF || (*((U8*)p) < 0xc0)) \
42 ? isIDFIRST(*(p)) \
43 : isIDFIRST_utf8((U8*)p))
44#define isALNUM_lazy(p) ((!UTF || (*((U8*)p) < 0xc0)) \
45 ? isALNUM(*(p)) \
46 : isALNUM_utf8((U8*)p))
a0ed51b3 47
2b92dfce
GS
48/* In variables name $^X, these are the legal values for X.
49 * 1999-02-27 mjd-perl-patch@plover.com */
50#define isCONTROLVAR(x) (isUPPER(x) || strchr("[\\]^_?", (x)))
51
ffb4593c
NT
52/* LEX_* are values for PL_lex_state, the state of the lexer.
53 * They are arranged oddly so that the guard on the switch statement
79072805
LW
54 * can get by with a single comparison (if the compiler is smart enough).
55 */
56
fb73857a 57/* #define LEX_NOTPARSING 11 is done in perl.h. */
58
55497cff 59#define LEX_NORMAL 10
60#define LEX_INTERPNORMAL 9
61#define LEX_INTERPCASEMOD 8
62#define LEX_INTERPPUSH 7
63#define LEX_INTERPSTART 6
64#define LEX_INTERPEND 5
65#define LEX_INTERPENDMAYBE 4
66#define LEX_INTERPCONCAT 3
67#define LEX_INTERPCONST 2
68#define LEX_FORMLINE 1
69#define LEX_KNOWNEXT 0
79072805 70
395c3793
LW
71#ifdef I_FCNTL
72#include <fcntl.h>
73#endif
fe14fcc3
LW
74#ifdef I_SYS_FILE
75#include <sys/file.h>
76#endif
395c3793 77
a790bc05 78/* XXX If this causes problems, set i_unistd=undef in the hint file. */
79#ifdef I_UNISTD
80# include <unistd.h> /* Needed for execv() */
81#endif
82
83
79072805
LW
84#ifdef ff_next
85#undef ff_next
d48672a2
LW
86#endif
87
a1a0e61e
TD
88#ifdef USE_PURE_BISON
89YYSTYPE* yylval_pointer = NULL;
90int* yychar_pointer = NULL;
22c35a8c
GS
91# undef yylval
92# undef yychar
e4bfbdd4
JH
93# define yylval (*yylval_pointer)
94# define yychar (*yychar_pointer)
95# define PERL_YYLEX_PARAM yylval_pointer,yychar_pointer
cea2e8a9
GS
96# undef yylex
97# define yylex() Perl_yylex(aTHX_ yylval_pointer, yychar_pointer)
a1a0e61e
TD
98#endif
99
79072805 100#include "keywords.h"
fe14fcc3 101
ffb4593c
NT
102/* CLINE is a macro that ensures PL_copline has a sane value */
103
ae986130
LW
104#ifdef CLINE
105#undef CLINE
106#endif
3280af22
NIS
107#define CLINE (PL_copline = (PL_curcop->cop_line < PL_copline ? PL_curcop->cop_line : PL_copline))
108
ffb4593c
NT
109/*
110 * Convenience functions to return different tokens and prime the
9cbb5ea2 111 * lexer for the next token. They all take an argument.
ffb4593c
NT
112 *
113 * TOKEN : generic token (used for '(', DOLSHARP, etc)
114 * OPERATOR : generic operator
115 * AOPERATOR : assignment operator
116 * PREBLOCK : beginning the block after an if, while, foreach, ...
117 * PRETERMBLOCK : beginning a non-code-defining {} block (eg, hash ref)
118 * PREREF : *EXPR where EXPR is not a simple identifier
119 * TERM : expression term
120 * LOOPX : loop exiting command (goto, last, dump, etc)
121 * FTST : file test operator
122 * FUN0 : zero-argument function
123 * FUN1 : not used
124 * BOop : bitwise or or xor
125 * BAop : bitwise and
126 * SHop : shift operator
127 * PWop : power operator
9cbb5ea2 128 * PMop : pattern-matching operator
ffb4593c
NT
129 * Aop : addition-level operator
130 * Mop : multiplication-level operator
131 * Eop : equality-testing operator
132 * Rop : relational operator <= != gt
133 *
134 * Also see LOP and lop() below.
135 */
136
3280af22
NIS
137#define TOKEN(retval) return (PL_bufptr = s,(int)retval)
138#define OPERATOR(retval) return (PL_expect = XTERM,PL_bufptr = s,(int)retval)
139#define AOPERATOR(retval) return ao((PL_expect = XTERM,PL_bufptr = s,(int)retval))
140#define PREBLOCK(retval) return (PL_expect = XBLOCK,PL_bufptr = s,(int)retval)
141#define PRETERMBLOCK(retval) return (PL_expect = XTERMBLOCK,PL_bufptr = s,(int)retval)
142#define PREREF(retval) return (PL_expect = XREF,PL_bufptr = s,(int)retval)
143#define TERM(retval) return (CLINE, PL_expect = XOPERATOR,PL_bufptr = s,(int)retval)
144#define LOOPX(f) return(yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)LOOPEX)
145#define FTST(f) return(yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)UNIOP)
146#define FUN0(f) return(yylval.ival = f,PL_expect = XOPERATOR,PL_bufptr = s,(int)FUNC0)
147#define FUN1(f) return(yylval.ival = f,PL_expect = XOPERATOR,PL_bufptr = s,(int)FUNC1)
148#define BOop(f) return ao((yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)BITOROP))
149#define BAop(f) return ao((yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)BITANDOP))
150#define SHop(f) return ao((yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)SHIFTOP))
151#define PWop(f) return ao((yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)POWOP))
152#define PMop(f) return(yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)MATCHOP)
153#define Aop(f) return ao((yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)ADDOP))
154#define Mop(f) return ao((yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)MULOP))
155#define Eop(f) return(yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)EQOP)
156#define Rop(f) return(yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)RELOP)
2f3197b3 157
a687059c
LW
158/* This bit of chicanery makes a unary function followed by
159 * a parenthesis into a function with one argument, highest precedence.
160 */
2f3197b3 161#define UNI(f) return(yylval.ival = f, \
3280af22
NIS
162 PL_expect = XTERM, \
163 PL_bufptr = s, \
164 PL_last_uni = PL_oldbufptr, \
165 PL_last_lop_op = f, \
a687059c
LW
166 (*s == '(' || (s = skipspace(s), *s == '(') ? (int)FUNC1 : (int)UNIOP) )
167
79072805 168#define UNIBRACK(f) return(yylval.ival = f, \
3280af22
NIS
169 PL_bufptr = s, \
170 PL_last_uni = PL_oldbufptr, \
79072805
LW
171 (*s == '(' || (s = skipspace(s), *s == '(') ? (int)FUNC1 : (int)UNIOP) )
172
9f68db38 173/* grandfather return to old style */
3280af22 174#define OLDLOP(f) return(yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)LSTOP)
79072805 175
ffb4593c
NT
176/*
177 * S_ao
178 *
179 * This subroutine detects &&= and ||= and turns an ANDAND or OROR
180 * into an OP_ANDASSIGN or OP_ORASSIGN
181 */
182
76e3520e 183STATIC int
cea2e8a9 184S_ao(pTHX_ int toketype)
a0d0e21e 185{
3280af22
NIS
186 if (*PL_bufptr == '=') {
187 PL_bufptr++;
a0d0e21e
LW
188 if (toketype == ANDAND)
189 yylval.ival = OP_ANDASSIGN;
190 else if (toketype == OROR)
191 yylval.ival = OP_ORASSIGN;
192 toketype = ASSIGNOP;
193 }
194 return toketype;
195}
196
ffb4593c
NT
197/*
198 * S_no_op
199 * When Perl expects an operator and finds something else, no_op
200 * prints the warning. It always prints "<something> found where
201 * operator expected. It prints "Missing semicolon on previous line?"
202 * if the surprise occurs at the start of the line. "do you need to
203 * predeclare ..." is printed out for code like "sub bar; foo bar $x"
204 * where the compiler doesn't know if foo is a method call or a function.
205 * It prints "Missing operator before end of line" if there's nothing
206 * after the missing operator, or "... before <...>" if there is something
207 * after the missing operator.
208 */
209
76e3520e 210STATIC void
cea2e8a9 211S_no_op(pTHX_ char *what, char *s)
463ee0b2 212{
3280af22
NIS
213 char *oldbp = PL_bufptr;
214 bool is_first = (PL_oldbufptr == PL_linestart);
68dc0745 215
1189a94a
GS
216 if (!s)
217 s = oldbp;
218 else {
219 assert(s >= oldbp);
220 PL_bufptr = s;
221 }
cea2e8a9 222 yywarn(Perl_form(aTHX_ "%s found where operator expected", what));
748a9306 223 if (is_first)
cea2e8a9 224 Perl_warn(aTHX_ "\t(Missing semicolon on previous line?)\n");
834a4ddd 225 else if (PL_oldoldbufptr && isIDFIRST_lazy(PL_oldoldbufptr)) {
748a9306 226 char *t;
834a4ddd 227 for (t = PL_oldoldbufptr; *t && (isALNUM_lazy(t) || *t == ':'); t++) ;
3280af22 228 if (t < PL_bufptr && isSPACE(*t))
cea2e8a9 229 Perl_warn(aTHX_ "\t(Do you need to predeclare %.*s?)\n",
3280af22 230 t - PL_oldoldbufptr, PL_oldoldbufptr);
748a9306
LW
231 }
232 else
cea2e8a9 233 Perl_warn(aTHX_ "\t(Missing operator before %.*s?)\n", s - oldbp, oldbp);
3280af22 234 PL_bufptr = oldbp;
8990e307
LW
235}
236
ffb4593c
NT
237/*
238 * S_missingterm
239 * Complain about missing quote/regexp/heredoc terminator.
240 * If it's called with (char *)NULL then it cauterizes the line buffer.
241 * If we're in a delimited string and the delimiter is a control
242 * character, it's reformatted into a two-char sequence like ^C.
243 * This is fatal.
244 */
245
76e3520e 246STATIC void
cea2e8a9 247S_missingterm(pTHX_ char *s)
8990e307
LW
248{
249 char tmpbuf[3];
250 char q;
251 if (s) {
252 char *nl = strrchr(s,'\n');
d2719217 253 if (nl)
8990e307
LW
254 *nl = '\0';
255 }
9d116dd7
JH
256 else if (
257#ifdef EBCDIC
258 iscntrl(PL_multi_close)
259#else
260 PL_multi_close < 32 || PL_multi_close == 127
261#endif
262 ) {
8990e307 263 *tmpbuf = '^';
3280af22 264 tmpbuf[1] = toCTRL(PL_multi_close);
8990e307
LW
265 s = "\\n";
266 tmpbuf[2] = '\0';
267 s = tmpbuf;
268 }
269 else {
3280af22 270 *tmpbuf = PL_multi_close;
8990e307
LW
271 tmpbuf[1] = '\0';
272 s = tmpbuf;
273 }
274 q = strchr(s,'"') ? '\'' : '"';
cea2e8a9 275 Perl_croak(aTHX_ "Can't find string terminator %c%s%c anywhere before EOF",q,s,q);
463ee0b2 276}
79072805 277
ffb4593c
NT
278/*
279 * Perl_deprecate
ffb4593c
NT
280 */
281
79072805 282void
864dbfa3 283Perl_deprecate(pTHX_ char *s)
a0d0e21e 284{
d008e5eb 285 dTHR;
599cee73 286 if (ckWARN(WARN_DEPRECATED))
cea2e8a9 287 Perl_warner(aTHX_ WARN_DEPRECATED, "Use of %s is deprecated", s);
a0d0e21e
LW
288}
289
ffb4593c
NT
290/*
291 * depcom
9cbb5ea2 292 * Deprecate a comma-less variable list.
ffb4593c
NT
293 */
294
76e3520e 295STATIC void
cea2e8a9 296S_depcom(pTHX)
a0d0e21e
LW
297{
298 deprecate("comma-less variable list");
299}
300
ffb4593c 301/*
9cbb5ea2
GS
302 * experimental text filters for win32 carriage-returns, utf16-to-utf8 and
303 * utf16-to-utf8-reversed.
ffb4593c
NT
304 */
305
a868473f
NIS
306#ifdef WIN32
307
76e3520e 308STATIC I32
cea2e8a9 309S_win32_textfilter(pTHX_ int idx, SV *sv, int maxlen)
a868473f
NIS
310{
311 I32 count = FILTER_READ(idx+1, sv, maxlen);
312 if (count > 0 && !maxlen)
313 win32_strip_return(sv);
314 return count;
315}
316#endif
317
a0ed51b3 318STATIC I32
cea2e8a9 319S_utf16_textfilter(pTHX_ int idx, SV *sv, int maxlen)
a0ed51b3
LW
320{
321 I32 count = FILTER_READ(idx+1, sv, maxlen);
322 if (count) {
dfe13c55
GS
323 U8* tmps;
324 U8* tend;
325 New(898, tmps, SvCUR(sv) * 3 / 2 + 1, U8);
a0ed51b3 326 tend = utf16_to_utf8((U16*)SvPVX(sv), tmps, SvCUR(sv));
dfe13c55 327 sv_usepvn(sv, (char*)tmps, tend - tmps);
a0ed51b3
LW
328
329 }
330 return count;
331}
332
333STATIC I32
cea2e8a9 334S_utf16rev_textfilter(pTHX_ int idx, SV *sv, int maxlen)
a0ed51b3
LW
335{
336 I32 count = FILTER_READ(idx+1, sv, maxlen);
337 if (count) {
dfe13c55
GS
338 U8* tmps;
339 U8* tend;
340 New(898, tmps, SvCUR(sv) * 3 / 2 + 1, U8);
a0ed51b3 341 tend = utf16_to_utf8_reversed((U16*)SvPVX(sv), tmps, SvCUR(sv));
dfe13c55 342 sv_usepvn(sv, (char*)tmps, tend - tmps);
a0ed51b3
LW
343
344 }
345 return count;
346}
a868473f 347
ffb4593c
NT
348/*
349 * Perl_lex_start
9cbb5ea2
GS
350 * Initialize variables. Uses the Perl save_stack to save its state (for
351 * recursive calls to the parser).
ffb4593c
NT
352 */
353
a0d0e21e 354void
864dbfa3 355Perl_lex_start(pTHX_ SV *line)
79072805 356{
0f15f207 357 dTHR;
8990e307
LW
358 char *s;
359 STRLEN len;
360
3280af22
NIS
361 SAVEI32(PL_lex_dojoin);
362 SAVEI32(PL_lex_brackets);
363 SAVEI32(PL_lex_fakebrack);
364 SAVEI32(PL_lex_casemods);
365 SAVEI32(PL_lex_starts);
366 SAVEI32(PL_lex_state);
367 SAVESPTR(PL_lex_inpat);
368 SAVEI32(PL_lex_inwhat);
369 SAVEI16(PL_curcop->cop_line);
370 SAVEPPTR(PL_bufptr);
371 SAVEPPTR(PL_bufend);
372 SAVEPPTR(PL_oldbufptr);
373 SAVEPPTR(PL_oldoldbufptr);
374 SAVEPPTR(PL_linestart);
375 SAVESPTR(PL_linestr);
376 SAVEPPTR(PL_lex_brackstack);
377 SAVEPPTR(PL_lex_casestack);
51371543 378 SAVEDESTRUCTOR(restore_rsfp, PL_rsfp);
3280af22
NIS
379 SAVESPTR(PL_lex_stuff);
380 SAVEI32(PL_lex_defer);
09bef843 381 SAVEI32(PL_sublex_info.sub_inwhat);
3280af22 382 SAVESPTR(PL_lex_repl);
51371543
GS
383 SAVEDESTRUCTOR(restore_expect, PL_tokenbuf + PL_expect); /* encode as pointer */
384 SAVEDESTRUCTOR(restore_lex_expect, PL_tokenbuf + PL_expect);
3280af22
NIS
385
386 PL_lex_state = LEX_NORMAL;
387 PL_lex_defer = 0;
388 PL_expect = XSTATE;
389 PL_lex_brackets = 0;
390 PL_lex_fakebrack = 0;
391 New(899, PL_lex_brackstack, 120, char);
392 New(899, PL_lex_casestack, 12, char);
393 SAVEFREEPV(PL_lex_brackstack);
394 SAVEFREEPV(PL_lex_casestack);
395 PL_lex_casemods = 0;
396 *PL_lex_casestack = '\0';
397 PL_lex_dojoin = 0;
398 PL_lex_starts = 0;
399 PL_lex_stuff = Nullsv;
400 PL_lex_repl = Nullsv;
401 PL_lex_inpat = 0;
402 PL_lex_inwhat = 0;
09bef843 403 PL_sublex_info.sub_inwhat = 0;
3280af22
NIS
404 PL_linestr = line;
405 if (SvREADONLY(PL_linestr))
406 PL_linestr = sv_2mortal(newSVsv(PL_linestr));
407 s = SvPV(PL_linestr, len);
8990e307 408 if (len && s[len-1] != ';') {
3280af22
NIS
409 if (!(SvFLAGS(PL_linestr) & SVs_TEMP))
410 PL_linestr = sv_2mortal(newSVsv(PL_linestr));
411 sv_catpvn(PL_linestr, "\n;", 2);
8990e307 412 }
3280af22
NIS
413 SvTEMP_off(PL_linestr);
414 PL_oldoldbufptr = PL_oldbufptr = PL_bufptr = PL_linestart = SvPVX(PL_linestr);
415 PL_bufend = PL_bufptr + SvCUR(PL_linestr);
416 SvREFCNT_dec(PL_rs);
79cb57f6 417 PL_rs = newSVpvn("\n", 1);
3280af22 418 PL_rsfp = 0;
79072805 419}
a687059c 420
ffb4593c
NT
421/*
422 * Perl_lex_end
9cbb5ea2
GS
423 * Finalizer for lexing operations. Must be called when the parser is
424 * done with the lexer.
ffb4593c
NT
425 */
426
463ee0b2 427void
864dbfa3 428Perl_lex_end(pTHX)
463ee0b2 429{
3280af22 430 PL_doextract = FALSE;
463ee0b2
LW
431}
432
ffb4593c
NT
433/*
434 * S_incline
435 * This subroutine has nothing to do with tilting, whether at windmills
436 * or pinball tables. Its name is short for "increment line". It
437 * increments the current line number in PL_curcop->cop_line and checks
438 * to see whether the line starts with a comment of the form
9cbb5ea2
GS
439 * # line 500 "foo.pm"
440 * If so, it sets the current line number and file to the values in the comment.
ffb4593c
NT
441 */
442
76e3520e 443STATIC void
cea2e8a9 444S_incline(pTHX_ char *s)
463ee0b2 445{
0f15f207 446 dTHR;
463ee0b2
LW
447 char *t;
448 char *n;
449 char ch;
450 int sawline = 0;
451
3280af22 452 PL_curcop->cop_line++;
463ee0b2
LW
453 if (*s++ != '#')
454 return;
455 while (*s == ' ' || *s == '\t') s++;
456 if (strnEQ(s, "line ", 5)) {
457 s += 5;
458 sawline = 1;
459 }
460 if (!isDIGIT(*s))
461 return;
462 n = s;
463 while (isDIGIT(*s))
464 s++;
465 while (*s == ' ' || *s == '\t')
466 s++;
467 if (*s == '"' && (t = strchr(s+1, '"')))
468 s++;
469 else {
470 if (!sawline)
471 return; /* false alarm */
472 for (t = s; !isSPACE(*t); t++) ;
473 }
474 ch = *t;
475 *t = '\0';
476 if (t - s > 0)
3280af22 477 PL_curcop->cop_filegv = gv_fetchfile(s);
463ee0b2 478 else
3280af22 479 PL_curcop->cop_filegv = gv_fetchfile(PL_origfilename);
463ee0b2 480 *t = ch;
3280af22 481 PL_curcop->cop_line = atoi(n)-1;
463ee0b2
LW
482}
483
ffb4593c
NT
484/*
485 * S_skipspace
486 * Called to gobble the appropriate amount and type of whitespace.
487 * Skips comments as well.
488 */
489
76e3520e 490STATIC char *
cea2e8a9 491S_skipspace(pTHX_ register char *s)
a687059c 492{
11343788 493 dTHR;
3280af22
NIS
494 if (PL_lex_formbrack && PL_lex_brackets <= PL_lex_formbrack) {
495 while (s < PL_bufend && (*s == ' ' || *s == '\t'))
463ee0b2
LW
496 s++;
497 return s;
498 }
499 for (;;) {
fd049845 500 STRLEN prevlen;
09bef843
SB
501 SSize_t oldprevlen, oldoldprevlen;
502 SSize_t oldloplen, oldunilen;
60e6418e
GS
503 while (s < PL_bufend && isSPACE(*s)) {
504 if (*s++ == '\n' && PL_in_eval && !PL_rsfp)
505 incline(s);
506 }
ffb4593c
NT
507
508 /* comment */
3280af22
NIS
509 if (s < PL_bufend && *s == '#') {
510 while (s < PL_bufend && *s != '\n')
463ee0b2 511 s++;
60e6418e 512 if (s < PL_bufend) {
463ee0b2 513 s++;
60e6418e
GS
514 if (PL_in_eval && !PL_rsfp) {
515 incline(s);
516 continue;
517 }
518 }
463ee0b2 519 }
ffb4593c
NT
520
521 /* only continue to recharge the buffer if we're at the end
522 * of the buffer, we're not reading from a source filter, and
523 * we're in normal lexing mode
524 */
09bef843
SB
525 if (s < PL_bufend || !PL_rsfp || PL_sublex_info.sub_inwhat ||
526 PL_lex_state == LEX_FORMLINE)
463ee0b2 527 return s;
ffb4593c
NT
528
529 /* try to recharge the buffer */
9cbb5ea2
GS
530 if ((s = filter_gets(PL_linestr, PL_rsfp,
531 (prevlen = SvCUR(PL_linestr)))) == Nullch)
532 {
533 /* end of file. Add on the -p or -n magic */
3280af22
NIS
534 if (PL_minus_n || PL_minus_p) {
535 sv_setpv(PL_linestr,PL_minus_p ?
08e9d68e
DD
536 ";}continue{print or die qq(-p destination: $!\\n)" :
537 "");
3280af22
NIS
538 sv_catpv(PL_linestr,";}");
539 PL_minus_n = PL_minus_p = 0;
a0d0e21e
LW
540 }
541 else
3280af22 542 sv_setpv(PL_linestr,";");
ffb4593c
NT
543
544 /* reset variables for next time we lex */
9cbb5ea2
GS
545 PL_oldoldbufptr = PL_oldbufptr = PL_bufptr = s = PL_linestart
546 = SvPVX(PL_linestr);
3280af22 547 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
ffb4593c
NT
548
549 /* Close the filehandle. Could be from -P preprocessor,
550 * STDIN, or a regular file. If we were reading code from
551 * STDIN (because the commandline held no -e or filename)
552 * then we don't close it, we reset it so the code can
553 * read from STDIN too.
554 */
555
3280af22
NIS
556 if (PL_preprocess && !PL_in_eval)
557 (void)PerlProc_pclose(PL_rsfp);
558 else if ((PerlIO*)PL_rsfp == PerlIO_stdin())
559 PerlIO_clearerr(PL_rsfp);
8990e307 560 else
3280af22
NIS
561 (void)PerlIO_close(PL_rsfp);
562 PL_rsfp = Nullfp;
463ee0b2
LW
563 return s;
564 }
ffb4593c
NT
565
566 /* not at end of file, so we only read another line */
09bef843
SB
567 /* make corresponding updates to old pointers, for yyerror() */
568 oldprevlen = PL_oldbufptr - PL_bufend;
569 oldoldprevlen = PL_oldoldbufptr - PL_bufend;
570 if (PL_last_uni)
571 oldunilen = PL_last_uni - PL_bufend;
572 if (PL_last_lop)
573 oldloplen = PL_last_lop - PL_bufend;
3280af22
NIS
574 PL_linestart = PL_bufptr = s + prevlen;
575 PL_bufend = s + SvCUR(PL_linestr);
576 s = PL_bufptr;
09bef843
SB
577 PL_oldbufptr = s + oldprevlen;
578 PL_oldoldbufptr = s + oldoldprevlen;
579 if (PL_last_uni)
580 PL_last_uni = s + oldunilen;
581 if (PL_last_lop)
582 PL_last_lop = s + oldloplen;
a0d0e21e 583 incline(s);
ffb4593c
NT
584
585 /* debugger active and we're not compiling the debugger code,
586 * so store the line into the debugger's array of lines
587 */
3280af22 588 if (PERLDB_LINE && PL_curstash != PL_debstash) {
8990e307
LW
589 SV *sv = NEWSV(85,0);
590
591 sv_upgrade(sv, SVt_PVMG);
3280af22
NIS
592 sv_setpvn(sv,PL_bufptr,PL_bufend-PL_bufptr);
593 av_store(GvAV(PL_curcop->cop_filegv),(I32)PL_curcop->cop_line,sv);
8990e307 594 }
463ee0b2 595 }
a687059c 596}
378cc40b 597
ffb4593c
NT
598/*
599 * S_check_uni
600 * Check the unary operators to ensure there's no ambiguity in how they're
601 * used. An ambiguous piece of code would be:
602 * rand + 5
603 * This doesn't mean rand() + 5. Because rand() is a unary operator,
604 * the +5 is its argument.
605 */
606
76e3520e 607STATIC void
cea2e8a9 608S_check_uni(pTHX)
ba106d47 609{
2f3197b3 610 char *s;
a0d0e21e 611 char *t;
0453d815 612 dTHR;
2f3197b3 613
3280af22 614 if (PL_oldoldbufptr != PL_last_uni)
2f3197b3 615 return;
3280af22
NIS
616 while (isSPACE(*PL_last_uni))
617 PL_last_uni++;
834a4ddd 618 for (s = PL_last_uni; isALNUM_lazy(s) || *s == '-'; s++) ;
3280af22 619 if ((t = strchr(s, '(')) && t < PL_bufptr)
a0d0e21e 620 return;
0453d815 621 if (ckWARN_d(WARN_AMBIGUOUS)){
f248d071 622 char ch = *s;
0453d815
PM
623 *s = '\0';
624 Perl_warner(aTHX_ WARN_AMBIGUOUS,
625 "Warning: Use of \"%s\" without parens is ambiguous",
626 PL_last_uni);
627 *s = ch;
628 }
2f3197b3
LW
629}
630
ffb4593c
NT
631/* workaround to replace the UNI() macro with a function. Only the
632 * hints/uts.sh file mentions this. Other comments elsewhere in the
633 * source indicate Microport Unix might need it too.
634 */
635
ffed7fef
LW
636#ifdef CRIPPLED_CC
637
638#undef UNI
ffed7fef 639#define UNI(f) return uni(f,s)
ffed7fef 640
76e3520e 641STATIC int
cea2e8a9 642S_uni(pTHX_ I32 f, char *s)
ffed7fef
LW
643{
644 yylval.ival = f;
3280af22
NIS
645 PL_expect = XTERM;
646 PL_bufptr = s;
8f872242
NIS
647 PL_last_uni = PL_oldbufptr;
648 PL_last_lop_op = f;
ffed7fef
LW
649 if (*s == '(')
650 return FUNC1;
651 s = skipspace(s);
652 if (*s == '(')
653 return FUNC1;
654 else
655 return UNIOP;
656}
657
a0d0e21e
LW
658#endif /* CRIPPLED_CC */
659
ffb4593c
NT
660/*
661 * LOP : macro to build a list operator. Its behaviour has been replaced
662 * with a subroutine, S_lop() for which LOP is just another name.
663 */
664
a0d0e21e
LW
665#define LOP(f,x) return lop(f,x,s)
666
ffb4593c
NT
667/*
668 * S_lop
669 * Build a list operator (or something that might be one). The rules:
670 * - if we have a next token, then it's a list operator [why?]
671 * - if the next thing is an opening paren, then it's a function
672 * - else it's a list operator
673 */
674
76e3520e 675STATIC I32
cea2e8a9 676S_lop(pTHX_ I32 f, expectation x, char *s)
ffed7fef 677{
0f15f207 678 dTHR;
79072805 679 yylval.ival = f;
35c8bce7 680 CLINE;
3280af22
NIS
681 PL_expect = x;
682 PL_bufptr = s;
683 PL_last_lop = PL_oldbufptr;
684 PL_last_lop_op = f;
685 if (PL_nexttoke)
a0d0e21e 686 return LSTOP;
79072805
LW
687 if (*s == '(')
688 return FUNC;
689 s = skipspace(s);
690 if (*s == '(')
691 return FUNC;
692 else
693 return LSTOP;
694}
695
ffb4593c
NT
696/*
697 * S_force_next
9cbb5ea2 698 * When the lexer realizes it knows the next token (for instance,
ffb4593c 699 * it is reordering tokens for the parser) then it can call S_force_next
9cbb5ea2
GS
700 * to know what token to return the next time the lexer is called. Caller
701 * will need to set PL_nextval[], and possibly PL_expect to ensure the lexer
702 * handles the token correctly.
ffb4593c
NT
703 */
704
76e3520e 705STATIC void
cea2e8a9 706S_force_next(pTHX_ I32 type)
79072805 707{
3280af22
NIS
708 PL_nexttype[PL_nexttoke] = type;
709 PL_nexttoke++;
710 if (PL_lex_state != LEX_KNOWNEXT) {
711 PL_lex_defer = PL_lex_state;
712 PL_lex_expect = PL_expect;
713 PL_lex_state = LEX_KNOWNEXT;
79072805
LW
714 }
715}
716
ffb4593c
NT
717/*
718 * S_force_word
719 * When the lexer knows the next thing is a word (for instance, it has
720 * just seen -> and it knows that the next char is a word char, then
721 * it calls S_force_word to stick the next word into the PL_next lookahead.
722 *
723 * Arguments:
b1b65b59 724 * char *start : buffer position (must be within PL_linestr)
ffb4593c
NT
725 * int token : PL_next will be this type of bare word (e.g., METHOD,WORD)
726 * int check_keyword : if true, Perl checks to make sure the word isn't
727 * a keyword (do this if the word is a label, e.g. goto FOO)
728 * int allow_pack : if true, : characters will also be allowed (require,
729 * use, etc. do this)
9cbb5ea2 730 * int allow_initial_tick : used by the "sub" lexer only.
ffb4593c
NT
731 */
732
76e3520e 733STATIC char *
cea2e8a9 734S_force_word(pTHX_ register char *start, int token, int check_keyword, int allow_pack, int allow_initial_tick)
79072805 735{
463ee0b2
LW
736 register char *s;
737 STRLEN len;
738
739 start = skipspace(start);
740 s = start;
834a4ddd 741 if (isIDFIRST_lazy(s) ||
a0d0e21e 742 (allow_pack && *s == ':') ||
15f0808c 743 (allow_initial_tick && *s == '\'') )
a0d0e21e 744 {
3280af22
NIS
745 s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, allow_pack, &len);
746 if (check_keyword && keyword(PL_tokenbuf, len))
463ee0b2
LW
747 return start;
748 if (token == METHOD) {
749 s = skipspace(s);
750 if (*s == '(')
3280af22 751 PL_expect = XTERM;
463ee0b2 752 else {
3280af22 753 PL_expect = XOPERATOR;
463ee0b2 754 }
79072805 755 }
3280af22
NIS
756 PL_nextval[PL_nexttoke].opval = (OP*)newSVOP(OP_CONST,0, newSVpv(PL_tokenbuf,0));
757 PL_nextval[PL_nexttoke].opval->op_private |= OPpCONST_BARE;
79072805
LW
758 force_next(token);
759 }
760 return s;
761}
762
ffb4593c
NT
763/*
764 * S_force_ident
9cbb5ea2 765 * Called when the lexer wants $foo *foo &foo etc, but the program
ffb4593c
NT
766 * text only contains the "foo" portion. The first argument is a pointer
767 * to the "foo", and the second argument is the type symbol to prefix.
768 * Forces the next token to be a "WORD".
9cbb5ea2 769 * Creates the symbol if it didn't already exist (via gv_fetchpv()).
ffb4593c
NT
770 */
771
76e3520e 772STATIC void
cea2e8a9 773S_force_ident(pTHX_ register char *s, int kind)
79072805
LW
774{
775 if (s && *s) {
11343788 776 OP* o = (OP*)newSVOP(OP_CONST, 0, newSVpv(s,0));
3280af22 777 PL_nextval[PL_nexttoke].opval = o;
79072805 778 force_next(WORD);
748a9306 779 if (kind) {
e858de61 780 dTHR; /* just for in_eval */
11343788 781 o->op_private = OPpCONST_ENTERED;
55497cff 782 /* XXX see note in pp_entereval() for why we forgo typo
783 warnings if the symbol must be introduced in an eval.
784 GSAR 96-10-12 */
3280af22 785 gv_fetchpv(s, PL_in_eval ? (GV_ADDMULTI | GV_ADDINEVAL) : TRUE,
a0d0e21e
LW
786 kind == '$' ? SVt_PV :
787 kind == '@' ? SVt_PVAV :
788 kind == '%' ? SVt_PVHV :
789 SVt_PVGV
790 );
748a9306 791 }
79072805
LW
792 }
793}
794
ffb4593c
NT
795/*
796 * S_force_version
797 * Forces the next token to be a version number.
798 */
799
76e3520e 800STATIC char *
cea2e8a9 801S_force_version(pTHX_ char *s)
89bfa8cd 802{
803 OP *version = Nullop;
804
805 s = skipspace(s);
806
807 /* default VERSION number -- GBARR */
808
809 if(isDIGIT(*s)) {
810 char *d;
811 int c;
55497cff 812 for( d=s, c = 1; isDIGIT(*d) || *d == '_' || (*d == '.' && c--); d++);
89bfa8cd 813 if((*d == ';' || isSPACE(*d)) && *(skipspace(d)) != ',') {
814 s = scan_num(s);
815 /* real VERSION number -- GBARR */
816 version = yylval.opval;
817 }
818 }
819
820 /* NOTE: The parser sees the package name and the VERSION swapped */
3280af22 821 PL_nextval[PL_nexttoke].opval = version;
89bfa8cd 822 force_next(WORD);
823
824 return (s);
825}
826
ffb4593c
NT
827/*
828 * S_tokeq
829 * Tokenize a quoted string passed in as an SV. It finds the next
830 * chunk, up to end of string or a backslash. It may make a new
831 * SV containing that chunk (if HINT_NEW_STRING is on). It also
832 * turns \\ into \.
833 */
834
76e3520e 835STATIC SV *
cea2e8a9 836S_tokeq(pTHX_ SV *sv)
79072805
LW
837{
838 register char *s;
839 register char *send;
840 register char *d;
b3ac6de7
IZ
841 STRLEN len = 0;
842 SV *pv = sv;
79072805
LW
843
844 if (!SvLEN(sv))
b3ac6de7 845 goto finish;
79072805 846
a0d0e21e 847 s = SvPV_force(sv, len);
748a9306 848 if (SvIVX(sv) == -1)
b3ac6de7 849 goto finish;
463ee0b2 850 send = s + len;
79072805
LW
851 while (s < send && *s != '\\')
852 s++;
853 if (s == send)
b3ac6de7 854 goto finish;
79072805 855 d = s;
3280af22 856 if ( PL_hints & HINT_NEW_STRING )
79cb57f6 857 pv = sv_2mortal(newSVpvn(SvPVX(pv), len));
79072805
LW
858 while (s < send) {
859 if (*s == '\\') {
a0d0e21e 860 if (s + 1 < send && (s[1] == '\\'))
79072805
LW
861 s++; /* all that, just for this */
862 }
863 *d++ = *s++;
864 }
865 *d = '\0';
463ee0b2 866 SvCUR_set(sv, d - SvPVX(sv));
b3ac6de7 867 finish:
3280af22 868 if ( PL_hints & HINT_NEW_STRING )
b3ac6de7 869 return new_constant(NULL, 0, "q", sv, pv, "q");
79072805
LW
870 return sv;
871}
872
ffb4593c
NT
873/*
874 * Now come three functions related to double-quote context,
875 * S_sublex_start, S_sublex_push, and S_sublex_done. They're used when
876 * converting things like "\u\Lgnat" into ucfirst(lc("gnat")). They
877 * interact with PL_lex_state, and create fake ( ... ) argument lists
878 * to handle functions and concatenation.
879 * They assume that whoever calls them will be setting up a fake
880 * join call, because each subthing puts a ',' after it. This lets
881 * "lower \luPpEr"
882 * become
883 * join($, , 'lower ', lcfirst( 'uPpEr', ) ,)
884 *
885 * (I'm not sure whether the spurious commas at the end of lcfirst's
886 * arguments and join's arguments are created or not).
887 */
888
889/*
890 * S_sublex_start
891 * Assumes that yylval.ival is the op we're creating (e.g. OP_LCFIRST).
892 *
893 * Pattern matching will set PL_lex_op to the pattern-matching op to
894 * make (we return THING if yylval.ival is OP_NULL, PMFUNC otherwise).
895 *
896 * OP_CONST and OP_READLINE are easy--just make the new op and return.
897 *
898 * Everything else becomes a FUNC.
899 *
900 * Sets PL_lex_state to LEX_INTERPPUSH unless (ival was OP_NULL or we
901 * had an OP_CONST or OP_READLINE). This just sets us up for a
902 * call to S_sublex_push().
903 */
904
76e3520e 905STATIC I32
cea2e8a9 906S_sublex_start(pTHX)
79072805
LW
907{
908 register I32 op_type = yylval.ival;
79072805
LW
909
910 if (op_type == OP_NULL) {
3280af22
NIS
911 yylval.opval = PL_lex_op;
912 PL_lex_op = Nullop;
79072805
LW
913 return THING;
914 }
915 if (op_type == OP_CONST || op_type == OP_READLINE) {
3280af22 916 SV *sv = tokeq(PL_lex_stuff);
b3ac6de7
IZ
917
918 if (SvTYPE(sv) == SVt_PVIV) {
919 /* Overloaded constants, nothing fancy: Convert to SVt_PV: */
920 STRLEN len;
921 char *p;
922 SV *nsv;
923
924 p = SvPV(sv, len);
79cb57f6 925 nsv = newSVpvn(p, len);
b3ac6de7
IZ
926 SvREFCNT_dec(sv);
927 sv = nsv;
928 }
929 yylval.opval = (OP*)newSVOP(op_type, 0, sv);
3280af22 930 PL_lex_stuff = Nullsv;
79072805
LW
931 return THING;
932 }
933
3280af22
NIS
934 PL_sublex_info.super_state = PL_lex_state;
935 PL_sublex_info.sub_inwhat = op_type;
936 PL_sublex_info.sub_op = PL_lex_op;
937 PL_lex_state = LEX_INTERPPUSH;
55497cff 938
3280af22
NIS
939 PL_expect = XTERM;
940 if (PL_lex_op) {
941 yylval.opval = PL_lex_op;
942 PL_lex_op = Nullop;
55497cff 943 return PMFUNC;
944 }
945 else
946 return FUNC;
947}
948
ffb4593c
NT
949/*
950 * S_sublex_push
951 * Create a new scope to save the lexing state. The scope will be
952 * ended in S_sublex_done. Returns a '(', starting the function arguments
953 * to the uc, lc, etc. found before.
954 * Sets PL_lex_state to LEX_INTERPCONCAT.
955 */
956
76e3520e 957STATIC I32
cea2e8a9 958S_sublex_push(pTHX)
55497cff 959{
0f15f207 960 dTHR;
f46d017c 961 ENTER;
55497cff 962
3280af22
NIS
963 PL_lex_state = PL_sublex_info.super_state;
964 SAVEI32(PL_lex_dojoin);
965 SAVEI32(PL_lex_brackets);
966 SAVEI32(PL_lex_fakebrack);
967 SAVEI32(PL_lex_casemods);
968 SAVEI32(PL_lex_starts);
969 SAVEI32(PL_lex_state);
970 SAVESPTR(PL_lex_inpat);
971 SAVEI32(PL_lex_inwhat);
972 SAVEI16(PL_curcop->cop_line);
973 SAVEPPTR(PL_bufptr);
974 SAVEPPTR(PL_oldbufptr);
975 SAVEPPTR(PL_oldoldbufptr);
976 SAVEPPTR(PL_linestart);
977 SAVESPTR(PL_linestr);
978 SAVEPPTR(PL_lex_brackstack);
979 SAVEPPTR(PL_lex_casestack);
980
981 PL_linestr = PL_lex_stuff;
982 PL_lex_stuff = Nullsv;
983
9cbb5ea2
GS
984 PL_bufend = PL_bufptr = PL_oldbufptr = PL_oldoldbufptr = PL_linestart
985 = SvPVX(PL_linestr);
3280af22
NIS
986 PL_bufend += SvCUR(PL_linestr);
987 SAVEFREESV(PL_linestr);
988
989 PL_lex_dojoin = FALSE;
990 PL_lex_brackets = 0;
991 PL_lex_fakebrack = 0;
992 New(899, PL_lex_brackstack, 120, char);
993 New(899, PL_lex_casestack, 12, char);
994 SAVEFREEPV(PL_lex_brackstack);
995 SAVEFREEPV(PL_lex_casestack);
996 PL_lex_casemods = 0;
997 *PL_lex_casestack = '\0';
998 PL_lex_starts = 0;
999 PL_lex_state = LEX_INTERPCONCAT;
1000 PL_curcop->cop_line = PL_multi_start;
1001
1002 PL_lex_inwhat = PL_sublex_info.sub_inwhat;
1003 if (PL_lex_inwhat == OP_MATCH || PL_lex_inwhat == OP_QR || PL_lex_inwhat == OP_SUBST)
1004 PL_lex_inpat = PL_sublex_info.sub_op;
79072805 1005 else
3280af22 1006 PL_lex_inpat = Nullop;
79072805 1007
55497cff 1008 return '(';
79072805
LW
1009}
1010
ffb4593c
NT
1011/*
1012 * S_sublex_done
1013 * Restores lexer state after a S_sublex_push.
1014 */
1015
76e3520e 1016STATIC I32
cea2e8a9 1017S_sublex_done(pTHX)
79072805 1018{
3280af22
NIS
1019 if (!PL_lex_starts++) {
1020 PL_expect = XOPERATOR;
79cb57f6 1021 yylval.opval = (OP*)newSVOP(OP_CONST, 0, newSVpvn("",0));
79072805
LW
1022 return THING;
1023 }
1024
3280af22
NIS
1025 if (PL_lex_casemods) { /* oops, we've got some unbalanced parens */
1026 PL_lex_state = LEX_INTERPCASEMOD;
cea2e8a9 1027 return yylex();
79072805
LW
1028 }
1029
ffb4593c 1030 /* Is there a right-hand side to take care of? (s//RHS/ or tr//RHS/) */
3280af22
NIS
1031 if (PL_lex_repl && (PL_lex_inwhat == OP_SUBST || PL_lex_inwhat == OP_TRANS)) {
1032 PL_linestr = PL_lex_repl;
1033 PL_lex_inpat = 0;
1034 PL_bufend = PL_bufptr = PL_oldbufptr = PL_oldoldbufptr = PL_linestart = SvPVX(PL_linestr);
1035 PL_bufend += SvCUR(PL_linestr);
1036 SAVEFREESV(PL_linestr);
1037 PL_lex_dojoin = FALSE;
1038 PL_lex_brackets = 0;
1039 PL_lex_fakebrack = 0;
1040 PL_lex_casemods = 0;
1041 *PL_lex_casestack = '\0';
1042 PL_lex_starts = 0;
25da4f38 1043 if (SvEVALED(PL_lex_repl)) {
3280af22
NIS
1044 PL_lex_state = LEX_INTERPNORMAL;
1045 PL_lex_starts++;
e9fa98b2
HS
1046 /* we don't clear PL_lex_repl here, so that we can check later
1047 whether this is an evalled subst; that means we rely on the
1048 logic to ensure sublex_done() is called again only via the
1049 branch (in yylex()) that clears PL_lex_repl, else we'll loop */
79072805 1050 }
e9fa98b2 1051 else {
3280af22 1052 PL_lex_state = LEX_INTERPCONCAT;
e9fa98b2
HS
1053 PL_lex_repl = Nullsv;
1054 }
79072805 1055 return ',';
ffed7fef
LW
1056 }
1057 else {
f46d017c 1058 LEAVE;
3280af22
NIS
1059 PL_bufend = SvPVX(PL_linestr);
1060 PL_bufend += SvCUR(PL_linestr);
1061 PL_expect = XOPERATOR;
09bef843 1062 PL_sublex_info.sub_inwhat = 0;
79072805 1063 return ')';
ffed7fef
LW
1064 }
1065}
1066
02aa26ce
NT
1067/*
1068 scan_const
1069
1070 Extracts a pattern, double-quoted string, or transliteration. This
1071 is terrifying code.
1072
3280af22
NIS
1073 It looks at lex_inwhat and PL_lex_inpat to find out whether it's
1074 processing a pattern (PL_lex_inpat is true), a transliteration
02aa26ce
NT
1075 (lex_inwhat & OP_TRANS is true), or a double-quoted string.
1076
9b599b2a
GS
1077 Returns a pointer to the character scanned up to. Iff this is
1078 advanced from the start pointer supplied (ie if anything was
1079 successfully parsed), will leave an OP for the substring scanned
1080 in yylval. Caller must intuit reason for not parsing further
1081 by looking at the next characters herself.
1082
02aa26ce
NT
1083 In patterns:
1084 backslashes:
1085 double-quoted style: \r and \n
1086 regexp special ones: \D \s
1087 constants: \x3
1088 backrefs: \1 (deprecated in substitution replacements)
1089 case and quoting: \U \Q \E
1090 stops on @ and $, but not for $ as tail anchor
1091
1092 In transliterations:
1093 characters are VERY literal, except for - not at the start or end
1094 of the string, which indicates a range. scan_const expands the
1095 range to the full set of intermediate characters.
1096
1097 In double-quoted strings:
1098 backslashes:
1099 double-quoted style: \r and \n
1100 constants: \x3
1101 backrefs: \1 (deprecated)
1102 case and quoting: \U \Q \E
1103 stops on @ and $
1104
1105 scan_const does *not* construct ops to handle interpolated strings.
1106 It stops processing as soon as it finds an embedded $ or @ variable
1107 and leaves it to the caller to work out what's going on.
1108
1109 @ in pattern could be: @foo, @{foo}, @$foo, @'foo, @:foo.
1110
1111 $ in pattern could be $foo or could be tail anchor. Assumption:
1112 it's a tail anchor if $ is the last thing in the string, or if it's
1113 followed by one of ")| \n\t"
1114
1115 \1 (backreferences) are turned into $1
1116
1117 The structure of the code is
1118 while (there's a character to process) {
1119 handle transliteration ranges
1120 skip regexp comments
1121 skip # initiated comments in //x patterns
1122 check for embedded @foo
1123 check for embedded scalars
1124 if (backslash) {
1125 leave intact backslashes from leave (below)
1126 deprecate \1 in strings and sub replacements
1127 handle string-changing backslashes \l \U \Q \E, etc.
1128 switch (what was escaped) {
1129 handle - in a transliteration (becomes a literal -)
1130 handle \132 octal characters
1131 handle 0x15 hex characters
1132 handle \cV (control V)
1133 handle printf backslashes (\f, \r, \n, etc)
1134 } (end switch)
1135 } (end if backslash)
1136 } (end while character to read)
1137
1138*/
1139
76e3520e 1140STATIC char *
cea2e8a9 1141S_scan_const(pTHX_ char *start)
79072805 1142{
3280af22 1143 register char *send = PL_bufend; /* end of the constant */
02aa26ce
NT
1144 SV *sv = NEWSV(93, send - start); /* sv for the constant */
1145 register char *s = start; /* start of the constant */
1146 register char *d = SvPVX(sv); /* destination for copies */
1147 bool dorange = FALSE; /* are we in a translit range? */
1148 I32 len; /* ? */
ac2262e3 1149 I32 utf = (PL_lex_inwhat == OP_TRANS && PL_sublex_info.sub_op)
a0ed51b3
LW
1150 ? (PL_sublex_info.sub_op->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF))
1151 : UTF;
ac2262e3 1152 I32 thisutf = (PL_lex_inwhat == OP_TRANS && PL_sublex_info.sub_op)
9cbb5ea2
GS
1153 ? (PL_sublex_info.sub_op->op_private & (PL_lex_repl ?
1154 OPpTRANS_FROM_UTF : OPpTRANS_TO_UTF))
a0ed51b3 1155 : UTF;
9cbb5ea2 1156 char *leaveit = /* set of acceptably-backslashed characters */
3280af22 1157 PL_lex_inpat
4a2d328f 1158 ? "\\.^$@AGZdDwWsSbBpPXC+*?|()-nrtfeaxcz0123456789[{]} \t\n\r\f\v#"
9b599b2a 1159 : "";
79072805
LW
1160
1161 while (s < send || dorange) {
02aa26ce 1162 /* get transliterations out of the way (they're most literal) */
3280af22 1163 if (PL_lex_inwhat == OP_TRANS) {
02aa26ce 1164 /* expand a range A-Z to the full set of characters. AIE! */
79072805 1165 if (dorange) {
02aa26ce 1166 I32 i; /* current expanded character */
8ada0baa 1167 I32 min; /* first character in range */
02aa26ce
NT
1168 I32 max; /* last character in range */
1169
1170 i = d - SvPVX(sv); /* remember current offset */
9cbb5ea2
GS
1171 SvGROW(sv, SvLEN(sv) + 256); /* never more than 256 chars in a range */
1172 d = SvPVX(sv) + i; /* refresh d after realloc */
02aa26ce
NT
1173 d -= 2; /* eat the first char and the - */
1174
8ada0baa
JH
1175 min = (U8)*d; /* first char in range */
1176 max = (U8)d[1]; /* last char in range */
1177
1178#ifndef ASCIIish
1179 if ((isLOWER(min) && isLOWER(max)) ||
1180 (isUPPER(min) && isUPPER(max))) {
1181 if (isLOWER(min)) {
1182 for (i = min; i <= max; i++)
1183 if (isLOWER(i))
1184 *d++ = i;
1185 } else {
1186 for (i = min; i <= max; i++)
1187 if (isUPPER(i))
1188 *d++ = i;
1189 }
1190 }
1191 else
1192#endif
1193 for (i = min; i <= max; i++)
1194 *d++ = i;
02aa26ce
NT
1195
1196 /* mark the range as done, and continue */
79072805
LW
1197 dorange = FALSE;
1198 continue;
1199 }
02aa26ce
NT
1200
1201 /* range begins (ignore - as first or last char) */
79072805 1202 else if (*s == '-' && s+1 < send && s != start) {
a0ed51b3 1203 if (utf) {
a176fa2a 1204 *d++ = (char)0xff; /* use illegal utf8 byte--see pmtrans */
a0ed51b3
LW
1205 s++;
1206 continue;
1207 }
79072805
LW
1208 dorange = TRUE;
1209 s++;
1210 }
1211 }
02aa26ce
NT
1212
1213 /* if we get here, we're not doing a transliteration */
1214
0f5d15d6
IZ
1215 /* skip for regexp comments /(?#comment)/ and code /(?{code})/,
1216 except for the last char, which will be done separately. */
3280af22 1217 else if (*s == '(' && PL_lex_inpat && s[1] == '?') {
cc6b7395
IZ
1218 if (s[2] == '#') {
1219 while (s < send && *s != ')')
1220 *d++ = *s++;
0f5d15d6
IZ
1221 } else if (s[2] == '{'
1222 || s[2] == 'p' && s[3] == '{') { /* This should march regcomp.c */
cc6b7395 1223 I32 count = 1;
0f5d15d6 1224 char *regparse = s + (s[2] == '{' ? 3 : 4);
cc6b7395
IZ
1225 char c;
1226
d9f97599
GS
1227 while (count && (c = *regparse)) {
1228 if (c == '\\' && regparse[1])
1229 regparse++;
cc6b7395
IZ
1230 else if (c == '{')
1231 count++;
1232 else if (c == '}')
1233 count--;
d9f97599 1234 regparse++;
cc6b7395 1235 }
5bdf89e7
IZ
1236 if (*regparse != ')') {
1237 regparse--; /* Leave one char for continuation. */
cc6b7395 1238 yyerror("Sequence (?{...}) not terminated or not {}-balanced");
5bdf89e7 1239 }
0f5d15d6 1240 while (s < regparse)
cc6b7395
IZ
1241 *d++ = *s++;
1242 }
748a9306 1243 }
02aa26ce
NT
1244
1245 /* likewise skip #-initiated comments in //x patterns */
3280af22
NIS
1246 else if (*s == '#' && PL_lex_inpat &&
1247 ((PMOP*)PL_lex_inpat)->op_pmflags & PMf_EXTENDED) {
748a9306
LW
1248 while (s+1 < send && *s != '\n')
1249 *d++ = *s++;
1250 }
02aa26ce
NT
1251
1252 /* check for embedded arrays (@foo, @:foo, @'foo, @{foo}, @$foo) */
834a4ddd 1253 else if (*s == '@' && s[1] && (isALNUM_lazy(s+1) || strchr(":'{$", s[1])))
79072805 1254 break;
02aa26ce
NT
1255
1256 /* check for embedded scalars. only stop if we're sure it's a
1257 variable.
1258 */
79072805 1259 else if (*s == '$') {
3280af22 1260 if (!PL_lex_inpat) /* not a regexp, so $ must be var */
79072805 1261 break;
c277df42 1262 if (s + 1 < send && !strchr("()| \n\t", s[1]))
79072805
LW
1263 break; /* in regexp, $ might be tail anchor */
1264 }
02aa26ce 1265
a0ed51b3
LW
1266 /* (now in tr/// code again) */
1267
d008e5eb
GS
1268 if (*s & 0x80 && thisutf) {
1269 dTHR; /* only for ckWARN */
1270 if (ckWARN(WARN_UTF8)) {
dfe13c55 1271 (void)utf8_to_uv((U8*)s, &len); /* could cvt latin-1 to utf8 here... */
d008e5eb
GS
1272 if (len) {
1273 while (len--)
1274 *d++ = *s++;
1275 continue;
1276 }
a0ed51b3
LW
1277 }
1278 }
1279
02aa26ce 1280 /* backslashes */
79072805
LW
1281 if (*s == '\\' && s+1 < send) {
1282 s++;
02aa26ce
NT
1283
1284 /* some backslashes we leave behind */
c9f97d15 1285 if (*leaveit && *s && strchr(leaveit, *s)) {
79072805
LW
1286 *d++ = '\\';
1287 *d++ = *s++;
1288 continue;
1289 }
02aa26ce
NT
1290
1291 /* deprecate \1 in strings and substitution replacements */
3280af22 1292 if (PL_lex_inwhat == OP_SUBST && !PL_lex_inpat &&
a0d0e21e 1293 isDIGIT(*s) && *s != '0' && !isDIGIT(s[1]))
79072805 1294 {
d008e5eb 1295 dTHR; /* only for ckWARN */
599cee73 1296 if (ckWARN(WARN_SYNTAX))
cea2e8a9 1297 Perl_warner(aTHX_ WARN_SYNTAX, "\\%c better written as $%c", *s, *s);
79072805
LW
1298 *--s = '$';
1299 break;
1300 }
02aa26ce
NT
1301
1302 /* string-change backslash escapes */
3280af22 1303 if (PL_lex_inwhat != OP_TRANS && *s && strchr("lLuUEQ", *s)) {
79072805
LW
1304 --s;
1305 break;
1306 }
02aa26ce
NT
1307
1308 /* if we get here, it's either a quoted -, or a digit */
79072805 1309 switch (*s) {
02aa26ce
NT
1310
1311 /* quoted - in transliterations */
79072805 1312 case '-':
3280af22 1313 if (PL_lex_inwhat == OP_TRANS) {
79072805
LW
1314 *d++ = *s++;
1315 continue;
1316 }
1317 /* FALL THROUGH */
1318 default:
11b8faa4
JH
1319 {
1320 dTHR;
1321 if (ckWARN(WARN_UNSAFE) && isALPHA(*s))
cea2e8a9 1322 Perl_warner(aTHX_ WARN_UNSAFE,
11b8faa4
JH
1323 "Unrecognized escape \\%c passed through",
1324 *s);
1325 /* default action is to copy the quoted character */
1326 *d++ = *s++;
1327 continue;
1328 }
02aa26ce
NT
1329
1330 /* \132 indicates an octal constant */
79072805
LW
1331 case '0': case '1': case '2': case '3':
1332 case '4': case '5': case '6': case '7':
1333 *d++ = scan_oct(s, 3, &len);
1334 s += len;
1335 continue;
02aa26ce
NT
1336
1337 /* \x24 indicates a hex constant */
79072805 1338 case 'x':
a0ed51b3
LW
1339 ++s;
1340 if (*s == '{') {
1341 char* e = strchr(s, '}');
1342
adaeee49 1343 if (!e) {
a0ed51b3 1344 yyerror("Missing right brace on \\x{}");
adaeee49
GA
1345 e = s;
1346 }
d008e5eb
GS
1347 if (!utf) {
1348 dTHR;
1349 if (ckWARN(WARN_UTF8))
cea2e8a9 1350 Perl_warner(aTHX_ WARN_UTF8,
d008e5eb
GS
1351 "Use of \\x{} without utf8 declaration");
1352 }
a0ed51b3 1353 /* note: utf always shorter than hex */
dfe13c55
GS
1354 d = (char*)uv_to_utf8((U8*)d,
1355 scan_hex(s + 1, e - s - 1, &len));
a0ed51b3 1356 s = e + 1;
a0ed51b3
LW
1357 }
1358 else {
1359 UV uv = (UV)scan_hex(s, 2, &len);
1360 if (utf && PL_lex_inwhat == OP_TRANS &&
1361 utf != (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF))
1362 {
dfe13c55 1363 d = (char*)uv_to_utf8((U8*)d, uv); /* doing a CU or UC */
a0ed51b3
LW
1364 }
1365 else {
d008e5eb
GS
1366 if (uv >= 127 && UTF) {
1367 dTHR;
1368 if (ckWARN(WARN_UTF8))
cea2e8a9 1369 Perl_warner(aTHX_ WARN_UTF8,
d008e5eb
GS
1370 "\\x%.*s will produce malformed UTF-8 character; use \\x{%.*s} for that",
1371 len,s,len,s);
1372 }
a0ed51b3
LW
1373 *d++ = (char)uv;
1374 }
1375 s += len;
1376 }
79072805 1377 continue;
02aa26ce 1378
4a2d328f
IZ
1379 /* \N{latin small letter a} is a named character */
1380 case 'N':
423cee85
JH
1381 ++s;
1382 if (*s == '{') {
1383 char* e = strchr(s, '}');
1384 HV *hv;
1385 SV **svp;
1386 SV *res, *cv;
1387 STRLEN len;
1388 char *str;
1389 char *why = Nullch;
1390
1391 if (!e) {
5777a3f7 1392 yyerror("Missing right brace on \\N{}");
423cee85
JH
1393 e = s - 1;
1394 goto cont_scan;
1395 }
1396 res = newSVpvn(s + 1, e - s - 1);
1397 res = new_constant( Nullch, 0, "charnames",
5777a3f7 1398 res, Nullsv, "\\N{...}" );
423cee85
JH
1399 str = SvPV(res,len);
1400 if (len > e - s + 4) {
1401 char *odest = SvPVX(sv);
1402
1403 SvGROW(sv, (SvCUR(sv) + len - (e - s + 4)));
1404 d = SvPVX(sv) + (d - odest);
1405 }
1406 Copy(str, d, len, char);
1407 d += len;
1408 SvREFCNT_dec(res);
1409 cont_scan:
1410 s = e + 1;
1411 }
1412 else
5777a3f7 1413 yyerror("Missing braces on \\N{}");
423cee85
JH
1414 continue;
1415
02aa26ce 1416 /* \c is a control character */
79072805
LW
1417 case 'c':
1418 s++;
9d116dd7
JH
1419#ifdef EBCDIC
1420 *d = *s++;
1421 if (isLOWER(*d))
1422 *d = toUPPER(*d);
1423 *d++ = toCTRL(*d);
1424#else
bbce6d69 1425 len = *s++;
1426 *d++ = toCTRL(len);
9d116dd7 1427#endif
79072805 1428 continue;
02aa26ce
NT
1429
1430 /* printf-style backslashes, formfeeds, newlines, etc */
79072805
LW
1431 case 'b':
1432 *d++ = '\b';
1433 break;
1434 case 'n':
1435 *d++ = '\n';
1436 break;
1437 case 'r':
1438 *d++ = '\r';
1439 break;
1440 case 'f':
1441 *d++ = '\f';
1442 break;
1443 case 't':
1444 *d++ = '\t';
1445 break;
34a3fe2a
PP
1446#ifdef EBCDIC
1447 case 'e':
1448 *d++ = '\047'; /* CP 1047 */
1449 break;
1450 case 'a':
1451 *d++ = '\057'; /* CP 1047 */
1452 break;
1453#else
79072805
LW
1454 case 'e':
1455 *d++ = '\033';
1456 break;
1457 case 'a':
1458 *d++ = '\007';
1459 break;
34a3fe2a 1460#endif
02aa26ce
NT
1461 } /* end switch */
1462
79072805
LW
1463 s++;
1464 continue;
02aa26ce
NT
1465 } /* end if (backslash) */
1466
79072805 1467 *d++ = *s++;
02aa26ce
NT
1468 } /* while loop to process each character */
1469
1470 /* terminate the string and set up the sv */
79072805 1471 *d = '\0';
463ee0b2 1472 SvCUR_set(sv, d - SvPVX(sv));
79072805
LW
1473 SvPOK_on(sv);
1474
02aa26ce 1475 /* shrink the sv if we allocated more than we used */
79072805
LW
1476 if (SvCUR(sv) + 5 < SvLEN(sv)) {
1477 SvLEN_set(sv, SvCUR(sv) + 1);
463ee0b2 1478 Renew(SvPVX(sv), SvLEN(sv), char);
79072805 1479 }
02aa26ce 1480
9b599b2a 1481 /* return the substring (via yylval) only if we parsed anything */
3280af22
NIS
1482 if (s > PL_bufptr) {
1483 if ( PL_hints & ( PL_lex_inpat ? HINT_NEW_RE : HINT_NEW_STRING ) )
1484 sv = new_constant(start, s - start, (PL_lex_inpat ? "qr" : "q"),
b3ac6de7 1485 sv, Nullsv,
3280af22 1486 ( PL_lex_inwhat == OP_TRANS
b3ac6de7 1487 ? "tr"
3280af22 1488 : ( (PL_lex_inwhat == OP_SUBST && !PL_lex_inpat)
b3ac6de7
IZ
1489 ? "s"
1490 : "qq")));
79072805 1491 yylval.opval = (OP*)newSVOP(OP_CONST, 0, sv);
b3ac6de7 1492 } else
8990e307 1493 SvREFCNT_dec(sv);
79072805
LW
1494 return s;
1495}
1496
ffb4593c
NT
1497/* S_intuit_more
1498 * Returns TRUE if there's more to the expression (e.g., a subscript),
1499 * FALSE otherwise.
ffb4593c
NT
1500 *
1501 * It deals with "$foo[3]" and /$foo[3]/ and /$foo[0123456789$]+/
1502 *
1503 * ->[ and ->{ return TRUE
1504 * { and [ outside a pattern are always subscripts, so return TRUE
1505 * if we're outside a pattern and it's not { or [, then return FALSE
1506 * if we're in a pattern and the first char is a {
1507 * {4,5} (any digits around the comma) returns FALSE
1508 * if we're in a pattern and the first char is a [
1509 * [] returns FALSE
1510 * [SOMETHING] has a funky algorithm to decide whether it's a
1511 * character class or not. It has to deal with things like
1512 * /$foo[-3]/ and /$foo[$bar]/ as well as /$foo[$\d]+/
1513 * anything else returns TRUE
1514 */
1515
9cbb5ea2
GS
1516/* This is the one truly awful dwimmer necessary to conflate C and sed. */
1517
76e3520e 1518STATIC int
cea2e8a9 1519S_intuit_more(pTHX_ register char *s)
79072805 1520{
3280af22 1521 if (PL_lex_brackets)
79072805
LW
1522 return TRUE;
1523 if (*s == '-' && s[1] == '>' && (s[2] == '[' || s[2] == '{'))
1524 return TRUE;
1525 if (*s != '{' && *s != '[')
1526 return FALSE;
3280af22 1527 if (!PL_lex_inpat)
79072805
LW
1528 return TRUE;
1529
1530 /* In a pattern, so maybe we have {n,m}. */
1531 if (*s == '{') {
1532 s++;
1533 if (!isDIGIT(*s))
1534 return TRUE;
1535 while (isDIGIT(*s))
1536 s++;
1537 if (*s == ',')
1538 s++;
1539 while (isDIGIT(*s))
1540 s++;
1541 if (*s == '}')
1542 return FALSE;
1543 return TRUE;
1544
1545 }
1546
1547 /* On the other hand, maybe we have a character class */
1548
1549 s++;
1550 if (*s == ']' || *s == '^')
1551 return FALSE;
1552 else {
ffb4593c 1553 /* this is terrifying, and it works */
79072805
LW
1554 int weight = 2; /* let's weigh the evidence */
1555 char seen[256];
f27ffc4a 1556 unsigned char un_char = 255, last_un_char;
93a17b20 1557 char *send = strchr(s,']');
3280af22 1558 char tmpbuf[sizeof PL_tokenbuf * 4];
79072805
LW
1559
1560 if (!send) /* has to be an expression */
1561 return TRUE;
1562
1563 Zero(seen,256,char);
1564 if (*s == '$')
1565 weight -= 3;
1566 else if (isDIGIT(*s)) {
1567 if (s[1] != ']') {
1568 if (isDIGIT(s[1]) && s[2] == ']')
1569 weight -= 10;
1570 }
1571 else
1572 weight -= 100;
1573 }
1574 for (; s < send; s++) {
1575 last_un_char = un_char;
1576 un_char = (unsigned char)*s;
1577 switch (*s) {
1578 case '@':
1579 case '&':
1580 case '$':
1581 weight -= seen[un_char] * 10;
834a4ddd 1582 if (isALNUM_lazy(s+1)) {
8903cb82 1583 scan_ident(s, send, tmpbuf, sizeof tmpbuf, FALSE);
a0d0e21e 1584 if ((int)strlen(tmpbuf) > 1 && gv_fetchpv(tmpbuf,FALSE, SVt_PV))
79072805
LW
1585 weight -= 100;
1586 else
1587 weight -= 10;
1588 }
1589 else if (*s == '$' && s[1] &&
93a17b20
LW
1590 strchr("[#!%*<>()-=",s[1])) {
1591 if (/*{*/ strchr("])} =",s[2]))
79072805
LW
1592 weight -= 10;
1593 else
1594 weight -= 1;
1595 }
1596 break;
1597 case '\\':
1598 un_char = 254;
1599 if (s[1]) {
93a17b20 1600 if (strchr("wds]",s[1]))
79072805
LW
1601 weight += 100;
1602 else if (seen['\''] || seen['"'])
1603 weight += 1;
93a17b20 1604 else if (strchr("rnftbxcav",s[1]))
79072805
LW
1605 weight += 40;
1606 else if (isDIGIT(s[1])) {
1607 weight += 40;
1608 while (s[1] && isDIGIT(s[1]))
1609 s++;
1610 }
1611 }
1612 else
1613 weight += 100;
1614 break;
1615 case '-':
1616 if (s[1] == '\\')
1617 weight += 50;
93a17b20 1618 if (strchr("aA01! ",last_un_char))
79072805 1619 weight += 30;
93a17b20 1620 if (strchr("zZ79~",s[1]))
79072805 1621 weight += 30;
f27ffc4a
GS
1622 if (last_un_char == 255 && (isDIGIT(s[1]) || s[1] == '$'))
1623 weight -= 5; /* cope with negative subscript */
79072805
LW
1624 break;
1625 default:
93a17b20 1626 if (!isALNUM(last_un_char) && !strchr("$@&",last_un_char) &&
79072805
LW
1627 isALPHA(*s) && s[1] && isALPHA(s[1])) {
1628 char *d = tmpbuf;
1629 while (isALPHA(*s))
1630 *d++ = *s++;
1631 *d = '\0';
1632 if (keyword(tmpbuf, d - tmpbuf))
1633 weight -= 150;
1634 }
1635 if (un_char == last_un_char + 1)
1636 weight += 5;
1637 weight -= seen[un_char];
1638 break;
1639 }
1640 seen[un_char]++;
1641 }
1642 if (weight >= 0) /* probably a character class */
1643 return FALSE;
1644 }
1645
1646 return TRUE;
1647}
ffed7fef 1648
ffb4593c
NT
1649/*
1650 * S_intuit_method
1651 *
1652 * Does all the checking to disambiguate
1653 * foo bar
1654 * between foo(bar) and bar->foo. Returns 0 if not a method, otherwise
1655 * FUNCMETH (bar->foo(args)) or METHOD (bar->foo args).
1656 *
1657 * First argument is the stuff after the first token, e.g. "bar".
1658 *
1659 * Not a method if bar is a filehandle.
1660 * Not a method if foo is a subroutine prototyped to take a filehandle.
1661 * Not a method if it's really "Foo $bar"
1662 * Method if it's "foo $bar"
1663 * Not a method if it's really "print foo $bar"
1664 * Method if it's really "foo package::" (interpreted as package->foo)
1665 * Not a method if bar is known to be a subroutne ("sub bar; foo bar")
1666 * Not a method if bar is a filehandle or package, but is quotd with
1667 * =>
1668 */
1669
76e3520e 1670STATIC int
cea2e8a9 1671S_intuit_method(pTHX_ char *start, GV *gv)
a0d0e21e
LW
1672{
1673 char *s = start + (*start == '$');
3280af22 1674 char tmpbuf[sizeof PL_tokenbuf];
a0d0e21e
LW
1675 STRLEN len;
1676 GV* indirgv;
1677
1678 if (gv) {
b6c543e3 1679 CV *cv;
a0d0e21e
LW
1680 if (GvIO(gv))
1681 return 0;
b6c543e3
IZ
1682 if ((cv = GvCVu(gv))) {
1683 char *proto = SvPVX(cv);
1684 if (proto) {
1685 if (*proto == ';')
1686 proto++;
1687 if (*proto == '*')
1688 return 0;
1689 }
1690 } else
a0d0e21e
LW
1691 gv = 0;
1692 }
8903cb82 1693 s = scan_word(s, tmpbuf, sizeof tmpbuf, TRUE, &len);
ffb4593c
NT
1694 /* start is the beginning of the possible filehandle/object,
1695 * and s is the end of it
1696 * tmpbuf is a copy of it
1697 */
1698
a0d0e21e 1699 if (*start == '$') {
3280af22 1700 if (gv || PL_last_lop_op == OP_PRINT || isUPPER(*PL_tokenbuf))
a0d0e21e
LW
1701 return 0;
1702 s = skipspace(s);
3280af22
NIS
1703 PL_bufptr = start;
1704 PL_expect = XREF;
a0d0e21e
LW
1705 return *s == '(' ? FUNCMETH : METHOD;
1706 }
1707 if (!keyword(tmpbuf, len)) {
c3e0f903
GS
1708 if (len > 2 && tmpbuf[len - 2] == ':' && tmpbuf[len - 1] == ':') {
1709 len -= 2;
1710 tmpbuf[len] = '\0';
1711 goto bare_package;
1712 }
1713 indirgv = gv_fetchpv(tmpbuf, FALSE, SVt_PVCV);
8ebc5c01 1714 if (indirgv && GvCVu(indirgv))
a0d0e21e
LW
1715 return 0;
1716 /* filehandle or package name makes it a method */
89bfa8cd 1717 if (!gv || GvIO(indirgv) || gv_stashpvn(tmpbuf, len, FALSE)) {
a0d0e21e 1718 s = skipspace(s);
3280af22 1719 if ((PL_bufend - s) >= 2 && *s == '=' && *(s+1) == '>')
55497cff 1720 return 0; /* no assumptions -- "=>" quotes bearword */
c3e0f903 1721 bare_package:
3280af22 1722 PL_nextval[PL_nexttoke].opval = (OP*)newSVOP(OP_CONST, 0,
79cb57f6 1723 newSVpvn(tmpbuf,len));
3280af22
NIS
1724 PL_nextval[PL_nexttoke].opval->op_private = OPpCONST_BARE;
1725 PL_expect = XTERM;
a0d0e21e 1726 force_next(WORD);
3280af22 1727 PL_bufptr = s;
a0d0e21e
LW
1728 return *s == '(' ? FUNCMETH : METHOD;
1729 }
1730 }
1731 return 0;
1732}
1733
ffb4593c
NT
1734/*
1735 * S_incl_perldb
1736 * Return a string of Perl code to load the debugger. If PERL5DB
1737 * is set, it will return the contents of that, otherwise a
1738 * compile-time require of perl5db.pl.
1739 */
1740
76e3520e 1741STATIC char*
cea2e8a9 1742S_incl_perldb(pTHX)
a0d0e21e 1743{
3280af22 1744 if (PL_perldb) {
76e3520e 1745 char *pdb = PerlEnv_getenv("PERL5DB");
a0d0e21e
LW
1746
1747 if (pdb)
1748 return pdb;
61bb5906 1749 SETERRNO(0,SS$_NORMAL);
a0d0e21e
LW
1750 return "BEGIN { require 'perl5db.pl' }";
1751 }
1752 return "";
1753}
1754
1755
16d20bd9
AD
1756/* Encoded script support. filter_add() effectively inserts a
1757 * 'pre-processing' function into the current source input stream.
1758 * Note that the filter function only applies to the current source file
1759 * (e.g., it will not affect files 'require'd or 'use'd by this one).
1760 *
1761 * The datasv parameter (which may be NULL) can be used to pass
1762 * private data to this instance of the filter. The filter function
1763 * can recover the SV using the FILTER_DATA macro and use it to
1764 * store private buffers and state information.
1765 *
1766 * The supplied datasv parameter is upgraded to a PVIO type
1767 * and the IoDIRP field is used to store the function pointer.
1768 * Note that IoTOP_NAME, IoFMT_NAME, IoBOTTOM_NAME, if set for
1769 * private use must be set using malloc'd pointers.
1770 */
16d20bd9
AD
1771
1772SV *
864dbfa3 1773Perl_filter_add(pTHX_ filter_t funcp, SV *datasv)
16d20bd9
AD
1774{
1775 if (!funcp){ /* temporary handy debugging hack to be deleted */
80252599 1776 PL_filter_debug = atoi((char*)datasv);
16d20bd9
AD
1777 return NULL;
1778 }
3280af22
NIS
1779 if (!PL_rsfp_filters)
1780 PL_rsfp_filters = newAV();
16d20bd9 1781 if (!datasv)
8c52afec 1782 datasv = NEWSV(255,0);
16d20bd9 1783 if (!SvUPGRADE(datasv, SVt_PVIO))
cea2e8a9 1784 Perl_die(aTHX_ "Can't upgrade filter_add data to SVt_PVIO");
16d20bd9 1785 IoDIRP(datasv) = (DIR*)funcp; /* stash funcp into spare field */
0453d815 1786#ifdef DEBUGGING
80252599 1787 if (PL_filter_debug) {
2d8e6c8d 1788 STRLEN n_a;
cea2e8a9 1789 Perl_warn(aTHX_ "filter_add func %p (%s)", funcp, SvPV(datasv, n_a));
2d8e6c8d 1790 }
0453d815 1791#endif /* DEBUGGING */
3280af22
NIS
1792 av_unshift(PL_rsfp_filters, 1);
1793 av_store(PL_rsfp_filters, 0, datasv) ;
16d20bd9
AD
1794 return(datasv);
1795}
1796
1797
1798/* Delete most recently added instance of this filter function. */
a0d0e21e 1799void
864dbfa3 1800Perl_filter_del(pTHX_ filter_t funcp)
16d20bd9 1801{
0453d815 1802#ifdef DEBUGGING
80252599 1803 if (PL_filter_debug)
cea2e8a9 1804 Perl_warn(aTHX_ "filter_del func %p", funcp);
0453d815 1805#endif /* DEBUGGING */
3280af22 1806 if (!PL_rsfp_filters || AvFILLp(PL_rsfp_filters)<0)
16d20bd9
AD
1807 return;
1808 /* if filter is on top of stack (usual case) just pop it off */
677ca527 1809 if (IoDIRP(FILTER_DATA(AvFILLp(PL_rsfp_filters))) == (DIR*)funcp){
a6c40364 1810 IoDIRP(FILTER_DATA(AvFILLp(PL_rsfp_filters))) = NULL;
3280af22 1811 sv_free(av_pop(PL_rsfp_filters));
e50aee73 1812
16d20bd9
AD
1813 return;
1814 }
1815 /* we need to search for the correct entry and clear it */
cea2e8a9 1816 Perl_die(aTHX_ "filter_del can only delete in reverse order (currently)");
16d20bd9
AD
1817}
1818
1819
1820/* Invoke the n'th filter function for the current rsfp. */
1821I32
864dbfa3 1822Perl_filter_read(pTHX_ int idx, SV *buf_sv, int maxlen)
8ac85365
NIS
1823
1824
1825 /* 0 = read one text line */
a0d0e21e 1826{
16d20bd9
AD
1827 filter_t funcp;
1828 SV *datasv = NULL;
e50aee73 1829
3280af22 1830 if (!PL_rsfp_filters)
16d20bd9 1831 return -1;
3280af22 1832 if (idx > AvFILLp(PL_rsfp_filters)){ /* Any more filters? */
16d20bd9
AD
1833 /* Provide a default input filter to make life easy. */
1834 /* Note that we append to the line. This is handy. */
0453d815 1835#ifdef DEBUGGING
80252599 1836 if (PL_filter_debug)
cea2e8a9 1837 Perl_warn(aTHX_ "filter_read %d: from rsfp\n", idx);
0453d815 1838#endif /* DEBUGGING */
16d20bd9
AD
1839 if (maxlen) {
1840 /* Want a block */
1841 int len ;
1842 int old_len = SvCUR(buf_sv) ;
1843
1844 /* ensure buf_sv is large enough */
1845 SvGROW(buf_sv, old_len + maxlen) ;
3280af22
NIS
1846 if ((len = PerlIO_read(PL_rsfp, SvPVX(buf_sv) + old_len, maxlen)) <= 0){
1847 if (PerlIO_error(PL_rsfp))
37120919
AD
1848 return -1; /* error */
1849 else
1850 return 0 ; /* end of file */
1851 }
16d20bd9
AD
1852 SvCUR_set(buf_sv, old_len + len) ;
1853 } else {
1854 /* Want a line */
3280af22
NIS
1855 if (sv_gets(buf_sv, PL_rsfp, SvCUR(buf_sv)) == NULL) {
1856 if (PerlIO_error(PL_rsfp))
37120919
AD
1857 return -1; /* error */
1858 else
1859 return 0 ; /* end of file */
1860 }
16d20bd9
AD
1861 }
1862 return SvCUR(buf_sv);
1863 }
1864 /* Skip this filter slot if filter has been deleted */
3280af22 1865 if ( (datasv = FILTER_DATA(idx)) == &PL_sv_undef){
0453d815 1866#ifdef DEBUGGING
80252599 1867 if (PL_filter_debug)
cea2e8a9 1868 Perl_warn(aTHX_ "filter_read %d: skipped (filter deleted)\n", idx);
0453d815 1869#endif /* DEBUGGING */
16d20bd9
AD
1870 return FILTER_READ(idx+1, buf_sv, maxlen); /* recurse */
1871 }
1872 /* Get function pointer hidden within datasv */
1873 funcp = (filter_t)IoDIRP(datasv);
0453d815 1874#ifdef DEBUGGING
80252599 1875 if (PL_filter_debug) {
2d8e6c8d 1876 STRLEN n_a;
cea2e8a9 1877 Perl_warn(aTHX_ "filter_read %d: via function %p (%s)\n",
2d8e6c8d
GS
1878 idx, funcp, SvPV(datasv,n_a));
1879 }
0453d815 1880#endif /* DEBUGGING */
16d20bd9
AD
1881 /* Call function. The function is expected to */
1882 /* call "FILTER_READ(idx+1, buf_sv)" first. */
37120919 1883 /* Return: <0:error, =0:eof, >0:not eof */
0cb96387 1884 return (*funcp)(aTHXo_ idx, buf_sv, maxlen);
16d20bd9
AD
1885}
1886
76e3520e 1887STATIC char *
cea2e8a9 1888S_filter_gets(pTHX_ register SV *sv, register PerlIO *fp, STRLEN append)
16d20bd9 1889{
a868473f 1890#ifdef WIN32FILTER
3280af22 1891 if (!PL_rsfp_filters) {
a868473f
NIS
1892 filter_add(win32_textfilter,NULL);
1893 }
1894#endif
3280af22 1895 if (PL_rsfp_filters) {
16d20bd9 1896
55497cff 1897 if (!append)
1898 SvCUR_set(sv, 0); /* start with empty line */
16d20bd9
AD
1899 if (FILTER_READ(0, sv, 0) > 0)
1900 return ( SvPVX(sv) ) ;
1901 else
1902 return Nullch ;
1903 }
9d116dd7 1904 else
fd049845 1905 return (sv_gets(sv, fp, append));
a0d0e21e
LW
1906}
1907
1908
748a9306
LW
1909#ifdef DEBUGGING
1910 static char* exp_name[] =
09bef843
SB
1911 { "OPERATOR", "TERM", "REF", "STATE", "BLOCK", "ATTRBLOCK",
1912 "ATTRTERM", "TERMBLOCK"
1913 };
748a9306 1914#endif
463ee0b2 1915
02aa26ce
NT
1916/*
1917 yylex
1918
1919 Works out what to call the token just pulled out of the input
1920 stream. The yacc parser takes care of taking the ops we return and
1921 stitching them into a tree.
1922
1923 Returns:
1924 PRIVATEREF
1925
1926 Structure:
1927 if read an identifier
1928 if we're in a my declaration
1929 croak if they tried to say my($foo::bar)
1930 build the ops for a my() declaration
1931 if it's an access to a my() variable
1932 are we in a sort block?
1933 croak if my($a); $a <=> $b
1934 build ops for access to a my() variable
1935 if in a dq string, and they've said @foo and we can't find @foo
1936 croak
1937 build ops for a bareword
1938 if we already built the token before, use it.
1939*/
1940
864dbfa3
GS
1941int
1942#ifdef USE_PURE_BISON
cea2e8a9 1943Perl_yylex(pTHX_ YYSTYPE *lvalp, int *lcharp)
864dbfa3 1944#else
cea2e8a9 1945Perl_yylex(pTHX)
864dbfa3 1946#endif
378cc40b 1947{
11343788 1948 dTHR;
79072805 1949 register char *s;
378cc40b 1950 register char *d;
79072805 1951 register I32 tmp;
463ee0b2 1952 STRLEN len;
161b471a
NIS
1953 GV *gv = Nullgv;
1954 GV **gvp = 0;
a687059c 1955
a1a0e61e
TD
1956#ifdef USE_PURE_BISON
1957 yylval_pointer = lvalp;
1958 yychar_pointer = lcharp;
1959#endif
1960
02aa26ce 1961 /* check if there's an identifier for us to look at */
3280af22 1962 if (PL_pending_ident) {
02aa26ce 1963 /* pit holds the identifier we read and pending_ident is reset */
3280af22
NIS
1964 char pit = PL_pending_ident;
1965 PL_pending_ident = 0;
bbce6d69 1966
02aa26ce
NT
1967 /* if we're in a my(), we can't allow dynamics here.
1968 $foo'bar has already been turned into $foo::bar, so
1969 just check for colons.
1970
1971 if it's a legal name, the OP is a PADANY.
1972 */
3280af22
NIS
1973 if (PL_in_my) {
1974 if (strchr(PL_tokenbuf,':'))
cea2e8a9 1975 yyerror(Perl_form(aTHX_ PL_no_myglob,PL_tokenbuf));
02aa26ce 1976
bbce6d69 1977 yylval.opval = newOP(OP_PADANY, 0);
3280af22 1978 yylval.opval->op_targ = pad_allocmy(PL_tokenbuf);
bbce6d69 1979 return PRIVATEREF;
1980 }
1981
02aa26ce
NT
1982 /*
1983 build the ops for accesses to a my() variable.
1984
1985 Deny my($a) or my($b) in a sort block, *if* $a or $b is
1986 then used in a comparison. This catches most, but not
1987 all cases. For instance, it catches
1988 sort { my($a); $a <=> $b }
1989 but not
1990 sort { my($a); $a < $b ? -1 : $a == $b ? 0 : 1; }
1991 (although why you'd do that is anyone's guess).
1992 */
1993
3280af22 1994 if (!strchr(PL_tokenbuf,':')) {
a863c7d1 1995#ifdef USE_THREADS
54b9620d 1996 /* Check for single character per-thread SVs */
3280af22
NIS
1997 if (PL_tokenbuf[0] == '$' && PL_tokenbuf[2] == '\0'
1998 && !isALPHA(PL_tokenbuf[1]) /* Rule out obvious non-threadsvs */
1999 && (tmp = find_threadsv(&PL_tokenbuf[1])) != NOT_IN_PAD)
554b3eca 2000 {
2faa37cc 2001 yylval.opval = newOP(OP_THREADSV, 0);
a863c7d1
MB
2002 yylval.opval->op_targ = tmp;
2003 return PRIVATEREF;
2004 }
2005#endif /* USE_THREADS */
3280af22 2006 if ((tmp = pad_findmy(PL_tokenbuf)) != NOT_IN_PAD) {
02aa26ce 2007 /* if it's a sort block and they're naming $a or $b */
3280af22
NIS
2008 if (PL_last_lop_op == OP_SORT &&
2009 PL_tokenbuf[0] == '$' &&
2010 (PL_tokenbuf[1] == 'a' || PL_tokenbuf[1] == 'b')
2011 && !PL_tokenbuf[2])
bbce6d69 2012 {
3280af22
NIS
2013 for (d = PL_in_eval ? PL_oldoldbufptr : PL_linestart;
2014 d < PL_bufend && *d != '\n';
a863c7d1
MB
2015 d++)
2016 {
2017 if (strnEQ(d,"<=>",3) || strnEQ(d,"cmp",3)) {
cea2e8a9 2018 Perl_croak(aTHX_ "Can't use \"my %s\" in sort comparison",
3280af22 2019 PL_tokenbuf);
a863c7d1 2020 }
bbce6d69 2021 }
2022 }
bbce6d69 2023
a863c7d1
MB
2024 yylval.opval = newOP(OP_PADANY, 0);
2025 yylval.opval->op_targ = tmp;
2026 return PRIVATEREF;
2027 }
bbce6d69 2028 }
2029
02aa26ce
NT
2030 /*
2031 Whine if they've said @foo in a doublequoted string,
2032 and @foo isn't a variable we can find in the symbol
2033 table.
2034 */
3280af22
NIS
2035 if (pit == '@' && PL_lex_state != LEX_NORMAL && !PL_lex_brackets) {
2036 GV *gv = gv_fetchpv(PL_tokenbuf+1, FALSE, SVt_PVAV);
2037 if (!gv || ((PL_tokenbuf[0] == '@') ? !GvAV(gv) : !GvHV(gv)))
cea2e8a9 2038 yyerror(Perl_form(aTHX_ "In string, %s now must be written as \\%s",
3280af22 2039 PL_tokenbuf, PL_tokenbuf));
bbce6d69 2040 }
2041
02aa26ce 2042 /* build ops for a bareword */
3280af22 2043 yylval.opval = (OP*)newSVOP(OP_CONST, 0, newSVpv(PL_tokenbuf+1, 0));
bbce6d69 2044 yylval.opval->op_private = OPpCONST_ENTERED;
3280af22
NIS
2045 gv_fetchpv(PL_tokenbuf+1, PL_in_eval ? (GV_ADDMULTI | GV_ADDINEVAL) : TRUE,
2046 ((PL_tokenbuf[0] == '$') ? SVt_PV
2047 : (PL_tokenbuf[0] == '@') ? SVt_PVAV
bbce6d69 2048 : SVt_PVHV));
2049 return WORD;
2050 }
2051
02aa26ce
NT
2052 /* no identifier pending identification */
2053
3280af22 2054 switch (PL_lex_state) {
79072805
LW
2055#ifdef COMMENTARY
2056 case LEX_NORMAL: /* Some compilers will produce faster */
2057 case LEX_INTERPNORMAL: /* code if we comment these out. */
2058 break;
2059#endif
2060
09bef843 2061 /* when we've already built the next token, just pull it out of the queue */
79072805 2062 case LEX_KNOWNEXT:
3280af22
NIS
2063 PL_nexttoke--;
2064 yylval = PL_nextval[PL_nexttoke];
2065 if (!PL_nexttoke) {
2066 PL_lex_state = PL_lex_defer;
2067 PL_expect = PL_lex_expect;
2068 PL_lex_defer = LEX_NORMAL;
463ee0b2 2069 }
3280af22 2070 return(PL_nexttype[PL_nexttoke]);
79072805 2071
02aa26ce 2072 /* interpolated case modifiers like \L \U, including \Q and \E.
3280af22 2073 when we get here, PL_bufptr is at the \
02aa26ce 2074 */
79072805
LW
2075 case LEX_INTERPCASEMOD:
2076#ifdef DEBUGGING
3280af22 2077 if (PL_bufptr != PL_bufend && *PL_bufptr != '\\')
cea2e8a9 2078 Perl_croak(aTHX_ "panic: INTERPCASEMOD");
79072805 2079#endif
02aa26ce 2080 /* handle \E or end of string */
3280af22 2081 if (PL_bufptr == PL_bufend || PL_bufptr[1] == 'E') {
a0d0e21e 2082 char oldmod;
02aa26ce
NT
2083
2084 /* if at a \E */
3280af22
NIS
2085 if (PL_lex_casemods) {
2086 oldmod = PL_lex_casestack[--PL_lex_casemods];
2087 PL_lex_casestack[PL_lex_casemods] = '\0';
02aa26ce 2088
3280af22
NIS
2089 if (PL_bufptr != PL_bufend && strchr("LUQ", oldmod)) {
2090 PL_bufptr += 2;
2091 PL_lex_state = LEX_INTERPCONCAT;
a0d0e21e 2092 }
79072805
LW
2093 return ')';
2094 }
3280af22
NIS
2095 if (PL_bufptr != PL_bufend)
2096 PL_bufptr += 2;
2097 PL_lex_state = LEX_INTERPCONCAT;
cea2e8a9 2098 return yylex();
79072805
LW
2099 }
2100 else {
3280af22 2101 s = PL_bufptr + 1;
79072805
LW
2102 if (strnEQ(s, "L\\u", 3) || strnEQ(s, "U\\l", 3))
2103 tmp = *s, *s = s[2], s[2] = tmp; /* misordered... */
a0d0e21e 2104 if (strchr("LU", *s) &&
3280af22 2105 (strchr(PL_lex_casestack, 'L') || strchr(PL_lex_casestack, 'U')))
a0d0e21e 2106 {
3280af22 2107 PL_lex_casestack[--PL_lex_casemods] = '\0';
a0d0e21e
LW
2108 return ')';
2109 }
3280af22
NIS
2110 if (PL_lex_casemods > 10) {
2111 char* newlb = Renew(PL_lex_casestack, PL_lex_casemods + 2, char);
2112 if (newlb != PL_lex_casestack) {
a0d0e21e 2113 SAVEFREEPV(newlb);
3280af22 2114 PL_lex_casestack = newlb;
a0d0e21e
LW
2115 }
2116 }
3280af22
NIS
2117 PL_lex_casestack[PL_lex_casemods++] = *s;
2118 PL_lex_casestack[PL_lex_casemods] = '\0';
2119 PL_lex_state = LEX_INTERPCONCAT;
2120 PL_nextval[PL_nexttoke].ival = 0;
79072805
LW
2121 force_next('(');
2122 if (*s == 'l')
3280af22 2123 PL_nextval[PL_nexttoke].ival = OP_LCFIRST;
79072805 2124 else if (*s == 'u')
3280af22 2125 PL_nextval[PL_nexttoke].ival = OP_UCFIRST;
79072805 2126 else if (*s == 'L')
3280af22 2127 PL_nextval[PL_nexttoke].ival = OP_LC;
79072805 2128 else if (*s == 'U')
3280af22 2129 PL_nextval[PL_nexttoke].ival = OP_UC;
a0d0e21e 2130 else if (*s == 'Q')
3280af22 2131 PL_nextval[PL_nexttoke].ival = OP_QUOTEMETA;
79072805 2132 else
cea2e8a9 2133 Perl_croak(aTHX_ "panic: yylex");
3280af22 2134 PL_bufptr = s + 1;
79072805 2135 force_next(FUNC);
3280af22
NIS
2136 if (PL_lex_starts) {
2137 s = PL_bufptr;
2138 PL_lex_starts = 0;
79072805
LW
2139 Aop(OP_CONCAT);
2140 }
2141 else
cea2e8a9 2142 return yylex();
79072805
LW
2143 }
2144
55497cff 2145 case LEX_INTERPPUSH:
2146 return sublex_push();
2147
79072805 2148 case LEX_INTERPSTART:
3280af22 2149 if (PL_bufptr == PL_bufend)
79072805 2150 return sublex_done();
3280af22
NIS
2151 PL_expect = XTERM;
2152 PL_lex_dojoin = (*PL_bufptr == '@');
2153 PL_lex_state = LEX_INTERPNORMAL;
2154 if (PL_lex_dojoin) {
2155 PL_nextval[PL_nexttoke].ival = 0;
79072805 2156 force_next(',');
554b3eca 2157#ifdef USE_THREADS
533c011a
NIS
2158 PL_nextval[PL_nexttoke].opval = newOP(OP_THREADSV, 0);
2159 PL_nextval[PL_nexttoke].opval->op_targ = find_threadsv("\"");
554b3eca
MB
2160 force_next(PRIVATEREF);
2161#else
a0d0e21e 2162 force_ident("\"", '$');
554b3eca 2163#endif /* USE_THREADS */
3280af22 2164 PL_nextval[PL_nexttoke].ival = 0;
79072805 2165 force_next('$');
3280af22 2166 PL_nextval[PL_nexttoke].ival = 0;
79072805 2167 force_next('(');
3280af22 2168 PL_nextval[PL_nexttoke].ival = OP_JOIN; /* emulate join($", ...) */
79072805
LW
2169 force_next(FUNC);
2170 }
3280af22
NIS
2171 if (PL_lex_starts++) {
2172 s = PL_bufptr;
79072805
LW
2173 Aop(OP_CONCAT);
2174 }
cea2e8a9 2175 return yylex();
79072805
LW
2176
2177 case LEX_INTERPENDMAYBE:
3280af22
NIS
2178 if (intuit_more(PL_bufptr)) {
2179 PL_lex_state = LEX_INTERPNORMAL; /* false alarm, more expr */
79072805
LW
2180 break;
2181 }
2182 /* FALL THROUGH */
2183
2184 case LEX_INTERPEND:
3280af22
NIS
2185 if (PL_lex_dojoin) {
2186 PL_lex_dojoin = FALSE;
2187 PL_lex_state = LEX_INTERPCONCAT;
79072805
LW
2188 return ')';
2189 }
43a16006 2190 if (PL_lex_inwhat == OP_SUBST && PL_linestr == PL_lex_repl
25da4f38 2191 && SvEVALED(PL_lex_repl))
43a16006 2192 {
e9fa98b2 2193 if (PL_bufptr != PL_bufend)
cea2e8a9 2194 Perl_croak(aTHX_ "Bad evalled substitution pattern");
e9fa98b2
HS
2195 PL_lex_repl = Nullsv;
2196 }
79072805
LW
2197 /* FALLTHROUGH */
2198 case LEX_INTERPCONCAT:
2199#ifdef DEBUGGING
3280af22 2200 if (PL_lex_brackets)
cea2e8a9 2201 Perl_croak(aTHX_ "panic: INTERPCONCAT");
79072805 2202#endif
3280af22 2203 if (PL_bufptr == PL_bufend)
79072805
LW
2204 return sublex_done();
2205
3280af22
NIS
2206 if (SvIVX(PL_linestr) == '\'') {
2207 SV *sv = newSVsv(PL_linestr);
2208 if (!PL_lex_inpat)
76e3520e 2209 sv = tokeq(sv);
3280af22 2210 else if ( PL_hints & HINT_NEW_RE )
b3ac6de7 2211 sv = new_constant(NULL, 0, "qr", sv, sv, "q");
79072805 2212 yylval.opval = (OP*)newSVOP(OP_CONST, 0, sv);
3280af22 2213 s = PL_bufend;
79072805
LW
2214 }
2215 else {
3280af22 2216 s = scan_const(PL_bufptr);
79072805 2217 if (*s == '\\')
3280af22 2218 PL_lex_state = LEX_INTERPCASEMOD;
79072805 2219 else
3280af22 2220 PL_lex_state = LEX_INTERPSTART;
79072805
LW
2221 }
2222
3280af22
NIS
2223 if (s != PL_bufptr) {
2224 PL_nextval[PL_nexttoke] = yylval;
2225 PL_expect = XTERM;
79072805 2226 force_next(THING);
3280af22 2227 if (PL_lex_starts++)
79072805
LW
2228 Aop(OP_CONCAT);
2229 else {
3280af22 2230 PL_bufptr = s;
cea2e8a9 2231 return yylex();
79072805
LW
2232 }
2233 }
2234
cea2e8a9 2235 return yylex();
a0d0e21e 2236 case LEX_FORMLINE:
3280af22
NIS
2237 PL_lex_state = LEX_NORMAL;
2238 s = scan_formline(PL_bufptr);
2239 if (!PL_lex_formbrack)
a0d0e21e
LW
2240 goto rightbracket;
2241 OPERATOR(';');
79072805
LW
2242 }
2243
3280af22
NIS
2244 s = PL_bufptr;
2245 PL_oldoldbufptr = PL_oldbufptr;
2246 PL_oldbufptr = s;
79072805 2247 DEBUG_p( {
3280af22 2248 PerlIO_printf(PerlIO_stderr(), "### Tokener expecting %s at %s\n", exp_name[PL_expect], s);
79072805 2249 } )
463ee0b2
LW
2250
2251 retry:
378cc40b
LW
2252 switch (*s) {
2253 default:
834a4ddd
LW
2254 if (isIDFIRST_lazy(s))
2255 goto keylookup;
cea2e8a9 2256 Perl_croak(aTHX_ "Unrecognized character \\x%02X", *s & 255);
e929a76b
LW
2257 case 4:
2258 case 26:
2259 goto fake_eof; /* emulate EOF on ^D or ^Z */
378cc40b 2260 case 0:
3280af22
NIS
2261 if (!PL_rsfp) {
2262 PL_last_uni = 0;
2263 PL_last_lop = 0;
2264 if (PL_lex_brackets)
d98d5fff 2265 yyerror("Missing right curly or square bracket");
79072805 2266 TOKEN(0);
463ee0b2 2267 }
3280af22 2268 if (s++ < PL_bufend)
a687059c 2269 goto retry; /* ignore stray nulls */
3280af22
NIS
2270 PL_last_uni = 0;
2271 PL_last_lop = 0;
2272 if (!PL_in_eval && !PL_preambled) {
2273 PL_preambled = TRUE;
2274 sv_setpv(PL_linestr,incl_perldb());
2275 if (SvCUR(PL_linestr))
2276 sv_catpv(PL_linestr,";");
2277 if (PL_preambleav){
2278 while(AvFILLp(PL_preambleav) >= 0) {
2279 SV *tmpsv = av_shift(PL_preambleav);
2280 sv_catsv(PL_linestr, tmpsv);
2281 sv_catpv(PL_linestr, ";");
91b7def8 2282 sv_free(tmpsv);
2283 }
3280af22
NIS
2284 sv_free((SV*)PL_preambleav);
2285 PL_preambleav = NULL;
91b7def8 2286 }
3280af22
NIS
2287 if (PL_minus_n || PL_minus_p) {
2288 sv_catpv(PL_linestr, "LINE: while (<>) {");
2289 if (PL_minus_l)
2290 sv_catpv(PL_linestr,"chomp;");
2291 if (PL_minus_a) {
8fd239a7
CS
2292 GV* gv = gv_fetchpv("::F", TRUE, SVt_PVAV);
2293 if (gv)
2294 GvIMPORTED_AV_on(gv);
3280af22
NIS
2295 if (PL_minus_F) {
2296 if (strchr("/'\"", *PL_splitstr)
2297 && strchr(PL_splitstr + 1, *PL_splitstr))
cea2e8a9 2298 Perl_sv_catpvf(aTHX_ PL_linestr, "@F=split(%s);", PL_splitstr);
54310121 2299 else {
2300 char delim;
2301 s = "'~#\200\1'"; /* surely one char is unused...*/
3280af22 2302 while (s[1] && strchr(PL_splitstr, *s)) s++;
54310121 2303 delim = *s;
cea2e8a9 2304 Perl_sv_catpvf(aTHX_ PL_linestr, "@F=split(%s%c",
46fc3d4c 2305 "q" + (delim == '\''), delim);
3280af22 2306 for (s = PL_splitstr; *s; s++) {
54310121 2307 if (*s == '\\')
3280af22
NIS
2308 sv_catpvn(PL_linestr, "\\", 1);
2309 sv_catpvn(PL_linestr, s, 1);
54310121 2310 }
cea2e8a9 2311 Perl_sv_catpvf(aTHX_ PL_linestr, "%c);", delim);
54310121 2312 }
2304df62
AD
2313 }
2314 else
3280af22 2315 sv_catpv(PL_linestr,"@F=split(' ');");
2304df62 2316 }
79072805 2317 }
3280af22
NIS
2318 sv_catpv(PL_linestr, "\n");
2319 PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
2320 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
2321 if (PERLDB_LINE && PL_curstash != PL_debstash) {
a0d0e21e
LW
2322 SV *sv = NEWSV(85,0);
2323
2324 sv_upgrade(sv, SVt_PVMG);
3280af22
NIS
2325 sv_setsv(sv,PL_linestr);
2326 av_store(GvAV(PL_curcop->cop_filegv),(I32)PL_curcop->cop_line,sv);
a0d0e21e 2327 }
79072805 2328 goto retry;
a687059c 2329 }
e929a76b 2330 do {
3280af22 2331 if ((s = filter_gets(PL_linestr, PL_rsfp, 0)) == Nullch) {
e929a76b 2332 fake_eof:
3280af22
NIS
2333 if (PL_rsfp) {
2334 if (PL_preprocess && !PL_in_eval)
2335 (void)PerlProc_pclose(PL_rsfp);
2336 else if ((PerlIO *)PL_rsfp == PerlIO_stdin())
2337 PerlIO_clearerr(PL_rsfp);
395c3793 2338 else
3280af22
NIS
2339 (void)PerlIO_close(PL_rsfp);
2340 PL_rsfp = Nullfp;
4a9ae47a 2341 PL_doextract = FALSE;
395c3793 2342 }
3280af22
NIS
2343 if (!PL_in_eval && (PL_minus_n || PL_minus_p)) {
2344 sv_setpv(PL_linestr,PL_minus_p ? ";}continue{print" : "");
2345 sv_catpv(PL_linestr,";}");
2346 PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
2347 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
2348 PL_minus_n = PL_minus_p = 0;
e929a76b
LW
2349 goto retry;
2350 }
3280af22
NIS
2351 PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
2352 sv_setpv(PL_linestr,"");
79072805 2353 TOKEN(';'); /* not infinite loop because rsfp is NULL now */
378cc40b 2354 }
3280af22 2355 if (PL_doextract) {
a0d0e21e 2356 if (*s == '#' && s[1] == '!' && instr(s,"perl"))
3280af22 2357 PL_doextract = FALSE;
a0d0e21e
LW
2358
2359 /* Incest with pod. */
2360 if (*s == '=' && strnEQ(s, "=cut", 4)) {
3280af22
NIS
2361 sv_setpv(PL_linestr, "");
2362 PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
2363 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
2364 PL_doextract = FALSE;
a0d0e21e
LW
2365 }
2366 }
463ee0b2 2367 incline(s);
3280af22
NIS
2368 } while (PL_doextract);
2369 PL_oldoldbufptr = PL_oldbufptr = PL_bufptr = PL_linestart = s;
2370 if (PERLDB_LINE && PL_curstash != PL_debstash) {
79072805 2371 SV *sv = NEWSV(85,0);
a687059c 2372
93a17b20 2373 sv_upgrade(sv, SVt_PVMG);
3280af22
NIS
2374 sv_setsv(sv,PL_linestr);
2375 av_store(GvAV(PL_curcop->cop_filegv),(I32)PL_curcop->cop_line,sv);
a687059c 2376 }
3280af22
NIS
2377 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
2378 if (PL_curcop->cop_line == 1) {
2379 while (s < PL_bufend && isSPACE(*s))
79072805 2380 s++;
a0d0e21e 2381 if (*s == ':' && s[1] != ':') /* for csh execing sh scripts */
79072805 2382 s++;
44a8e56a 2383 d = Nullch;
3280af22 2384 if (!PL_in_eval) {
44a8e56a 2385 if (*s == '#' && *(s+1) == '!')
2386 d = s + 2;
2387#ifdef ALTERNATE_SHEBANG
2388 else {
2389 static char as[] = ALTERNATE_SHEBANG;
2390 if (*s == as[0] && strnEQ(s, as, sizeof(as) - 1))
2391 d = s + (sizeof(as) - 1);
2392 }
2393#endif /* ALTERNATE_SHEBANG */
2394 }
2395 if (d) {
b8378b72 2396 char *ipath;
774d564b 2397 char *ipathend;
b8378b72 2398
774d564b 2399 while (isSPACE(*d))
b8378b72
CS
2400 d++;
2401 ipath = d;
774d564b 2402 while (*d && !isSPACE(*d))
2403 d++;
2404 ipathend = d;
2405
2406#ifdef ARG_ZERO_IS_SCRIPT
2407 if (ipathend > ipath) {
2408 /*
2409 * HP-UX (at least) sets argv[0] to the script name,
2410 * which makes $^X incorrect. And Digital UNIX and Linux,
2411 * at least, set argv[0] to the basename of the Perl
2412 * interpreter. So, having found "#!", we'll set it right.
2413 */
2414 SV *x = GvSV(gv_fetchpv("\030", TRUE, SVt_PV));
2415 assert(SvPOK(x) || SvGMAGICAL(x));
6b88bc9c 2416 if (sv_eq(x, GvSV(PL_curcop->cop_filegv))) {
774d564b 2417 sv_setpvn(x, ipath, ipathend - ipath);
9607fc9c 2418 SvSETMAGIC(x);
2419 }
774d564b 2420 TAINT_NOT; /* $^X is always tainted, but that's OK */
8ebc5c01 2421 }
774d564b 2422#endif /* ARG_ZERO_IS_SCRIPT */
b8378b72
CS
2423
2424 /*
2425 * Look for options.
2426 */
748a9306
LW
2427 d = instr(s,"perl -");
2428 if (!d)
2429 d = instr(s,"perl");
44a8e56a 2430#ifdef ALTERNATE_SHEBANG
2431 /*
2432 * If the ALTERNATE_SHEBANG on this system starts with a
2433 * character that can be part of a Perl expression, then if
2434 * we see it but not "perl", we're probably looking at the
2435 * start of Perl code, not a request to hand off to some
2436 * other interpreter. Similarly, if "perl" is there, but
2437 * not in the first 'word' of the line, we assume the line
2438 * contains the start of the Perl program.
44a8e56a 2439 */
2440 if (d && *s != '#') {
774d564b 2441 char *c = ipath;
44a8e56a 2442 while (*c && !strchr("; \t\r\n\f\v#", *c))
2443 c++;
2444 if (c < d)
2445 d = Nullch; /* "perl" not in first word; ignore */
2446 else
2447 *s = '#'; /* Don't try to parse shebang line */
2448 }
774d564b 2449#endif /* ALTERNATE_SHEBANG */
748a9306 2450 if (!d &&
44a8e56a 2451 *s == '#' &&
774d564b 2452 ipathend > ipath &&
3280af22 2453 !PL_minus_c &&
748a9306 2454 !instr(s,"indir") &&
3280af22 2455 instr(PL_origargv[0],"perl"))
748a9306 2456 {
9f68db38 2457 char **newargv;
9f68db38 2458
774d564b 2459 *ipathend = '\0';
2460 s = ipathend + 1;
3280af22 2461 while (s < PL_bufend && isSPACE(*s))
9f68db38 2462 s++;
3280af22
NIS
2463 if (s < PL_bufend) {
2464 Newz(899,newargv,PL_origargc+3,char*);
9f68db38 2465 newargv[1] = s;
3280af22 2466 while (s < PL_bufend && !isSPACE(*s))
9f68db38
LW
2467 s++;
2468 *s = '\0';
3280af22 2469 Copy(PL_origargv+1, newargv+2, PL_origargc+1, char*);
9f68db38
LW
2470 }
2471 else
3280af22 2472 newargv = PL_origargv;
774d564b 2473 newargv[0] = ipath;
80252599 2474 PerlProc_execv(ipath, newargv);
cea2e8a9 2475 Perl_croak(aTHX_ "Can't exec %s", ipath);
9f68db38 2476 }
748a9306 2477 if (d) {
3280af22
NIS
2478 U32 oldpdb = PL_perldb;
2479 bool oldn = PL_minus_n;
2480 bool oldp = PL_minus_p;
748a9306
LW
2481
2482 while (*d && !isSPACE(*d)) d++;
89bfa8cd 2483 while (*d == ' ' || *d == '\t') d++;
748a9306
LW
2484
2485 if (*d++ == '-') {
8cc95fdb 2486 do {
2487 if (*d == 'M' || *d == 'm') {
2488 char *m = d;
2489 while (*d && !isSPACE(*d)) d++;
cea2e8a9 2490 Perl_croak(aTHX_ "Too late for \"-%.*s\" option",
8cc95fdb 2491 (int)(d - m), m);
2492 }
2493 d = moreswitches(d);
2494 } while (d);
84902520 2495 if (PERLDB_LINE && !oldpdb ||
3280af22 2496 ( PL_minus_n || PL_minus_p ) && !(oldn || oldp) )
b084f20b 2497 /* if we have already added "LINE: while (<>) {",
2498 we must not do it again */
748a9306 2499 {
3280af22
NIS
2500 sv_setpv(PL_linestr, "");
2501 PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
2502 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
2503 PL_preambled = FALSE;
84902520 2504 if (PERLDB_LINE)
3280af22 2505 (void)gv_fetchfile(PL_origfilename);
748a9306
LW
2506 goto retry;
2507 }
a0d0e21e 2508 }
79072805 2509 }
9f68db38 2510 }
79072805 2511 }
3280af22
NIS
2512 if (PL_lex_formbrack && PL_lex_brackets <= PL_lex_formbrack) {
2513 PL_bufptr = s;
2514 PL_lex_state = LEX_FORMLINE;
cea2e8a9 2515 return yylex();
ae986130 2516 }
378cc40b 2517 goto retry;
4fdae800 2518 case '\r':
6a27c188 2519#ifdef PERL_STRICT_CR
cea2e8a9
GS
2520 Perl_warn(aTHX_ "Illegal character \\%03o (carriage return)", '\r');
2521 Perl_croak(aTHX_
54310121 2522 "(Maybe you didn't strip carriage returns after a network transfer?)\n");
a868473f 2523#endif
4fdae800 2524 case ' ': case '\t': case '\f': case 013:
378cc40b
LW
2525 s++;
2526 goto retry;
378cc40b 2527 case '#':
e929a76b 2528 case '\n':
3280af22
NIS
2529 if (PL_lex_state != LEX_NORMAL || (PL_in_eval && !PL_rsfp)) {
2530 d = PL_bufend;
a687059c 2531 while (s < d && *s != '\n')
378cc40b 2532 s++;
0f85fab0 2533 if (s < d)
378cc40b 2534 s++;
463ee0b2 2535 incline(s);
3280af22
NIS
2536 if (PL_lex_formbrack && PL_lex_brackets <= PL_lex_formbrack) {
2537 PL_bufptr = s;
2538 PL_lex_state = LEX_FORMLINE;
cea2e8a9 2539 return yylex();
a687059c 2540 }
378cc40b 2541 }
a687059c 2542 else {
378cc40b 2543 *s = '\0';
3280af22 2544 PL_bufend = s;
a687059c 2545 }
378cc40b
LW
2546 goto retry;
2547 case '-':
79072805 2548 if (s[1] && isALPHA(s[1]) && !isALNUM(s[2])) {
378cc40b 2549 s++;
3280af22 2550 PL_bufptr = s;
748a9306
LW
2551 tmp = *s++;
2552
3280af22 2553 while (s < PL_bufend && (*s == ' ' || *s == '\t'))
748a9306
LW
2554 s++;
2555
2556 if (strnEQ(s,"=>",2)) {
3280af22 2557 s = force_word(PL_bufptr,WORD,FALSE,FALSE,FALSE);
748a9306
LW
2558 OPERATOR('-'); /* unary minus */
2559 }
3280af22
NIS
2560 PL_last_uni = PL_oldbufptr;
2561 PL_last_lop_op = OP_FTEREAD; /* good enough */
748a9306 2562 switch (tmp) {
79072805
LW
2563 case 'r': FTST(OP_FTEREAD);
2564 case 'w': FTST(OP_FTEWRITE);
2565 case 'x': FTST(OP_FTEEXEC);
2566 case 'o': FTST(OP_FTEOWNED);
2567 case 'R': FTST(OP_FTRREAD);
2568 case 'W': FTST(OP_FTRWRITE);
2569 case 'X': FTST(OP_FTREXEC);
2570 case 'O': FTST(OP_FTROWNED);
2571 case 'e': FTST(OP_FTIS);
2572 case 'z': FTST(OP_FTZERO);
2573 case 's': FTST(OP_FTSIZE);
2574 case 'f': FTST(OP_FTFILE);
2575 case 'd': FTST(OP_FTDIR);
2576 case 'l': FTST(OP_FTLINK);
2577 case 'p': FTST(OP_FTPIPE);
2578 case 'S': FTST(OP_FTSOCK);
2579 case 'u': FTST(OP_FTSUID);
2580 case 'g': FTST(OP_FTSGID);
2581 case 'k': FTST(OP_FTSVTX);
2582 case 'b': FTST(OP_FTBLK);
2583 case 'c': FTST(OP_FTCHR);
2584 case 't': FTST(OP_FTTTY);
2585 case 'T': FTST(OP_FTTEXT);
2586 case 'B': FTST(OP_FTBINARY);
85e6fe83
LW
2587 case 'M': gv_fetchpv("\024",TRUE, SVt_PV); FTST(OP_FTMTIME);
2588 case 'A': gv_fetchpv("\024",TRUE, SVt_PV); FTST(OP_FTATIME);
2589 case 'C': gv_fetchpv("\024",TRUE, SVt_PV); FTST(OP_FTCTIME);
378cc40b 2590 default:
cea2e8a9 2591 Perl_croak(aTHX_ "Unrecognized file test: -%c", (int)tmp);
378cc40b
LW
2592 break;
2593 }
2594 }
a687059c
LW
2595 tmp = *s++;
2596 if (*s == tmp) {
2597 s++;
3280af22 2598 if (PL_expect == XOPERATOR)
79072805
LW
2599 TERM(POSTDEC);
2600 else
2601 OPERATOR(PREDEC);
2602 }
2603 else if (*s == '>') {
2604 s++;
2605 s = skipspace(s);
834a4ddd 2606 if (isIDFIRST_lazy(s)) {
a0d0e21e 2607 s = force_word(s,METHOD,FALSE,TRUE,FALSE);
463ee0b2 2608 TOKEN(ARROW);
79072805 2609 }
748a9306
LW
2610 else if (*s == '$')
2611 OPERATOR(ARROW);
463ee0b2 2612 else
748a9306 2613 TERM(ARROW);
a687059c 2614 }
3280af22 2615 if (PL_expect == XOPERATOR)
79072805
LW
2616 Aop(OP_SUBTRACT);
2617 else {
3280af22 2618 if (isSPACE(*s) || !isSPACE(*PL_bufptr))
2f3197b3 2619 check_uni();
79072805 2620 OPERATOR('-'); /* unary minus */
2f3197b3 2621 }
79072805 2622
378cc40b 2623 case '+':
a687059c
LW
2624 tmp = *s++;
2625 if (*s == tmp) {
378cc40b 2626 s++;
3280af22 2627 if (PL_expect == XOPERATOR)
79072805
LW
2628 TERM(POSTINC);
2629 else
2630 OPERATOR(PREINC);
378cc40b 2631 }
3280af22 2632 if (PL_expect == XOPERATOR)
79072805
LW
2633 Aop(OP_ADD);
2634 else {
3280af22 2635 if (isSPACE(*s) || !isSPACE(*PL_bufptr))
2f3197b3 2636 check_uni();
a687059c 2637 OPERATOR('+');
2f3197b3 2638 }
a687059c 2639
378cc40b 2640 case '*':
3280af22
NIS
2641 if (PL_expect != XOPERATOR) {
2642 s = scan_ident(s, PL_bufend, PL_tokenbuf, sizeof PL_tokenbuf, TRUE);
2643 PL_expect = XOPERATOR;
2644 force_ident(PL_tokenbuf, '*');
2645 if (!*PL_tokenbuf)
a0d0e21e 2646 PREREF('*');
79072805 2647 TERM('*');
a687059c 2648 }
79072805
LW
2649 s++;
2650 if (*s == '*') {
a687059c 2651 s++;
79072805 2652 PWop(OP_POW);
a687059c 2653 }
79072805
LW
2654 Mop(OP_MULTIPLY);
2655
378cc40b 2656 case '%':
3280af22 2657 if (PL_expect == XOPERATOR) {
bbce6d69 2658 ++s;
2659 Mop(OP_MODULO);
a687059c 2660 }
3280af22
NIS
2661 PL_tokenbuf[0] = '%';
2662 s = scan_ident(s, PL_bufend, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1, TRUE);
2663 if (!PL_tokenbuf[1]) {
2664 if (s == PL_bufend)
bbce6d69 2665 yyerror("Final % should be \\% or %name");
2666 PREREF('%');
a687059c 2667 }
3280af22 2668 PL_pending_ident = '%';
bbce6d69 2669 TERM('%');
a687059c 2670
378cc40b 2671 case '^':
79072805 2672 s++;
a0d0e21e 2673 BOop(OP_BIT_XOR);
79072805 2674 case '[':
3280af22 2675 PL_lex_brackets++;
79072805 2676 /* FALL THROUGH */
378cc40b 2677 case '~':
378cc40b 2678 case ',':
378cc40b
LW
2679 tmp = *s++;
2680 OPERATOR(tmp);
a0d0e21e
LW
2681 case ':':
2682 if (s[1] == ':') {
2683 len = 0;
2684 goto just_a_word;
2685 }
2686 s++;
09bef843
SB
2687 switch (PL_expect) {
2688 OP *attrs;
2689 case XOPERATOR:
2690 if (!PL_in_my || PL_lex_state != LEX_NORMAL)
2691 break;
2692 PL_bufptr = s; /* update in case we back off */
2693 goto grabattrs;
2694 case XATTRBLOCK:
2695 PL_expect = XBLOCK;
2696 goto grabattrs;
2697 case XATTRTERM:
2698 PL_expect = XTERMBLOCK;
2699 grabattrs:
2700 s = skipspace(s);
2701 attrs = Nullop;
2702 while (isIDFIRST_lazy(s)) {
2703 d = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, FALSE, &len);
2704 if (*d == '(') {
2705 d = scan_str(d,TRUE,TRUE);
2706 if (!d) {
2707 if (PL_lex_stuff) {
2708 SvREFCNT_dec(PL_lex_stuff);
2709 PL_lex_stuff = Nullsv;
2710 }
2711 /* MUST advance bufptr here to avoid bogus
2712 "at end of line" context messages from yyerror().
2713 */
2714 PL_bufptr = s + len;
2715 yyerror("Unterminated attribute parameter in attribute list");
2716 if (attrs)
2717 op_free(attrs);
2718 return 0; /* EOF indicator */
2719 }
2720 }
2721 if (PL_lex_stuff) {
2722 SV *sv = newSVpvn(s, len);
2723 sv_catsv(sv, PL_lex_stuff);
2724 attrs = append_elem(OP_LIST, attrs,
2725 newSVOP(OP_CONST, 0, sv));
2726 SvREFCNT_dec(PL_lex_stuff);
2727 PL_lex_stuff = Nullsv;
2728 }
2729 else {
2730 attrs = append_elem(OP_LIST, attrs,
2731 newSVOP(OP_CONST, 0,
2732 newSVpvn(s, len)));
2733 }
2734 s = skipspace(d);
2735 while (*s == ',')
2736 s = skipspace(s+1);
2737 }
2738 tmp = (PL_expect == XOPERATOR ? '=' : '{'); /*'}' for vi */
2739 if (*s != ';' && *s != tmp) {
2740 char q = ((*s == '\'') ? '"' : '\'');
2741 /* If here for an expression, and parsed no attrs, back off. */
2742 if (tmp == '=' && !attrs) {
2743 s = PL_bufptr;
2744 break;
2745 }
2746 /* MUST advance bufptr here to avoid bogus "at end of line"
2747 context messages from yyerror().
2748 */
2749 PL_bufptr = s;
2750 if (!*s)
2751 yyerror("Unterminated attribute list");
2752 else
2753 yyerror(Perl_form(aTHX_ "Invalid separator character %c%c%c in attribute list",
2754 q, *s, q));
2755 if (attrs)
2756 op_free(attrs);
2757 OPERATOR(':');
2758 }
2759 if (attrs) {
2760 PL_nextval[PL_nexttoke].opval = attrs;
2761 force_next(THING);
2762 }
2763 TOKEN(COLONATTR);
2764 }
a0d0e21e 2765 OPERATOR(':');
8990e307
LW
2766 case '(':
2767 s++;
3280af22
NIS
2768 if (PL_last_lop == PL_oldoldbufptr || PL_last_uni == PL_oldoldbufptr)
2769 PL_oldbufptr = PL_oldoldbufptr; /* allow print(STDOUT 123) */
a0d0e21e 2770 else
3280af22 2771 PL_expect = XTERM;
a0d0e21e 2772 TOKEN('(');
378cc40b 2773 case ';':
3280af22
NIS
2774 if (PL_curcop->cop_line < PL_copline)
2775 PL_copline = PL_curcop->cop_line;
378cc40b
LW
2776 tmp = *s++;
2777 OPERATOR(tmp);
2778 case ')':
378cc40b 2779 tmp = *s++;
16d20bd9
AD
2780 s = skipspace(s);
2781 if (*s == '{')
2782 PREBLOCK(tmp);
378cc40b 2783 TERM(tmp);
79072805
LW
2784 case ']':
2785 s++;
3280af22 2786 if (PL_lex_brackets <= 0)
d98d5fff 2787 yyerror("Unmatched right square bracket");
463ee0b2 2788 else
3280af22
NIS
2789 --PL_lex_brackets;
2790 if (PL_lex_state == LEX_INTERPNORMAL) {
2791 if (PL_lex_brackets == 0) {
a0d0e21e 2792 if (*s != '[' && *s != '{' && (*s != '-' || s[1] != '>'))
3280af22 2793 PL_lex_state = LEX_INTERPEND;
79072805
LW
2794 }
2795 }
4633a7c4 2796 TERM(']');
79072805
LW
2797 case '{':
2798 leftbracket:
79072805 2799 s++;
3280af22
NIS
2800 if (PL_lex_brackets > 100) {
2801 char* newlb = Renew(PL_lex_brackstack, PL_lex_brackets + 1, char);
2802 if (newlb != PL_lex_brackstack) {
8990e307 2803 SAVEFREEPV(newlb);
3280af22 2804 PL_lex_brackstack = newlb;
8990e307
LW
2805 }
2806 }
3280af22 2807 switch (PL_expect) {
a0d0e21e 2808 case XTERM:
3280af22 2809 if (PL_lex_formbrack) {
a0d0e21e
LW
2810 s--;
2811 PRETERMBLOCK(DO);
2812 }
3280af22
NIS
2813 if (PL_oldoldbufptr == PL_last_lop)
2814 PL_lex_brackstack[PL_lex_brackets++] = XTERM;
a0d0e21e 2815 else
3280af22 2816 PL_lex_brackstack[PL_lex_brackets++] = XOPERATOR;
79072805 2817 OPERATOR(HASHBRACK);
a0d0e21e 2818 case XOPERATOR:
3280af22 2819 while (s < PL_bufend && (*s == ' ' || *s == '\t'))
748a9306 2820 s++;
44a8e56a 2821 d = s;
3280af22
NIS
2822 PL_tokenbuf[0] = '\0';
2823 if (d < PL_bufend && *d == '-') {
2824 PL_tokenbuf[0] = '-';
44a8e56a 2825 d++;
3280af22 2826 while (d < PL_bufend && (*d == ' ' || *d == '\t'))
44a8e56a 2827 d++;
2828 }
834a4ddd 2829 if (d < PL_bufend && isIDFIRST_lazy(d)) {
3280af22 2830 d = scan_word(d, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1,
8903cb82 2831 FALSE, &len);
3280af22 2832 while (d < PL_bufend && (*d == ' ' || *d == '\t'))
748a9306
LW
2833 d++;
2834 if (*d == '}') {
3280af22 2835 char minus = (PL_tokenbuf[0] == '-');
44a8e56a 2836 s = force_word(s + minus, WORD, FALSE, TRUE, FALSE);
2837 if (minus)
2838 force_next('-');
748a9306
LW
2839 }
2840 }
2841 /* FALL THROUGH */
09bef843 2842 case XATTRBLOCK:
748a9306 2843 case XBLOCK:
3280af22
NIS
2844 PL_lex_brackstack[PL_lex_brackets++] = XSTATE;
2845 PL_expect = XSTATE;
a0d0e21e 2846 break;
09bef843 2847 case XATTRTERM:
a0d0e21e 2848 case XTERMBLOCK:
3280af22
NIS
2849 PL_lex_brackstack[PL_lex_brackets++] = XOPERATOR;
2850 PL_expect = XSTATE;
a0d0e21e
LW
2851 break;
2852 default: {
2853 char *t;
3280af22
NIS
2854 if (PL_oldoldbufptr == PL_last_lop)
2855 PL_lex_brackstack[PL_lex_brackets++] = XTERM;
a0d0e21e 2856 else
3280af22 2857 PL_lex_brackstack[PL_lex_brackets++] = XOPERATOR;
a0d0e21e 2858 s = skipspace(s);
09ecc4b6 2859 if (*s == '}')
a0d0e21e 2860 OPERATOR(HASHBRACK);
b8a4b1be
GS
2861 /* This hack serves to disambiguate a pair of curlies
2862 * as being a block or an anon hash. Normally, expectation
2863 * determines that, but in cases where we're not in a
2864 * position to expect anything in particular (like inside
2865 * eval"") we have to resolve the ambiguity. This code
2866 * covers the case where the first term in the curlies is a
2867 * quoted string. Most other cases need to be explicitly
2868 * disambiguated by prepending a `+' before the opening
2869 * curly in order to force resolution as an anon hash.
2870 *
2871 * XXX should probably propagate the outer expectation
2872 * into eval"" to rely less on this hack, but that could
2873 * potentially break current behavior of eval"".
2874 * GSAR 97-07-21
2875 */
2876 t = s;
2877 if (*s == '\'' || *s == '"' || *s == '`') {
2878 /* common case: get past first string, handling escapes */
3280af22 2879 for (t++; t < PL_bufend && *t != *s;)
b8a4b1be
GS
2880 if (*t++ == '\\' && (*t == '\\' || *t == *s))
2881 t++;
2882 t++;
a0d0e21e 2883 }
b8a4b1be 2884 else if (*s == 'q') {
3280af22 2885 if (++t < PL_bufend
b8a4b1be 2886 && (!isALNUM(*t)
3280af22 2887 || ((*t == 'q' || *t == 'x') && ++t < PL_bufend
b8a4b1be
GS
2888 && !isALNUM(*t)))) {
2889 char *tmps;
2890 char open, close, term;
2891 I32 brackets = 1;
2892
3280af22 2893 while (t < PL_bufend && isSPACE(*t))
b8a4b1be
GS
2894 t++;
2895 term = *t;
2896 open = term;
2897 if (term && (tmps = strchr("([{< )]}> )]}>",term)))
2898 term = tmps[5];
2899 close = term;
2900 if (open == close)
3280af22
NIS
2901 for (t++; t < PL_bufend; t++) {
2902 if (*t == '\\' && t+1 < PL_bufend && open != '\\')
b8a4b1be 2903 t++;
6d07e5e9 2904 else if (*t == open)
b8a4b1be
GS
2905 break;
2906 }
2907 else
3280af22
NIS
2908 for (t++; t < PL_bufend; t++) {
2909 if (*t == '\\' && t+1 < PL_bufend)
b8a4b1be 2910 t++;
6d07e5e9 2911 else if (*t == close && --brackets <= 0)
b8a4b1be
GS
2912 break;
2913 else if (*t == open)
2914 brackets++;
2915 }
2916 }
2917 t++;
a0d0e21e 2918 }
834a4ddd
LW
2919 else if (isIDFIRST_lazy(s)) {
2920 for (t++; t < PL_bufend && isALNUM_lazy(t); t++) ;
a0d0e21e 2921 }
3280af22 2922 while (t < PL_bufend && isSPACE(*t))
a0d0e21e 2923 t++;
b8a4b1be
GS
2924 /* if comma follows first term, call it an anon hash */
2925 /* XXX it could be a comma expression with loop modifiers */
3280af22 2926 if (t < PL_bufend && ((*t == ',' && (*s == 'q' || !isLOWER(*s)))
b8a4b1be 2927 || (*t == '=' && t[1] == '>')))
a0d0e21e 2928 OPERATOR(HASHBRACK);
3280af22 2929 if (PL_expect == XREF)
4e4e412b 2930 PL_expect = XTERM;
a0d0e21e 2931 else {
3280af22
NIS
2932 PL_lex_brackstack[PL_lex_brackets-1] = XSTATE;
2933 PL_expect = XSTATE;
a0d0e21e 2934 }
8990e307 2935 }
a0d0e21e 2936 break;
463ee0b2 2937 }
3280af22 2938 yylval.ival = PL_curcop->cop_line;
79072805 2939 if (isSPACE(*s) || *s == '#')
3280af22 2940 PL_copline = NOLINE; /* invalidate current command line number */
79072805 2941 TOKEN('{');
378cc40b 2942 case '}':
79072805
LW
2943 rightbracket:
2944 s++;
3280af22 2945 if (PL_lex_brackets <= 0)
d98d5fff 2946 yyerror("Unmatched right curly bracket");
463ee0b2 2947 else
3280af22
NIS
2948 PL_expect = (expectation)PL_lex_brackstack[--PL_lex_brackets];
2949 if (PL_lex_brackets < PL_lex_formbrack)
2950 PL_lex_formbrack = 0;
2951 if (PL_lex_state == LEX_INTERPNORMAL) {
2952 if (PL_lex_brackets == 0) {
2953 if (PL_lex_fakebrack) {
2954 PL_lex_state = LEX_INTERPEND;
2955 PL_bufptr = s;
cea2e8a9 2956 return yylex(); /* ignore fake brackets */
79072805 2957 }
fa83b5b6 2958 if (*s == '-' && s[1] == '>')
3280af22 2959 PL_lex_state = LEX_INTERPENDMAYBE;
fa83b5b6 2960 else if (*s != '[' && *s != '{')
3280af22 2961 PL_lex_state = LEX_INTERPEND;
79072805
LW
2962 }
2963 }
3280af22
NIS
2964 if (PL_lex_brackets < PL_lex_fakebrack) {
2965 PL_bufptr = s;
2966 PL_lex_fakebrack = 0;
cea2e8a9 2967 return yylex(); /* ignore fake brackets */
748a9306 2968 }
79072805
LW
2969 force_next('}');
2970 TOKEN(';');
378cc40b
LW
2971 case '&':
2972 s++;
2973 tmp = *s++;
2974 if (tmp == '&')
a0d0e21e 2975 AOPERATOR(ANDAND);
378cc40b 2976 s--;
3280af22 2977 if (PL_expect == XOPERATOR) {
834a4ddd 2978 if (ckWARN(WARN_SEMICOLON) && isIDFIRST_lazy(s) && PL_bufptr == PL_linestart) {
3280af22 2979 PL_curcop->cop_line--;
cea2e8a9 2980 Perl_warner(aTHX_ WARN_SEMICOLON, PL_warn_nosemi);
3280af22 2981 PL_curcop->cop_line++;
463ee0b2 2982 }
79072805 2983 BAop(OP_BIT_AND);
463ee0b2 2984 }
79072805 2985
3280af22
NIS
2986 s = scan_ident(s - 1, PL_bufend, PL_tokenbuf, sizeof PL_tokenbuf, TRUE);
2987 if (*PL_tokenbuf) {
2988 PL_expect = XOPERATOR;
2989 force_ident(PL_tokenbuf, '&');
463ee0b2 2990 }
79072805
LW
2991 else
2992 PREREF('&');
c07a80fd 2993 yylval.ival = (OPpENTERSUB_AMPER<<8);
79072805
LW
2994 TERM('&');
2995
378cc40b
LW
2996 case '|':
2997 s++;
2998 tmp = *s++;
2999 if (tmp == '|')
a0d0e21e 3000 AOPERATOR(OROR);
378cc40b 3001 s--;
79072805 3002 BOop(OP_BIT_OR);
378cc40b
LW
3003 case '=':
3004 s++;
3005 tmp = *s++;
3006 if (tmp == '=')
79072805
LW
3007 Eop(OP_EQ);
3008 if (tmp == '>')
3009 OPERATOR(',');
378cc40b 3010 if (tmp == '~')
79072805 3011 PMop(OP_MATCH);
599cee73 3012 if (ckWARN(WARN_SYNTAX) && tmp && isSPACE(*s) && strchr("+-*/%.^&|<",tmp))
cea2e8a9 3013 Perl_warner(aTHX_ WARN_SYNTAX, "Reversed %c= operator",(int)tmp);
378cc40b 3014 s--;
3280af22
NIS
3015 if (PL_expect == XSTATE && isALPHA(tmp) &&
3016 (s == PL_linestart+1 || s[-2] == '\n') )
748a9306 3017 {
3280af22
NIS
3018 if (PL_in_eval && !PL_rsfp) {
3019 d = PL_bufend;
a5f75d66
AD
3020 while (s < d) {
3021 if (*s++ == '\n') {
3022 incline(s);
3023 if (strnEQ(s,"=cut",4)) {
3024 s = strchr(s,'\n');
3025 if (s)
3026 s++;
3027 else
3028 s = d;
3029 incline(s);
3030 goto retry;
3031 }
3032 }
3033 }
3034 goto retry;
3035 }
3280af22
NIS
3036 s = PL_bufend;
3037 PL_doextract = TRUE;
a0d0e21e
LW
3038 goto retry;
3039 }
3280af22 3040 if (PL_lex_brackets < PL_lex_formbrack) {
a0d0e21e 3041 char *t;
51882d45 3042#ifdef PERL_STRICT_CR
a0d0e21e 3043 for (t = s; *t == ' ' || *t == '\t'; t++) ;
51882d45
GS
3044#else
3045 for (t = s; *t == ' ' || *t == '\t' || *t == '\r'; t++) ;
3046#endif
a0d0e21e
LW
3047 if (*t == '\n' || *t == '#') {
3048 s--;
3280af22 3049 PL_expect = XBLOCK;
a0d0e21e
LW
3050 goto leftbracket;
3051 }
79072805 3052 }
a0d0e21e
LW
3053 yylval.ival = 0;
3054 OPERATOR(ASSIGNOP);
378cc40b
LW
3055 case '!':
3056 s++;
3057 tmp = *s++;
3058 if (tmp == '=')
79072805 3059 Eop(OP_NE);
378cc40b 3060 if (tmp == '~')
79072805 3061 PMop(OP_NOT);
378cc40b
LW
3062 s--;
3063 OPERATOR('!');
3064 case '<':
3280af22 3065 if (PL_expect != XOPERATOR) {
93a17b20 3066 if (s[1] != '<' && !strchr(s,'>'))
2f3197b3 3067 check_uni();
79072805
LW
3068 if (s[1] == '<')
3069 s = scan_heredoc(s);
3070 else
3071 s = scan_inputsymbol(s);
3072 TERM(sublex_start());
378cc40b
LW
3073 }
3074 s++;
3075 tmp = *s++;
3076 if (tmp == '<')
79072805 3077 SHop(OP_LEFT_SHIFT);
395c3793
LW
3078 if (tmp == '=') {
3079 tmp = *s++;
3080 if (tmp == '>')
79072805 3081 Eop(OP_NCMP);
395c3793 3082 s--;
79072805 3083 Rop(OP_LE);
395c3793 3084 }
378cc40b 3085 s--;
79072805 3086 Rop(OP_LT);
378cc40b
LW
3087 case '>':
3088 s++;
3089 tmp = *s++;
3090 if (tmp == '>')
79072805 3091 SHop(OP_RIGHT_SHIFT);
378cc40b 3092 if (tmp == '=')
79072805 3093 Rop(OP_GE);
378cc40b 3094 s--;
79072805 3095 Rop(OP_GT);
378cc40b
LW
3096
3097 case '$':
bbce6d69 3098 CLINE;
3099
3280af22
NIS
3100 if (PL_expect == XOPERATOR) {
3101 if (PL_lex_formbrack && PL_lex_brackets == PL_lex_formbrack) {
3102 PL_expect = XTERM;
a0d0e21e 3103 depcom();
bbce6d69 3104 return ','; /* grandfather non-comma-format format */
a0d0e21e 3105 }
8990e307 3106 }
a0d0e21e 3107
834a4ddd 3108 if (s[1] == '#' && (isIDFIRST_lazy(s+2) || strchr("{$:+-", s[2]))) {
3280af22 3109 PL_tokenbuf[0] = '@';
376b8730
SM
3110 s = scan_ident(s + 1, PL_bufend, PL_tokenbuf + 1,
3111 sizeof PL_tokenbuf - 1, FALSE);
3112 if (PL_expect == XOPERATOR)
3113 no_op("Array length", s);
3280af22 3114 if (!PL_tokenbuf[1])
a0d0e21e 3115 PREREF(DOLSHARP);
3280af22
NIS
3116 PL_expect = XOPERATOR;
3117 PL_pending_ident = '#';
463ee0b2 3118 TOKEN(DOLSHARP);
79072805 3119 }
bbce6d69 3120
3280af22 3121 PL_tokenbuf[0] = '$';
376b8730
SM
3122 s = scan_ident(s, PL_bufend, PL_tokenbuf + 1,
3123 sizeof PL_tokenbuf - 1, FALSE);
3124 if (PL_expect == XOPERATOR)
3125 no_op("Scalar", s);
3280af22
NIS
3126 if (!PL_tokenbuf[1]) {
3127 if (s == PL_bufend)
bbce6d69 3128 yyerror("Final $ should be \\$ or $name");
3129 PREREF('$');
8990e307 3130 }
a0d0e21e 3131
bbce6d69 3132 /* This kludge not intended to be bulletproof. */
3280af22 3133 if (PL_tokenbuf[1] == '[' && !PL_tokenbuf[2]) {
bbce6d69 3134 yylval.opval = newSVOP(OP_CONST, 0,
3280af22 3135 newSViv((IV)PL_compiling.cop_arybase));
bbce6d69 3136 yylval.opval->op_private = OPpCONST_ARYBASE;
3137 TERM(THING);
3138 }
3139
ff68c719 3140 d = s;
69d2bceb 3141 tmp = (I32)*s;
3280af22 3142 if (PL_lex_state == LEX_NORMAL)
ff68c719 3143 s = skipspace(s);
3144
3280af22 3145 if ((PL_expect != XREF || PL_oldoldbufptr == PL_last_lop) && intuit_more(s)) {
bbce6d69 3146 char *t;
3147 if (*s == '[') {
3280af22 3148 PL_tokenbuf[0] = '@';
599cee73 3149 if (ckWARN(WARN_SYNTAX)) {
bbce6d69 3150 for(t = s + 1;
834a4ddd 3151 isSPACE(*t) || isALNUM_lazy(t) || *t == '$';
bbce6d69 3152 t++) ;
a0d0e21e 3153 if (*t++ == ',') {
3280af22
NIS
3154 PL_bufptr = skipspace(PL_bufptr);
3155 while (t < PL_bufend && *t != ']')
bbce6d69 3156 t++;
cea2e8a9 3157 Perl_warner(aTHX_ WARN_SYNTAX,
599cee73
PM
3158 "Multidimensional syntax %.*s not supported",
3159 (t - PL_bufptr) + 1, PL_bufptr);
a0d0e21e
LW
3160 }
3161 }
bbce6d69 3162 }
3163 else if (*s == '{') {
3280af22 3164 PL_tokenbuf[0] = '%';
599cee73 3165 if (ckWARN(WARN_SYNTAX) && strEQ(PL_tokenbuf+1, "SIG") &&
bbce6d69 3166 (t = strchr(s, '}')) && (t = strchr(t, '=')))
3167 {
3280af22 3168 char tmpbuf[sizeof PL_tokenbuf];
a0d0e21e
LW
3169 STRLEN len;
3170 for (t++; isSPACE(*t); t++) ;
834a4ddd 3171 if (isIDFIRST_lazy(t)) {
8903cb82 3172 t = scan_word(t, tmpbuf, sizeof tmpbuf, TRUE, &len);
59a6d928 3173 for (; isSPACE(*t); t++) ;
864dbfa3 3174 if (*t == ';' && get_cv(tmpbuf, FALSE))
cea2e8a9 3175 Perl_warner(aTHX_ WARN_SYNTAX,
599cee73 3176 "You need to quote \"%s\"", tmpbuf);
748a9306 3177 }
93a17b20
LW
3178 }
3179 }
2f3197b3 3180 }
bbce6d69 3181
3280af22 3182 PL_expect = XOPERATOR;
69d2bceb 3183 if (PL_lex_state == LEX_NORMAL && isSPACE((char)tmp)) {
3280af22
NIS
3184 bool islop = (PL_last_lop == PL_oldoldbufptr);
3185 if (!islop || PL_last_lop_op == OP_GREPSTART)
3186 PL_expect = XOPERATOR;
bbce6d69 3187 else if (strchr("$@\"'`q", *s))
3280af22 3188 PL_expect = XTERM; /* e.g. print $fh "foo" */
834a4ddd 3189 else if (strchr("&*<%", *s) && isIDFIRST_lazy(s+1))
3280af22 3190 PL_expect = XTERM; /* e.g. print $fh &sub */
834a4ddd 3191 else if (isIDFIRST_lazy(s)) {
3280af22 3192 char tmpbuf[sizeof PL_tokenbuf];
8903cb82 3193 scan_word(s, tmpbuf, sizeof tmpbuf, TRUE, &len);
84902520
TB
3194 if (tmp = keyword(tmpbuf, len)) {
3195 /* binary operators exclude handle interpretations */
3196 switch (tmp) {
3197 case -KEY_x:
3198 case -KEY_eq:
3199 case -KEY_ne:
3200 case -KEY_gt:
3201 case -KEY_lt:
3202 case -KEY_ge:
3203 case -KEY_le:
3204 case -KEY_cmp:
3205 break;
3206 default:
3280af22 3207 PL_expect = XTERM; /* e.g. print $fh length() */
84902520
TB
3208 break;
3209 }
3210 }
68dc0745 3211 else {
3212 GV *gv = gv_fetchpv(tmpbuf, FALSE, SVt_PVCV);
3213 if (gv && GvCVu(gv))
3280af22 3214 PL_expect = XTERM; /* e.g. print $fh subr() */
93a17b20 3215 }
93a17b20 3216 }
bbce6d69 3217 else if (isDIGIT(*s))
3280af22 3218 PL_expect = XTERM; /* e.g. print $fh 3 */
bbce6d69 3219 else if (*s == '.' && isDIGIT(s[1]))
3280af22 3220 PL_expect = XTERM; /* e.g. print $fh .3 */
e0587a03 3221 else if (strchr("/?-+", *s) && !isSPACE(s[1]) && s[1] != '=')
3280af22 3222 PL_expect = XTERM; /* e.g. print $fh -1 */
e0587a03 3223 else if (*s == '<' && s[1] == '<' && !isSPACE(s[2]) && s[2] != '=')
3280af22 3224 PL_expect = XTERM; /* print $fh <<"EOF" */
bbce6d69 3225 }
3280af22 3226 PL_pending_ident = '$';
79072805 3227 TOKEN('$');
378cc40b
LW
3228
3229 case '@':
3280af22 3230 if (PL_expect == XOPERATOR)
bbce6d69 3231 no_op("Array", s);
3280af22
NIS
3232 PL_tokenbuf[0] = '@';
3233 s = scan_ident(s, PL_bufend, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1, FALSE);
3234 if (!PL_tokenbuf[1]) {
3235 if (s == PL_bufend)
bbce6d69 3236 yyerror("Final @ should be \\@ or @name");
3237 PREREF('@');
3238 }
3280af22 3239 if (PL_lex_state == LEX_NORMAL)
ff68c719 3240 s = skipspace(s);
3280af22 3241 if ((PL_expect != XREF || PL_oldoldbufptr == PL_last_lop) && intuit_more(s)) {
bbce6d69 3242 if (*s == '{')
3280af22 3243 PL_tokenbuf[0] = '%';
a0d0e21e
LW
3244
3245 /* Warn about @ where they meant $. */
599cee73 3246 if (ckWARN(WARN_SYNTAX)) {
a0d0e21e
LW
3247 if (*s == '[' || *s == '{') {
3248 char *t = s + 1;
834a4ddd 3249 while (*t && (isALNUM_lazy(t) || strchr(" \t$#+-'\"", *t)))
a0d0e21e
LW
3250 t++;
3251 if (*t == '}' || *t == ']') {
3252 t++;
3280af22 3253 PL_bufptr = skipspace(PL_bufptr);
cea2e8a9 3254 Perl_warner(aTHX_ WARN_SYNTAX,
599cee73 3255 "Scalar value %.*s better written as $%.*s",
3280af22 3256 t-PL_bufptr, PL_bufptr, t-PL_bufptr-1, PL_bufptr+1);
a0d0e21e 3257 }
93a17b20
LW
3258 }
3259 }
463ee0b2 3260 }
3280af22 3261 PL_pending_ident = '@';
79072805 3262 TERM('@');
378cc40b
LW
3263
3264 case '/': /* may either be division or pattern */
3265 case '?': /* may either be conditional or pattern */
3280af22 3266 if (PL_expect != XOPERATOR) {
c277df42 3267 /* Disable warning on "study /blah/" */
3280af22
NIS
3268 if (PL_oldoldbufptr == PL_last_uni
3269 && (*PL_last_uni != 's' || s - PL_last_uni < 5
834a4ddd 3270 || memNE(PL_last_uni, "study", 5) || isALNUM_lazy(PL_last_uni+5)))
c277df42 3271 check_uni();
8782bef2 3272 s = scan_pat(s,OP_MATCH);
79072805 3273 TERM(sublex_start());
378cc40b
LW
3274 }
3275 tmp = *s++;
a687059c 3276 if (tmp == '/')
79072805 3277 Mop(OP_DIVIDE);
378cc40b
LW
3278 OPERATOR(tmp);
3279
3280 case '.':
51882d45
GS
3281 if (PL_lex_formbrack && PL_lex_brackets == PL_lex_formbrack
3282#ifdef PERL_STRICT_CR
3283 && s[1] == '\n'
3284#else
3285 && (s[1] == '\n' || (s[1] == '\r' && s[2] == '\n'))
3286#endif
3287 && (s == PL_linestart || s[-1] == '\n') )
3288 {
3280af22
NIS
3289 PL_lex_formbrack = 0;
3290 PL_expect = XSTATE;
79072805
LW
3291 goto rightbracket;
3292 }
3280af22 3293 if (PL_expect == XOPERATOR || !isDIGIT(s[1])) {
378cc40b 3294 tmp = *s++;
a687059c
LW
3295 if (*s == tmp) {
3296 s++;
2f3197b3
LW
3297 if (*s == tmp) {
3298 s++;
79072805 3299 yylval.ival = OPf_SPECIAL;
2f3197b3
LW
3300 }
3301 else
79072805 3302 yylval.ival = 0;
378cc40b 3303 OPERATOR(DOTDOT);
a687059c 3304 }
3280af22 3305 if (PL_expect != XOPERATOR)
2f3197b3 3306 check_uni();
79072805 3307 Aop(OP_CONCAT);
378cc40b
LW
3308 }
3309 /* FALL THROUGH */
3310 case '0': case '1': case '2': case '3': case '4':
3311 case '5': case '6': case '7': case '8': case '9':
79072805 3312 s = scan_num(s);
3280af22 3313 if (PL_expect == XOPERATOR)
8990e307 3314 no_op("Number",s);
79072805
LW
3315 TERM(THING);
3316
3317 case '\'':
09bef843 3318 s = scan_str(s,FALSE,FALSE);
3280af22
NIS
3319 if (PL_expect == XOPERATOR) {
3320 if (PL_lex_formbrack && PL_lex_brackets == PL_lex_formbrack) {
3321 PL_expect = XTERM;
a0d0e21e
LW
3322 depcom();
3323 return ','; /* grandfather non-comma-format format */
3324 }
463ee0b2 3325 else
8990e307 3326 no_op("String",s);
463ee0b2 3327 }
79072805 3328 if (!s)
85e6fe83 3329 missingterm((char*)0);
79072805
LW
3330 yylval.ival = OP_CONST;
3331 TERM(sublex_start());
3332
3333 case '"':
09bef843 3334 s = scan_str(s,FALSE,FALSE);
3280af22
NIS
3335 if (PL_expect == XOPERATOR) {
3336 if (PL_lex_formbrack && PL_lex_brackets == PL_lex_formbrack) {
3337 PL_expect = XTERM;
a0d0e21e
LW
3338 depcom();
3339 return ','; /* grandfather non-comma-format format */
3340 }
463ee0b2 3341 else
8990e307 3342 no_op("String",s);
463ee0b2 3343 }
79072805 3344 if (!s)
85e6fe83 3345 missingterm((char*)0);
4633a7c4 3346 yylval.ival = OP_CONST;
3280af22 3347 for (d = SvPV(PL_lex_stuff, len); len; len--, d++) {
a0ed51b3 3348 if (*d == '$' || *d == '@' || *d == '\\' || *d & 0x80) {
4633a7c4
LW
3349 yylval.ival = OP_STRINGIFY;
3350 break;
3351 }
3352 }
79072805
LW
3353 TERM(sublex_start());
3354
3355 case '`':
09bef843 3356 s = scan_str(s,FALSE,FALSE);
3280af22 3357 if (PL_expect == XOPERATOR)
8990e307 3358 no_op("Backticks",s);
79072805 3359 if (!s)
85e6fe83 3360 missingterm((char*)0);
79072805
LW
3361 yylval.ival = OP_BACKTICK;
3362 set_csh();
3363 TERM(sublex_start());
3364
3365 case '\\':
3366 s++;
599cee73 3367 if (ckWARN(WARN_SYNTAX) && PL_lex_inwhat && isDIGIT(*s))
cea2e8a9 3368 Perl_warner(aTHX_ WARN_SYNTAX,"Can't use \\%c to mean $%c in expression",
599cee73 3369 *s, *s);
3280af22 3370 if (PL_expect == XOPERATOR)
8990e307 3371 no_op("Backslash",s);
79072805
LW
3372 OPERATOR(REFGEN);
3373
3374 case 'x':
3280af22 3375 if (isDIGIT(s[1]) && PL_expect == XOPERATOR) {
79072805
LW
3376 s++;
3377 Mop(OP_REPEAT);
2f3197b3 3378 }
79072805
LW
3379 goto keylookup;
3380
378cc40b 3381 case '_':
79072805
LW
3382 case 'a': case 'A':
3383 case 'b': case 'B':
3384 case 'c': case 'C':
3385 case 'd': case 'D':
3386 case 'e': case 'E':
3387 case 'f': case 'F':
3388 case 'g': case 'G':
3389 case 'h': case 'H':
3390 case 'i': case 'I':
3391 case 'j': case 'J':
3392 case 'k': case 'K':
3393 case 'l': case 'L':
3394 case 'm': case 'M':
3395 case 'n': case 'N':
3396 case 'o': case 'O':
3397 case 'p': case 'P':
3398 case 'q': case 'Q':
3399 case 'r': case 'R':
3400 case 's': case 'S':
3401 case 't': case 'T':
3402 case 'u': case 'U':
3403 case 'v': case 'V':
3404 case 'w': case 'W':
3405 case 'X':
3406 case 'y': case 'Y':
3407 case 'z': case 'Z':
3408
49dc05e3 3409 keylookup: {
2d8e6c8d 3410 STRLEN n_a;
161b471a
NIS
3411 gv = Nullgv;
3412 gvp = 0;
49dc05e3 3413
3280af22
NIS
3414 PL_bufptr = s;
3415 s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, FALSE, &len);
8ebc5c01 3416
3417 /* Some keywords can be followed by any delimiter, including ':' */
3280af22
NIS
3418 tmp = (len == 1 && strchr("msyq", PL_tokenbuf[0]) ||
3419 len == 2 && ((PL_tokenbuf[0] == 't' && PL_tokenbuf[1] == 'r') ||
3420 (PL_tokenbuf[0] == 'q' &&
3421 strchr("qwxr", PL_tokenbuf[1]))));
8ebc5c01 3422
3423 /* x::* is just a word, unless x is "CORE" */
3280af22 3424 if (!tmp && *s == ':' && s[1] == ':' && strNE(PL_tokenbuf, "CORE"))
4633a7c4
LW
3425 goto just_a_word;
3426
3643fb5f 3427 d = s;
3280af22 3428 while (d < PL_bufend && isSPACE(*d))
3643fb5f
CS
3429 d++; /* no comments skipped here, or s### is misparsed */
3430
3431 /* Is this a label? */
3280af22
NIS
3432 if (!tmp && PL_expect == XSTATE
3433 && d < PL_bufend && *d == ':' && *(d + 1) != ':') {
8ebc5c01 3434 s = d + 1;
3280af22 3435 yylval.pval = savepv(PL_tokenbuf);
8ebc5c01 3436 CLINE;
3437 TOKEN(LABEL);
3643fb5f
CS
3438 }
3439
3440 /* Check for keywords */
3280af22 3441 tmp = keyword(PL_tokenbuf, len);
748a9306
LW
3442
3443 /* Is this a word before a => operator? */
748a9306
LW
3444 if (strnEQ(d,"=>",2)) {
3445 CLINE;
3280af22 3446 yylval.opval = (OP*)newSVOP(OP_CONST, 0, newSVpv(PL_tokenbuf,0));
748a9306
LW
3447 yylval.opval->op_private = OPpCONST_BARE;
3448 TERM(WORD);
3449 }
3450
a0d0e21e 3451 if (tmp < 0) { /* second-class keyword? */
56f7f34b
CS
3452 GV *ogv = Nullgv; /* override (winner) */
3453 GV *hgv = Nullgv; /* hidden (loser) */
3280af22 3454 if (PL_expect != XOPERATOR && (*s != ':' || s[1] != ':')) {
56f7f34b 3455 CV *cv;
3280af22 3456 if ((gv = gv_fetchpv(PL_tokenbuf, FALSE, SVt_PVCV)) &&
56f7f34b
CS
3457 (cv = GvCVu(gv)))
3458 {
3459 if (GvIMPORTED_CV(gv))
3460 ogv = gv;
3461 else if (! CvMETHOD(cv))
3462 hgv = gv;
3463 }
3464 if (!ogv &&
3280af22
NIS
3465 (gvp = (GV**)hv_fetch(PL_globalstash,PL_tokenbuf,len,FALSE)) &&
3466 (gv = *gvp) != (GV*)&PL_sv_undef &&
56f7f34b
CS
3467 GvCVu(gv) && GvIMPORTED_CV(gv))
3468 {
3469 ogv = gv;
3470 }
3471 }
3472 if (ogv) {
3473 tmp = 0; /* overridden by import or by GLOBAL */
6e7b2336
GS
3474 }
3475 else if (gv && !gvp
3476 && -tmp==KEY_lock /* XXX generalizable kludge */
3280af22 3477 && !hv_fetch(GvHVn(PL_incgv), "Thread.pm", 9, FALSE))
6e7b2336
GS
3478 {
3479 tmp = 0; /* any sub overrides "weak" keyword */
a0d0e21e 3480 }
56f7f34b
CS
3481 else { /* no override */
3482 tmp = -tmp;
3483 gv = Nullgv;
3484 gvp = 0;
4944e2f7
GS
3485 if (ckWARN(WARN_AMBIGUOUS) && hgv
3486 && tmp != KEY_x && tmp != KEY_CORE) /* never ambiguous */
cea2e8a9 3487 Perl_warner(aTHX_ WARN_AMBIGUOUS,
599cee73 3488 "Ambiguous call resolved as CORE::%s(), %s",
2f3ca594 3489 GvENAME(hgv), "qualify as such or use &");
49dc05e3 3490 }
a0d0e21e
LW
3491 }
3492
3493 reserved_word:
3494 switch (tmp) {
79072805
LW
3495
3496 default: /* not a keyword */
93a17b20 3497 just_a_word: {
96e4d5b1 3498 SV *sv;
3280af22 3499 char lastchar = (PL_bufptr == PL_oldoldbufptr ? 0 : PL_bufptr[-1]);
8990e307
LW
3500
3501 /* Get the rest if it looks like a package qualifier */
3502
a0d0e21e 3503 if (*s == '\'' || *s == ':' && s[1] == ':') {
c3e0f903 3504 STRLEN morelen;
3280af22 3505 s = scan_word(s, PL_tokenbuf + len, sizeof PL_tokenbuf - len,
c3e0f903
GS
3506 TRUE, &morelen);
3507 if (!morelen)
cea2e8a9 3508 Perl_croak(aTHX_ "Bad name after %s%s", PL_tokenbuf,
ec2ab091 3509 *s == '\'' ? "'" : "::");
c3e0f903 3510 len += morelen;
a0d0e21e 3511 }
8990e307 3512
3280af22
NIS
3513 if (PL_expect == XOPERATOR) {
3514 if (PL_bufptr == PL_linestart) {
3515 PL_curcop->cop_line--;
cea2e8a9 3516 Perl_warner(aTHX_ WARN_SEMICOLON, PL_warn_nosemi);
3280af22 3517 PL_curcop->cop_line++;
463ee0b2
LW
3518 }
3519 else
54310121 3520 no_op("Bareword",s);
463ee0b2 3521 }
8990e307 3522
c3e0f903
GS
3523 /* Look for a subroutine with this name in current package,
3524 unless name is "Foo::", in which case Foo is a bearword
3525 (and a package name). */
3526
3527 if (len > 2 &&
3280af22 3528 PL_tokenbuf[len - 2] == ':' && PL_tokenbuf[len - 1] == ':')
c3e0f903 3529 {
599cee73 3530 if (ckWARN(WARN_UNSAFE) && ! gv_fetchpv(PL_tokenbuf, FALSE, SVt_PVHV))
cea2e8a9 3531 Perl_warner(aTHX_ WARN_UNSAFE,
599cee73 3532 "Bareword \"%s\" refers to nonexistent package",
3280af22 3533 PL_tokenbuf);
c3e0f903 3534 len -= 2;
3280af22 3535 PL_tokenbuf[len] = '\0';
c3e0f903
GS
3536 gv = Nullgv;
3537 gvp = 0;
3538 }
3539 else {
3540 len = 0;
3541 if (!gv)
3280af22 3542 gv = gv_fetchpv(PL_tokenbuf, FALSE, SVt_PVCV);
c3e0f903
GS
3543 }
3544
3545 /* if we saw a global override before, get the right name */
8990e307 3546
49dc05e3 3547 if (gvp) {
79cb57f6 3548 sv = newSVpvn("CORE::GLOBAL::",14);
3280af22 3549 sv_catpv(sv,PL_tokenbuf);
49dc05e3
GS
3550 }
3551 else
3280af22 3552 sv = newSVpv(PL_tokenbuf,0);
8990e307 3553
a0d0e21e
LW
3554 /* Presume this is going to be a bareword of some sort. */
3555
3556 CLINE;
49dc05e3 3557 yylval.opval = (OP*)newSVOP(OP_CONST, 0, sv);
a0d0e21e
LW
3558 yylval.opval->op_private = OPpCONST_BARE;
3559
c3e0f903
GS
3560 /* And if "Foo::", then that's what it certainly is. */
3561
3562 if (len)
3563 goto safe_bareword;
3564
8990e307
LW
3565 /* See if it's the indirect object for a list operator. */
3566
3280af22
NIS
3567 if (PL_oldoldbufptr &&
3568 PL_oldoldbufptr < PL_bufptr &&
3569 (PL_oldoldbufptr == PL_last_lop || PL_oldoldbufptr == PL_last_uni) &&
a0d0e21e 3570 /* NO SKIPSPACE BEFORE HERE! */
a9ef352a
GS
3571 (PL_expect == XREF ||
3572 ((PL_opargs[PL_last_lop_op] >> OASHIFT)& 7) == OA_FILEREF))
a0d0e21e 3573 {
748a9306
LW
3574 bool immediate_paren = *s == '(';
3575
a0d0e21e
LW
3576 /* (Now we can afford to cross potential line boundary.) */
3577 s = skipspace(s);
3578
3579 /* Two barewords in a row may indicate method call. */
3580
834a4ddd 3581 if ((isIDFIRST_lazy(s) || *s == '$') && (tmp=intuit_method(s,gv)))
a0d0e21e
LW
3582 return tmp;
3583
3584 /* If not a declared subroutine, it's an indirect object. */
3585 /* (But it's an indir obj regardless for sort.) */
3586
3280af22 3587 if ((PL_last_lop_op == OP_SORT ||
a9ef352a
GS
3588 (!immediate_paren && (!gv || !GvCVu(gv)))) &&
3589 (PL_last_lop_op != OP_MAPSTART &&
3590 PL_last_lop_op != OP_GREPSTART))
3591 {
3280af22 3592 PL_expect = (PL_last_lop == PL_oldoldbufptr) ? XTERM : XOPERATOR;
748a9306 3593 goto bareword;
93a17b20
LW
3594 }
3595 }
8990e307
LW
3596
3597 /* If followed by a paren, it's certainly a subroutine. */
3598
3280af22 3599 PL_expect = XOPERATOR;
8990e307 3600 s = skipspace(s);
93a17b20 3601 if (*s == '(') {
79072805 3602 CLINE;
96e4d5b1 3603 if (gv && GvCVu(gv)) {
3604 for (d = s + 1; *d == ' ' || *d == '\t'; d++) ;
7a52d87a 3605 if (*d == ')' && (sv = cv_const_sv(GvCV(gv)))) {
96e4d5b1 3606 s = d + 1;
3607 goto its_constant;
3608 }
3609 }
3280af22
NIS
3610 PL_nextval[PL_nexttoke].opval = yylval.opval;
3611 PL_expect = XOPERATOR;
93a17b20 3612 force_next(WORD);
c07a80fd 3613 yylval.ival = 0;
463ee0b2 3614 TOKEN('&');
79072805 3615 }
93a17b20 3616
a0d0e21e 3617 /* If followed by var or block, call it a method (unless sub) */
8990e307 3618
8ebc5c01 3619 if ((*s == '$' || *s == '{') && (!gv || !GvCVu(gv))) {
3280af22
NIS
3620 PL_last_lop = PL_oldbufptr;
3621 PL_last_lop_op = OP_METHOD;
93a17b20 3622 PREBLOCK(METHOD);
463ee0b2
LW
3623 }
3624
8990e307
LW
3625 /* If followed by a bareword, see if it looks like indir obj. */
3626
834a4ddd 3627 if ((isIDFIRST_lazy(s) || *s == '$') && (tmp = intuit_method(s,gv)))
a0d0e21e 3628 return tmp;
93a17b20 3629
8990e307
LW
3630 /* Not a method, so call it a subroutine (if defined) */
3631
8ebc5c01 3632 if (gv && GvCVu(gv)) {
46fc3d4c 3633 CV* cv;
0453d815
PM
3634 if (lastchar == '-' && ckWARN_d(WARN_AMBIGUOUS))
3635 Perl_warner(aTHX_ WARN_AMBIGUOUS,
3636 "Ambiguous use of -%s resolved as -&%s()",
3280af22 3637 PL_tokenbuf, PL_tokenbuf);
89bfa8cd 3638 /* Check for a constant sub */
46fc3d4c 3639 cv = GvCV(gv);
96e4d5b1 3640 if ((sv = cv_const_sv(cv))) {
3641 its_constant:
3642 SvREFCNT_dec(((SVOP*)yylval.opval)->op_sv);
3643 ((SVOP*)yylval.opval)->op_sv = SvREFCNT_inc(sv);
3644 yylval.opval->op_private = 0;
3645 TOKEN(WORD);
89bfa8cd 3646 }
3647
a5f75d66
AD
3648 /* Resolve to GV now. */
3649 op_free(yylval.opval);
3650 yylval.opval = newCVREF(0, newGVOP(OP_GV, 0, gv));
9675f7ac 3651 yylval.opval->op_private |= OPpENTERSUB_NOPAREN;
7a52d87a 3652 PL_last_lop = PL_oldbufptr;
bf848113 3653 PL_last_lop_op = OP_ENTERSUB;
4633a7c4
LW
3654 /* Is there a prototype? */
3655 if (SvPOK(cv)) {
3656 STRLEN len;
7a52d87a 3657 char *proto = SvPV((SV*)cv, len);
4633a7c4
LW
3658 if (!len)
3659 TERM(FUNC0SUB);
7a52d87a 3660 if (strEQ(proto, "$"))
4633a7c4 3661 OPERATOR(UNIOPSUB);
7a52d87a 3662 if (*proto == '&' && *s == '{') {
3280af22 3663 sv_setpv(PL_subname,"__ANON__");
4633a7c4
LW
3664 PREBLOCK(LSTOPSUB);
3665 }
a9ef352a 3666 }
3280af22
NIS
3667 PL_nextval[PL_nexttoke].opval = yylval.opval;
3668 PL_expect = XTERM;
8990e307
LW
3669 force_next(WORD);
3670 TOKEN(NOAMP);
3671 }
748a9306 3672
8990e307
LW
3673 /* Call it a bare word */
3674
5603f27d
GS
3675 if (PL_hints & HINT_STRICT_SUBS)
3676 yylval.opval->op_private |= OPpCONST_STRICT;
3677 else {
3678 bareword:
3679 if (ckWARN(WARN_RESERVED)) {
3680 if (lastchar != '-') {
3681 for (d = PL_tokenbuf; *d && isLOWER(*d); d++) ;
3682 if (!*d)
cea2e8a9 3683 Perl_warner(aTHX_ WARN_RESERVED, PL_warn_reserved,
5603f27d
GS
3684 PL_tokenbuf);
3685 }
748a9306
LW
3686 }
3687 }
c3e0f903
GS
3688
3689 safe_bareword:
f248d071 3690 if (lastchar && strchr("*%&", lastchar) && ckWARN_d(WARN_AMBIGUOUS)) {
0453d815
PM
3691 Perl_warner(aTHX_ WARN_AMBIGUOUS,
3692 "Operator or semicolon missing before %c%s",
3280af22 3693 lastchar, PL_tokenbuf);
0453d815
PM
3694 Perl_warner(aTHX_ WARN_AMBIGUOUS,
3695 "Ambiguous use of %c resolved as operator %c",
748a9306
LW
3696 lastchar, lastchar);
3697 }
93a17b20 3698 TOKEN(WORD);
79072805 3699 }
79072805 3700
68dc0745 3701 case KEY___FILE__:
46fc3d4c 3702 yylval.opval = (OP*)newSVOP(OP_CONST, 0,
3280af22 3703 newSVsv(GvSV(PL_curcop->cop_filegv)));
46fc3d4c 3704 TERM(THING);
3705
79072805 3706 case KEY___LINE__:
cf2093f6
JH
3707#ifdef IV_IS_QUAD
3708 yylval.opval = (OP*)newSVOP(OP_CONST, 0,
3709 Perl_newSVpvf(aTHX_ "%" PERL_PRId64, (IV)PL_curcop->cop_line));
3710#else
3711 yylval.opval = (OP*)newSVOP(OP_CONST, 0,
3712 Perl_newSVpvf(aTHX_ "%ld", (long)PL_curcop->cop_line));
3713#endif
79072805 3714 TERM(THING);
68dc0745 3715
3716 case KEY___PACKAGE__:
3717 yylval.opval = (OP*)newSVOP(OP_CONST, 0,
3280af22
NIS
3718 (PL_curstash
3719 ? newSVsv(PL_curstname)
3720 : &PL_sv_undef));
79072805 3721 TERM(THING);
79072805 3722
e50aee73 3723 case KEY___DATA__:
79072805
LW
3724 case KEY___END__: {
3725 GV *gv;
79072805
LW
3726
3727 /*SUPPRESS 560*/
3280af22 3728 if (PL_rsfp && (!PL_in_eval || PL_tokenbuf[2] == 'D')) {
e50aee73 3729 char *pname = "main";
3280af22
NIS
3730 if (PL_tokenbuf[2] == 'D')
3731 pname = HvNAME(PL_curstash ? PL_curstash : PL_defstash);
cea2e8a9 3732 gv = gv_fetchpv(Perl_form(aTHX_ "%s::DATA", pname), TRUE, SVt_PVIO);
a5f75d66 3733 GvMULTI_on(gv);
79072805 3734 if (!GvIO(gv))
a0d0e21e 3735 GvIOp(gv) = newIO();
3280af22 3736 IoIFP(GvIOp(gv)) = PL_rsfp;
a0d0e21e
LW
3737#if defined(HAS_FCNTL) && defined(F_SETFD)
3738 {
3280af22 3739 int fd = PerlIO_fileno(PL_rsfp);
a0d0e21e
LW
3740 fcntl(fd,F_SETFD,fd >= 3);
3741 }
79072805 3742#endif
fd049845 3743 /* Mark this internal pseudo-handle as clean */
3744 IoFLAGS(GvIOp(gv)) |= IOf_UNTAINT;
3280af22 3745 if (PL_preprocess)
a0d0e21e 3746 IoTYPE(GvIOp(gv)) = '|';
3280af22 3747 else if ((PerlIO*)PL_rsfp == PerlIO_stdin())
a0d0e21e 3748 IoTYPE(GvIOp(gv)) = '-';
79072805 3749 else
a0d0e21e 3750 IoTYPE(GvIOp(gv)) = '<';
3280af22 3751 PL_rsfp = Nullfp;
79072805
LW
3752 }
3753 goto fake_eof;
e929a76b 3754 }
de3bb511 3755
8990e307 3756 case KEY_AUTOLOAD:
ed6116ce 3757 case KEY_DESTROY:
79072805
LW
3758 case KEY_BEGIN:
3759 case KEY_END:
7d07dbc2 3760 case KEY_INIT:
3280af22
NIS
3761 if (PL_expect == XSTATE) {
3762 s = PL_bufptr;
93a17b20 3763 goto really_sub;
79072805
LW
3764 }
3765 goto just_a_word;
3766
a0d0e21e
LW
3767 case KEY_CORE:
3768 if (*s == ':' && s[1] == ':') {
3769 s += 2;
748a9306 3770 d = s;
3280af22
NIS
3771 s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, FALSE, &len);
3772 tmp = keyword(PL_tokenbuf, len);
a0d0e21e
LW
3773 if (tmp < 0)
3774 tmp = -tmp;
3775 goto reserved_word;
3776 }
3777 goto just_a_word;
3778
463ee0b2
LW
3779 case KEY_abs:
3780 UNI(OP_ABS);
3781
79072805
LW
3782 case KEY_alarm:
3783 UNI(OP_ALARM);
3784
3785 case KEY_accept:
a0d0e21e 3786 LOP(OP_ACCEPT,XTERM);
79072805 3787
463ee0b2
LW
3788 case KEY_and:
3789 OPERATOR(ANDOP);
3790
79072805 3791 case KEY_atan2:
a0d0e21e 3792 LOP(OP_ATAN2,XTERM);
85e6fe83 3793
79072805 3794 case KEY_bind:
a0d0e21e 3795 LOP(OP_BIND,XTERM);
79072805
LW
3796
3797 case KEY_binmode:
3798 UNI(OP_BINMODE);
3799
3800 case KEY_bless:
a0d0e21e 3801 LOP(OP_BLESS,XTERM);
79072805
LW
3802
3803 case KEY_chop:
3804 UNI(OP_CHOP);
3805
3806 case KEY_continue:
3807 PREBLOCK(CONTINUE);
3808
3809 case KEY_chdir:
85e6fe83 3810 (void)gv_fetchpv("ENV",TRUE, SVt_PVHV); /* may use HOME */
79072805
LW
3811 UNI(OP_CHDIR);
3812
3813 case KEY_close:
3814 UNI(OP_CLOSE);
3815
3816 case KEY_closedir:
3817 UNI(OP_CLOSEDIR);
3818
3819 case KEY_cmp:
3820 Eop(OP_SCMP);
3821
3822 case KEY_caller:
3823 UNI(OP_CALLER);
3824
3825 case KEY_crypt:
3826#ifdef FCRYPT
6b88bc9c 3827 if (!PL_cryptseen++)
de3bb511 3828 init_des();
a687059c 3829#endif
a0d0e21e 3830 LOP(OP_CRYPT,XTERM);
79072805
LW
3831
3832 case KEY_chmod:
599cee73 3833 if (ckWARN(WARN_OCTAL)) {
3280af22 3834 for (d = s; d < PL_bufend && (isSPACE(*d) || *d == '('); d++) ;
748a9306 3835 if (*d != '0' && isDIGIT(*d))
4438c4b7
JH
3836 Perl_warner(aTHX_ WARN_OCTAL,
3837 "chmod: mode argument is missing initial 0");
748a9306 3838 }
a0d0e21e 3839 LOP(OP_CHMOD,XTERM);
79072805
LW
3840
3841 case KEY_chown:
a0d0e21e 3842 LOP(OP_CHOWN,XTERM);
79072805
LW
3843
3844 case KEY_connect:
a0d0e21e 3845 LOP(OP_CONNECT,XTERM);
79072805 3846
463ee0b2
LW
3847 case KEY_chr:
3848 UNI(OP_CHR);
3849
79072805
LW
3850 case KEY_cos:
3851 UNI(OP_COS);
3852
3853 case KEY_chroot:
3854 UNI(OP_CHROOT);
3855
3856 case KEY_do:
3857 s = skipspace(s);
3858 if (*s == '{')
a0d0e21e 3859 PRETERMBLOCK(DO);
79072805 3860 if (*s != '\'')
a0d0e21e 3861 s = force_word(s,WORD,FALSE,TRUE,FALSE);
378cc40b 3862 OPERATOR(DO);
79072805
LW
3863
3864 case KEY_die:
3280af22 3865 PL_hints |= HINT_BLOCK_SCOPE;
a0d0e21e 3866 LOP(OP_DIE,XTERM);
79072805
LW
3867
3868 case KEY_defined:
3869 UNI(OP_DEFINED);
3870
3871 case KEY_delete:
a0d0e21e 3872 UNI(OP_DELETE);
79072805
LW
3873
3874 case KEY_dbmopen:
a0d0e21e
LW
3875 gv_fetchpv("AnyDBM_File::ISA", GV_ADDMULTI, SVt_PVAV);
3876 LOP(OP_DBMOPEN,XTERM);
79072805
LW
3877
3878 case KEY_dbmclose:
3879 UNI(OP_DBMCLOSE);
3880
3881 case KEY_dump:
a0d0e21e 3882 s = force_word(s,WORD,TRUE,FALSE,FALSE);
79072805
LW
3883 LOOPX(OP_DUMP);
3884
3885 case KEY_else:
3886 PREBLOCK(ELSE);
3887
3888 case KEY_elsif:
3280af22 3889 yylval.ival = PL_curcop->cop_line;
79072805
LW
3890 OPERATOR(ELSIF);
3891
3892 case KEY_eq:
3893 Eop(OP_SEQ);
3894
a0d0e21e
LW
3895 case KEY_exists:
3896 UNI(OP_EXISTS);
3897
79072805
LW
3898 case KEY_exit:
3899 UNI(OP_EXIT);
3900
3901 case KEY_eval:
79072805 3902 s = skipspace(s);
3280af22 3903 PL_expect = (*s == '{') ? XTERMBLOCK : XTERM;
463ee0b2 3904 UNIBRACK(OP_ENTEREVAL);
79072805
LW
3905
3906 case KEY_eof:
3907 UNI(OP_EOF);
3908
3909 case KEY_exp:
3910 UNI(OP_EXP);
3911
3912 case KEY_each:
3913 UNI(OP_EACH);
3914
3915 case KEY_exec:
3916 set_csh();
a0d0e21e 3917 LOP(OP_EXEC,XREF);
79072805
LW
3918
3919 case KEY_endhostent:
3920 FUN0(OP_EHOSTENT);
3921
3922 case KEY_endnetent:
3923 FUN0(OP_ENETENT);
3924
3925 case KEY_endservent:
3926 FUN0(OP_ESERVENT);
3927
3928 case KEY_endprotoent:
3929 FUN0(OP_EPROTOENT);
3930
3931 case KEY_endpwent:
3932 FUN0(OP_EPWENT);
3933
3934 case KEY_endgrent:
3935 FUN0(OP_EGRENT);
3936
3937 case KEY_for:
3938 case KEY_foreach:
3280af22 3939 yylval.ival = PL_curcop->cop_line;
55497cff 3940 s = skipspace(s);
834a4ddd 3941 if (PL_expect == XSTATE && isIDFIRST_lazy(s)) {
55497cff 3942 char *p = s;
3280af22 3943 if ((PL_bufend - p) >= 3 &&
55497cff 3944 strnEQ(p, "my", 2) && isSPACE(*(p + 2)))
3945 p += 2;
3946 p = skipspace(p);
834a4ddd 3947 if (isIDFIRST_lazy(p))
cea2e8a9 3948 Perl_croak(aTHX_ "Missing $ on loop variable");
55497cff 3949 }
79072805
LW
3950 OPERATOR(FOR);
3951
3952 case KEY_formline:
a0d0e21e 3953 LOP(OP_FORMLINE,XTERM);
79072805
LW
3954
3955 case KEY_fork:
3956 FUN0(OP_FORK);
3957
3958 case KEY_fcntl:
a0d0e21e 3959 LOP(OP_FCNTL,XTERM);
79072805
LW
3960
3961 case KEY_fileno:
3962 UNI(OP_FILENO);
3963
3964 case KEY_flock:
a0d0e21e 3965 LOP(OP_FLOCK,XTERM);
79072805
LW
3966
3967 case KEY_gt:
3968 Rop(OP_SGT);
3969
3970 case KEY_ge:
3971 Rop(OP_SGE);
3972
3973 case KEY_grep:
a0d0e21e 3974 LOP(OP_GREPSTART, *s == '(' ? XTERM : XREF);
79072805
LW
3975
3976 case KEY_goto:
a0d0e21e 3977 s = force_word(s,WORD,TRUE,FALSE,FALSE);
79072805
LW
3978 LOOPX(OP_GOTO);
3979
3980 case KEY_gmtime:
3981 UNI(OP_GMTIME);
3982
3983 case KEY_getc:
3984 UNI(OP_GETC);
3985
3986 case KEY_getppid:
3987 FUN0(OP_GETPPID);
3988
3989 case KEY_getpgrp:
3990 UNI(OP_GETPGRP);
3991
3992 case KEY_getpriority:
a0d0e21e 3993 LOP(OP_GETPRIORITY,XTERM);
79072805
LW
3994
3995 case KEY_getprotobyname:
3996 UNI(OP_GPBYNAME);
3997
3998 case KEY_getprotobynumber:
a0d0e21e 3999 LOP(OP_GPBYNUMBER,XTERM);
79072805
LW
4000
4001 case KEY_getprotoent:
4002 FUN0(OP_GPROTOENT);
4003
4004 case KEY_getpwent:
4005 FUN0(OP_GPWENT);
4006
4007 case KEY_getpwnam:
ff68c719 4008 UNI(OP_GPWNAM);
79072805
LW
4009
4010 case KEY_getpwuid:
ff68c719 4011 UNI(OP_GPWUID);
79072805
LW
4012
4013 case KEY_getpeername:
4014 UNI(OP_GETPEERNAME);
4015
4016 case KEY_gethostbyname:
4017 UNI(OP_GHBYNAME);
4018
4019 case KEY_gethostbyaddr:
a0d0e21e 4020 LOP(OP_GHBYADDR,XTERM);
79072805
LW
4021
4022 case KEY_gethostent:
4023 FUN0(OP_GHOSTENT);
4024
4025 case KEY_getnetbyname:
4026 UNI(OP_GNBYNAME);
4027
4028 case KEY_getnetbyaddr:
a0d0e21e 4029 LOP(OP_GNBYADDR,XTERM);
79072805
LW
4030
4031 case KEY_getnetent:
4032 FUN0(OP_GNETENT);
4033
4034 case KEY_getservbyname:
a0d0e21e 4035 LOP(OP_GSBYNAME,XTERM);
79072805
LW
4036
4037 case KEY_getservbyport:
a0d0e21e 4038 LOP(OP_GSBYPORT,XTERM);
79072805
LW
4039
4040 case KEY_getservent:
4041 FUN0(OP_GSERVENT);
4042
4043 case KEY_getsockname:
4044 UNI(OP_GETSOCKNAME);
4045
4046 case KEY_getsockopt:
a0d0e21e 4047 LOP(OP_GSOCKOPT,XTERM);
79072805
LW
4048
4049 case KEY_getgrent:
4050 FUN0(OP_GGRENT);
4051
4052 case KEY_getgrnam:
ff68c719 4053 UNI(OP_GGRNAM);
79072805
LW
4054
4055 case KEY_getgrgid:
ff68c719 4056 UNI(OP_GGRGID);
79072805
LW
4057
4058 case KEY_getlogin:
4059 FUN0(OP_GETLOGIN);
4060
93a17b20 4061 case KEY_glob:
a0d0e21e
LW
4062 set_csh();
4063 LOP(OP_GLOB,XTERM);
93a17b20 4064
79072805
LW
4065 case KEY_hex:
4066 UNI(OP_HEX);
4067
4068 case KEY_if:
3280af22 4069 yylval.ival = PL_curcop->cop_line;
79072805
LW
4070 OPERATOR(IF);
4071
4072 case KEY_index:
a0d0e21e 4073 LOP(OP_INDEX,XTERM);
79072805
LW
4074
4075 case KEY_int:
4076 UNI(OP_INT);
4077
4078 case KEY_ioctl:
a0d0e21e 4079 LOP(OP_IOCTL,XTERM);
79072805
LW
4080
4081 case KEY_join:
a0d0e21e 4082 LOP(OP_JOIN,XTERM);
79072805
LW
4083
4084 case KEY_keys:
4085 UNI(OP_KEYS);
4086
4087 case KEY_kill:
a0d0e21e 4088 LOP(OP_KILL,XTERM);
79072805
LW
4089
4090 case KEY_last:
a0d0e21e 4091 s = force_word(s,WORD,TRUE,FALSE,FALSE);
79072805 4092 LOOPX(OP_LAST);
a0d0e21e 4093
79072805
LW
4094 case KEY_lc:
4095 UNI(OP_LC);
4096
4097 case KEY_lcfirst:
4098 UNI(OP_LCFIRST);
4099
4100 case KEY_local:
09bef843 4101 yylval.ival = 0;
79072805
LW
4102 OPERATOR(LOCAL);
4103
4104 case KEY_length:
4105 UNI(OP_LENGTH);
4106
4107 case KEY_lt:
4108 Rop(OP_SLT);
4109
4110 case KEY_le:
4111 Rop(OP_SLE);
4112
4113 case KEY_localtime:
4114 UNI(OP_LOCALTIME);
4115
4116 case KEY_log:
4117 UNI(OP_LOG);
4118
4119 case KEY_link:
a0d0e21e 4120 LOP(OP_LINK,XTERM);
79072805
LW
4121
4122 case KEY_listen:
a0d0e21e 4123 LOP(OP_LISTEN,XTERM);
79072805 4124
c0329465
MB
4125 case KEY_lock:
4126 UNI(OP_LOCK);
4127
79072805
LW
4128 case KEY_lstat:
4129 UNI(OP_LSTAT);
4130
4131 case KEY_m:
8782bef2 4132 s = scan_pat(s,OP_MATCH);
79072805
LW
4133 TERM(sublex_start());
4134
a0d0e21e 4135 case KEY_map:
4e4e412b
GS
4136 LOP(OP_MAPSTART, *s == '(' ? XTERM : XREF);
4137
79072805 4138 case KEY_mkdir:
a0d0e21e 4139 LOP(OP_MKDIR,XTERM);
79072805
LW
4140
4141 case KEY_msgctl:
a0d0e21e 4142 LOP(OP_MSGCTL,XTERM);
79072805
LW
4143
4144 case KEY_msgget:
a0d0e21e 4145 LOP(OP_MSGGET,XTERM);
79072805
LW
4146
4147 case KEY_msgrcv:
a0d0e21e 4148 LOP(OP_MSGRCV,XTERM);
79072805
LW
4149
4150 case KEY_msgsnd:
a0d0e21e 4151 LOP(OP_MSGSND,XTERM);
79072805 4152
93a17b20 4153 case KEY_my:
3280af22 4154 PL_in_my = TRUE;
c750a3ec 4155 s = skipspace(s);
834a4ddd 4156 if (isIDFIRST_lazy(s)) {
3280af22 4157 s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, TRUE, &len);
09bef843
SB
4158 if (len == 3 && strnEQ(PL_tokenbuf, "sub", 3))
4159 goto really_sub;
3280af22
NIS
4160 PL_in_my_stash = gv_stashpv(PL_tokenbuf, FALSE);
4161 if (!PL_in_my_stash) {
c750a3ec 4162 char tmpbuf[1024];
3280af22
NIS
4163 PL_bufptr = s;
4164 sprintf(tmpbuf, "No such class %.1000s", PL_tokenbuf);
c750a3ec
MB
4165 yyerror(tmpbuf);
4166 }
4167 }
09bef843 4168 yylval.ival = 1;
55497cff 4169 OPERATOR(MY);
93a17b20 4170
79072805 4171 case KEY_next:
a0d0e21e 4172 s = force_word(s,WORD,TRUE,FALSE,FALSE);
79072805
LW
4173 LOOPX(OP_NEXT);
4174
4175 case KEY_ne:
4176 Eop(OP_SNE);
4177
a0d0e21e 4178 case KEY_no:
3280af22 4179 if (PL_expect != XSTATE)
a0d0e21e
LW
4180 yyerror("\"no\" not allowed in expression");
4181 s = force_word(s,WORD,FALSE,TRUE,FALSE);
89bfa8cd 4182 s = force_version(s);
a0d0e21e
LW
4183 yylval.ival = 0;
4184 OPERATOR(USE);
4185
4186 case KEY_not:
4187 OPERATOR(NOTOP);
4188
79072805 4189 case KEY_open:
93a17b20 4190 s = skipspace(s);
834a4ddd 4191 if (isIDFIRST_lazy(s)) {
93a17b20 4192 char *t;
834a4ddd 4193 for (d = s; isALNUM_lazy(d); d++) ;
93a17b20 4194 t = skipspace(d);
0453d815
PM
4195 if (strchr("|&*+-=!?:.", *t) && ckWARN_d(WARN_AMBIGUOUS))
4196 Perl_warner(aTHX_ WARN_AMBIGUOUS,
4197 "Precedence problem: open %.*s should be open(%.*s)",
4198 d-s,s, d-s,s);
93a17b20 4199 }
a0d0e21e 4200 LOP(OP_OPEN,XTERM);
79072805 4201
463ee0b2 4202 case KEY_or:
a0d0e21e 4203 yylval.ival = OP_OR;
463ee0b2
LW
4204 OPERATOR(OROP);
4205
79072805
LW
4206 case KEY_ord:
4207 UNI(OP_ORD);
4208
4209 case KEY_oct:
4210 UNI(OP_OCT);
4211
4212 case KEY_opendir:
a0d0e21e 4213 LOP(OP_OPEN_DIR,XTERM);
79072805
LW
4214
4215 case KEY_print:
3280af22 4216 checkcomma(s,PL_tokenbuf,"filehandle");
a0d0e21e 4217 LOP(OP_PRINT,XREF);
79072805
LW
4218
4219 case KEY_printf:
3280af22 4220 checkcomma(s,PL_tokenbuf,"filehandle");
a0d0e21e 4221 LOP(OP_PRTF,XREF);
79072805 4222
c07a80fd 4223 case KEY_prototype:
4224 UNI(OP_PROTOTYPE);
4225
79072805 4226 case KEY_push:
a0d0e21e 4227 LOP(OP_PUSH,XTERM);
79072805
LW
4228
4229 case KEY_pop:
4230 UNI(OP_POP);
4231
a0d0e21e
LW
4232 case KEY_pos:
4233 UNI(OP_POS);
4234
79072805 4235 case KEY_pack:
a0d0e21e 4236 LOP(OP_PACK,XTERM);
79072805
LW
4237
4238 case KEY_package:
a0d0e21e 4239 s = force_word(s,WORD,FALSE,TRUE,FALSE);
79072805
LW
4240 OPERATOR(PACKAGE);
4241
4242 case KEY_pipe:
a0d0e21e 4243 LOP(OP_PIPE_OP,XTERM);
79072805
LW
4244
4245 case KEY_q:
09bef843 4246 s = scan_str(s,FALSE,FALSE);
79072805 4247 if (!s)
85e6fe83 4248 missingterm((char*)0);
79072805
LW
4249 yylval.ival = OP_CONST;
4250 TERM(sublex_start());
4251
a0d0e21e
LW
4252 case KEY_quotemeta:
4253 UNI(OP_QUOTEMETA);
4254
8990e307 4255 case KEY_qw:
09bef843 4256 s = scan_str(s,FALSE,FALSE);
8990e307 4257 if (!s)
85e6fe83 4258 missingterm((char*)0);
8127e0e3
GS
4259 force_next(')');
4260 if (SvCUR(PL_lex_stuff)) {
4261 OP *words = Nullop;
4262 int warned = 0;
3280af22 4263 d = SvPV_force(PL_lex_stuff, len);
8127e0e3
GS
4264 while (len) {
4265 for (; isSPACE(*d) && len; --len, ++d) ;
4266 if (len) {
4267 char *b = d;
4268 if (!warned && ckWARN(WARN_SYNTAX)) {
4269 for (; !isSPACE(*d) && len; --len, ++d) {
4270 if (*d == ',') {
cea2e8a9 4271 Perl_warner(aTHX_ WARN_SYNTAX,
8127e0e3
GS
4272 "Possible attempt to separate words with commas");
4273 ++warned;
4274 }
4275 else if (*d == '#') {
cea2e8a9 4276 Perl_warner(aTHX_ WARN_SYNTAX,
8127e0e3
GS
4277 "Possible attempt to put comments in qw() list");
4278 ++warned;
4279 }
4280 }
4281 }
4282 else {
4283 for (; !isSPACE(*d) && len; --len, ++d) ;
4284 }
4285 words = append_elem(OP_LIST, words,
4286 newSVOP(OP_CONST, 0, newSVpvn(b, d-b)));
55497cff 4287 }
4288 }
8127e0e3
GS
4289 if (words) {
4290 PL_nextval[PL_nexttoke].opval = words;
4291 force_next(THING);
4292 }
55497cff 4293 }
8127e0e3
GS
4294 if (PL_lex_stuff)
4295 SvREFCNT_dec(PL_lex_stuff);
3280af22 4296 PL_lex_stuff = Nullsv;
3280af22 4297 PL_expect = XTERM;
8127e0e3 4298 TOKEN('(');
8990e307 4299
79072805 4300 case KEY_qq:
09bef843 4301 s = scan_str(s,FALSE,FALSE);
79072805 4302 if (!s)
85e6fe83 4303 missingterm((char*)0);
a0d0e21e 4304 yylval.ival = OP_STRINGIFY;
3280af22
NIS
4305 if (SvIVX(PL_lex_stuff) == '\'')
4306 SvIVX(PL_lex_stuff) = 0; /* qq'$foo' should intepolate */
79072805
LW
4307 TERM(sublex_start());
4308
8782bef2
GB
4309 case KEY_qr:
4310 s = scan_pat(s,OP_QR);
4311 TERM(sublex_start());
4312
79072805 4313 case KEY_qx:
09bef843 4314 s = scan_str(s,FALSE,FALSE);
79072805 4315 if (!s)
85e6fe83 4316 missingterm((char*)0);
79072805
LW
4317 yylval.ival = OP_BACKTICK;
4318 set_csh();
4319 TERM(sublex_start());
4320
4321 case KEY_return:
4322 OLDLOP(OP_RETURN);
4323
4324 case KEY_require:
3280af22 4325 *PL_tokenbuf = '\0';
a0d0e21e 4326 s = force_word(s,WORD,TRUE,TRUE,FALSE);
834a4ddd 4327 if (isIDFIRST_lazy(PL_tokenbuf))
3280af22 4328 gv_stashpvn(PL_tokenbuf, strlen(PL_tokenbuf), TRUE);
748a9306 4329 else if (*s == '<')
a0d0e21e 4330 yyerror("<> should be quotes");
463ee0b2 4331 UNI(OP_REQUIRE);
79072805
LW
4332
4333 case KEY_reset:
4334 UNI(OP_RESET);
4335
4336 case KEY_redo:
a0d0e21e 4337 s = force_word(s,WORD,TRUE,FALSE,FALSE);
79072805
LW
4338 LOOPX(OP_REDO);
4339
4340 case KEY_rename:
a0d0e21e 4341 LOP(OP_RENAME,XTERM);
79072805
LW
4342
4343 case KEY_rand:
4344 UNI(OP_RAND);
4345
4346 case KEY_rmdir:
4347 UNI(OP_RMDIR);
4348
4349 case KEY_rindex:
a0d0e21e 4350 LOP(OP_RINDEX,XTERM);
79072805
LW
4351
4352 case KEY_read:
a0d0e21e 4353 LOP(OP_READ,XTERM);
79072805
LW
4354
4355 case KEY_readdir:
4356 UNI(OP_READDIR);
4357
93a17b20
LW
4358 case KEY_readline:
4359 set_csh();
4360 UNI(OP_READLINE);
4361
4362 case KEY_readpipe:
4363 set_csh();
4364 UNI(OP_BACKTICK);
4365
79072805
LW
4366 case KEY_rewinddir:
4367 UNI(OP_REWINDDIR);
4368
4369 case KEY_recv:
a0d0e21e 4370 LOP(OP_RECV,XTERM);
79072805
LW
4371
4372 case KEY_reverse:
a0d0e21e 4373 LOP(OP_REVERSE,XTERM);
79072805
LW
4374
4375 case KEY_readlink:
4376 UNI(OP_READLINK);
4377
4378 case KEY_ref:
4379 UNI(OP_REF);
4380
4381 case KEY_s:
4382 s = scan_subst(s);
4383 if (yylval.opval)
4384 TERM(sublex_start());
4385 else
4386 TOKEN(1); /* force error */
4387
a0d0e21e
LW
4388 case KEY_chomp:
4389 UNI(OP_CHOMP);
4390
79072805
LW
4391 case KEY_scalar:
4392 UNI(OP_SCALAR);
4393
4394 case KEY_select:
a0d0e21e 4395 LOP(OP_SELECT,XTERM);
79072805
LW
4396
4397 case KEY_seek:
a0d0e21e 4398 LOP(OP_SEEK,XTERM);
79072805
LW
4399
4400 case KEY_semctl:
a0d0e21e 4401 LOP(OP_SEMCTL,XTERM);
79072805
LW
4402
4403 case KEY_semget:
a0d0e21e 4404 LOP(OP_SEMGET,XTERM);
79072805
LW
4405
4406 case KEY_semop:
a0d0e21e 4407 LOP(OP_SEMOP,XTERM);
79072805
LW
4408
4409 case KEY_send:
a0d0e21e 4410 LOP(OP_SEND,XTERM);
79072805
LW
4411
4412 case KEY_setpgrp:
a0d0e21e 4413 LOP(OP_SETPGRP,XTERM);
79072805
LW
4414
4415 case KEY_setpriority:
a0d0e21e 4416 LOP(OP_SETPRIORITY,XTERM);
79072805
LW
4417
4418 case KEY_sethostent:
ff68c719 4419 UNI(OP_SHOSTENT);
79072805
LW
4420
4421 case KEY_setnetent:
ff68c719 4422 UNI(OP_SNETENT);
79072805
LW
4423
4424 case KEY_setservent:
ff68c719 4425 UNI(OP_SSERVENT);
79072805
LW
4426
4427 case KEY_setprotoent:
ff68c719 4428 UNI(OP_SPROTOENT);
79072805
LW
4429
4430 case KEY_setpwent:
4431 FUN0(OP_SPWENT);
4432
4433 case KEY_setgrent:
4434 FUN0(OP_SGRENT);
4435
4436 case KEY_seekdir:
a0d0e21e 4437 LOP(OP_SEEKDIR,XTERM);
79072805
LW
4438
4439 case KEY_setsockopt:
a0d0e21e 4440 LOP(OP_SSOCKOPT,XTERM);
79072805
LW
4441
4442 case KEY_shift:
4443 UNI(OP_SHIFT);
4444
4445 case KEY_shmctl:
a0d0e21e 4446 LOP(OP_SHMCTL,XTERM);
79072805
LW
4447
4448 case KEY_shmget:
a0d0e21e 4449 LOP(OP_SHMGET,XTERM);
79072805
LW
4450
4451 case KEY_shmread:
a0d0e21e 4452 LOP(OP_SHMREAD,XTERM);
79072805
LW
4453
4454 case KEY_shmwrite:
a0d0e21e 4455 LOP(OP_SHMWRITE,XTERM);
79072805
LW
4456
4457 case KEY_shutdown:
a0d0e21e 4458 LOP(OP_SHUTDOWN,XTERM);
79072805
LW
4459
4460 case KEY_sin:
4461 UNI(OP_SIN);
4462
4463 case KEY_sleep:
4464 UNI(OP_SLEEP);
4465
4466 case KEY_socket:
a0d0e21e 4467 LOP(OP_SOCKET,XTERM);
79072805
LW
4468
4469 case KEY_socketpair:
a0d0e21e 4470 LOP(OP_SOCKPAIR,XTERM);
79072805
LW
4471
4472 case KEY_sort:
3280af22 4473 checkcomma(s,PL_tokenbuf,"subroutine name");
79072805
LW
4474 s = skipspace(s);
4475 if (*s == ';' || *s == ')') /* probably a close */
cea2e8a9 4476 Perl_croak(aTHX_ "sort is now a reserved word");
3280af22 4477 PL_expect = XTERM;
15f0808c 4478 s = force_word(s,WORD,TRUE,TRUE,FALSE);
a0d0e21e 4479 LOP(OP_SORT,XREF);
79072805
LW
4480
4481 case KEY_split:
a0d0e21e 4482 LOP(OP_SPLIT,XTERM);
79072805
LW
4483
4484 case KEY_sprintf:
a0d0e21e 4485 LOP(OP_SPRINTF,XTERM);
79072805
LW
4486
4487 case KEY_splice:
a0d0e21e 4488 LOP(OP_SPLICE,XTERM);
79072805
LW
4489
4490 case KEY_sqrt:
4491 UNI(OP_SQRT);
4492
4493 case KEY_srand:
4494 UNI(OP_SRAND);
4495
4496 case KEY_stat:
4497 UNI(OP_STAT);
4498
4499 case KEY_study:
3280af22 4500 PL_sawstudy++;
79072805
LW
4501 UNI(OP_STUDY);
4502
4503 case KEY_substr:
a0d0e21e 4504 LOP(OP_SUBSTR,XTERM);
79072805
LW
4505
4506 case KEY_format:
4507 case KEY_sub:
93a17b20 4508 really_sub:
09bef843 4509 {
3280af22 4510 char tmpbuf[sizeof PL_tokenbuf];
b1b65b59 4511 SSize_t tboffset;
09bef843
SB
4512 expectation attrful;
4513 bool have_name, have_proto;
4514 int key = tmp;
4515
4516 s = skipspace(s);
4517
4518 if (isIDFIRST_lazy(s) || *s == '\'' ||
4519 (*s == ':' && s[1] == ':'))
4520 {
4521 PL_expect = XBLOCK;
4522 attrful = XATTRBLOCK;
b1b65b59
JH
4523 /* remember buffer pos'n for later force_word */
4524 tboffset = s - PL_oldbufptr;
09bef843
SB
4525 d = scan_word(s, tmpbuf, sizeof tmpbuf, TRUE, &len);
4526 if (strchr(tmpbuf, ':'))
4527 sv_setpv(PL_subname, tmpbuf);
4528 else {
4529 sv_setsv(PL_subname,PL_curstname);
4530 sv_catpvn(PL_subname,"::",2);
4531 sv_catpvn(PL_subname,tmpbuf,len);
4532 }
4533 s = skipspace(d);
4534 have_name = TRUE;
4535 }
463ee0b2 4536 else {
09bef843
SB
4537 if (key == KEY_my)
4538 Perl_croak(aTHX_ "Missing name in \"my sub\"");
4539 PL_expect = XTERMBLOCK;
4540 attrful = XATTRTERM;
4541 sv_setpv(PL_subname,"?");
4542 have_name = FALSE;
463ee0b2 4543 }
4633a7c4 4544
09bef843
SB
4545 if (key == KEY_format) {
4546 if (*s == '=')
4547 PL_lex_formbrack = PL_lex_brackets + 1;
4548 if (have_name)
b1b65b59
JH
4549 (void) force_word(PL_oldbufptr + tboffset, WORD,
4550 FALSE, TRUE, TRUE);
09bef843
SB
4551 OPERATOR(FORMAT);
4552 }
79072805 4553
09bef843
SB
4554 /* Look for a prototype */
4555 if (*s == '(') {
4556 char *p;
4557
4558 s = scan_str(s,FALSE,FALSE);
4559 if (!s) {
4560 if (PL_lex_stuff)
4561 SvREFCNT_dec(PL_lex_stuff);
4562 PL_lex_stuff = Nullsv;
4563 Perl_croak(aTHX_ "Prototype not terminated");
4564 }
4565 /* strip spaces */
4566 d = SvPVX(PL_lex_stuff);
4567 tmp = 0;
4568 for (p = d; *p; ++p) {
4569 if (!isSPACE(*p))
4570 d[tmp++] = *p;
4571 }
4572 d[tmp] = '\0';
4573 SvCUR(PL_lex_stuff) = tmp;
4574 have_proto = TRUE;
68dc0745 4575
09bef843 4576 s = skipspace(s);
4633a7c4 4577 }
09bef843
SB
4578 else
4579 have_proto = FALSE;
4580
4581 if (*s == ':' && s[1] != ':')
4582 PL_expect = attrful;
4583
4584 if (have_proto) {
b1b65b59
JH
4585 PL_nextval[PL_nexttoke].opval =
4586 (OP*)newSVOP(OP_CONST, 0, PL_lex_stuff);
09bef843
SB
4587 PL_lex_stuff = Nullsv;
4588 force_next(THING);
68dc0745 4589 }
09bef843
SB
4590 if (!have_name) {
4591 sv_setpv(PL_subname,"__ANON__");
4592 TOKEN(ANONSUB);
4633a7c4 4593 }
b1b65b59
JH
4594 (void) force_word(PL_oldbufptr + tboffset, WORD,
4595 FALSE, TRUE, TRUE);
09bef843
SB
4596 if (key == KEY_my)
4597 TOKEN(MYSUB);
4598 TOKEN(SUB);
4633a7c4 4599 }
79072805
LW
4600
4601 case KEY_system:
4602 set_csh();
a0d0e21e 4603 LOP(OP_SYSTEM,XREF);
79072805
LW
4604
4605 case KEY_symlink:
a0d0e21e 4606 LOP(OP_SYMLINK,XTERM);
79072805
LW
4607
4608 case KEY_syscall:
a0d0e21e 4609 LOP(OP_SYSCALL,XTERM);
79072805 4610
c07a80fd 4611 case KEY_sysopen:
4612 LOP(OP_SYSOPEN,XTERM);
4613
137443ea 4614 case KEY_sysseek:
4615 LOP(OP_SYSSEEK,XTERM);
4616
79072805 4617 case KEY_sysread:
a0d0e21e 4618 LOP(OP_SYSREAD,XTERM);
79072805
LW
4619
4620 case KEY_syswrite:
a0d0e21e 4621 LOP(OP_SYSWRITE,XTERM);
79072805
LW
4622
4623 case KEY_tr:
4624 s = scan_trans(s);
4625 TERM(sublex_start());
4626
4627 case KEY_tell:
4628 UNI(OP_TELL);
4629
4630 case KEY_telldir:
4631 UNI(OP_TELLDIR);
4632
463ee0b2 4633 case KEY_tie:
a0d0e21e 4634 LOP(OP_TIE,XTERM);
463ee0b2 4635
c07a80fd 4636 case KEY_tied:
4637 UNI(OP_TIED);
4638
79072805
LW
4639 case KEY_time:
4640 FUN0(OP_TIME);
4641
4642 case KEY_times:
4643 FUN0(OP_TMS);
4644
4645 case KEY_truncate:
a0d0e21e 4646 LOP(OP_TRUNCATE,XTERM);
79072805
LW
4647
4648 case KEY_uc:
4649 UNI(OP_UC);
4650
4651 case KEY_ucfirst:
4652 UNI(OP_UCFIRST);
4653
463ee0b2
LW
4654 case KEY_untie:
4655 UNI(OP_UNTIE);
4656
79072805 4657 case KEY_until:
3280af22 4658 yylval.ival = PL_curcop->cop_line;
79072805
LW
4659 OPERATOR(UNTIL);
4660
4661 case KEY_unless:
3280af22 4662 yylval.ival = PL_curcop->cop_line;
79072805
LW
4663 OPERATOR(UNLESS);
4664
4665 case KEY_unlink:
a0d0e21e 4666 LOP(OP_UNLINK,XTERM);
79072805
LW
4667
4668 case KEY_undef:
4669 UNI(OP_UNDEF);
4670
4671 case KEY_unpack:
a0d0e21e 4672 LOP(OP_UNPACK,XTERM);
79072805
LW
4673
4674 case KEY_utime:
a0d0e21e 4675 LOP(OP_UTIME,XTERM);
79072805
LW
4676
4677 case KEY_umask:
599cee73 4678 if (ckWARN(WARN_OCTAL)) {
3280af22 4679 for (d = s; d < PL_bufend && (isSPACE(*d) || *d == '('); d++) ;
4438c4b7
JH
4680 if (*d != '0' && isDIGIT(*d))
4681 Perl_warner(aTHX_ WARN_OCTAL,
4682 "umask: argument is missing initial 0");
748a9306 4683 }
79072805
LW
4684 UNI(OP_UMASK);
4685
4686 case KEY_unshift:
a0d0e21e
LW
4687 LOP(OP_UNSHIFT,XTERM);
4688
4689 case KEY_use:
3280af22 4690 if (PL_expect != XSTATE)
a0d0e21e 4691 yyerror("\"use\" not allowed in expression");
89bfa8cd 4692 s = skipspace(s);
4693 if(isDIGIT(*s)) {
4694 s = force_version(s);
4695 if(*s == ';' || (s = skipspace(s), *s == ';')) {
3280af22 4696 PL_nextval[PL_nexttoke].opval = Nullop;
89bfa8cd 4697 force_next(WORD);
4698 }
4699 }
4700 else {
4701 s = force_word(s,WORD,FALSE,TRUE,FALSE);
4702 s = force_version(s);
4703 }
a0d0e21e
LW
4704 yylval.ival = 1;
4705 OPERATOR(USE);
79072805
LW
4706
4707 case KEY_values:
4708 UNI(OP_VALUES);
4709
4710 case KEY_vec:
3280af22 4711 PL_sawvec = TRUE;
a0d0e21e 4712 LOP(OP_VEC,XTERM);
79072805
LW
4713
4714 case KEY_while:
3280af22 4715 yylval.ival = PL_curcop->cop_line;
79072805
LW
4716 OPERATOR(WHILE);
4717
4718 case KEY_warn:
3280af22 4719 PL_hints |= HINT_BLOCK_SCOPE;
a0d0e21e 4720 LOP(OP_WARN,XTERM);
79072805
LW
4721
4722 case KEY_wait:
4723 FUN0(OP_WAIT);
4724
4725 case KEY_waitpid:
a0d0e21e 4726 LOP(OP_WAITPID,XTERM);
79072805
LW
4727
4728 case KEY_wantarray:
4729 FUN0(OP_WANTARRAY);
4730
4731 case KEY_write:
9d116dd7
JH
4732#ifdef EBCDIC
4733 {
4734 static char ctl_l[2];
4735
4736 if (ctl_l[0] == '\0')
4737 ctl_l[0] = toCTRL('L');
4738 gv_fetchpv(ctl_l,TRUE, SVt_PV);
4739 }
4740#else
4741 gv_fetchpv("\f",TRUE, SVt_PV); /* Make sure $^L is defined */
4742#endif
79072805
LW
4743 UNI(OP_ENTERWRITE);
4744
4745 case KEY_x:
3280af22 4746 if (PL_expect == XOPERATOR)
79072805
LW
4747 Mop(OP_REPEAT);
4748 check_uni();
4749 goto just_a_word;
4750
a0d0e21e
LW
4751 case KEY_xor:
4752 yylval.ival = OP_XOR;
4753 OPERATOR(OROP);
4754
79072805
LW
4755 case KEY_y:
4756 s = scan_trans(s);
4757 TERM(sublex_start());
4758 }
49dc05e3 4759 }}
79072805
LW
4760}
4761
4762I32
864dbfa3 4763Perl_keyword(pTHX_ register char *d, I32 len)
79072805
LW
4764{
4765 switch (*d) {
4766 case '_':
4767 if (d[1] == '_') {
a0d0e21e 4768 if (strEQ(d,"__FILE__")) return -KEY___FILE__;
68dc0745 4769 if (strEQ(d,"__LINE__")) return -KEY___LINE__;
4770 if (strEQ(d,"__PACKAGE__")) return -KEY___PACKAGE__;
e50aee73 4771 if (strEQ(d,"__DATA__")) return KEY___DATA__;
79072805
LW
4772 if (strEQ(d,"__END__")) return KEY___END__;
4773 }
4774 break;
8990e307
LW
4775 case 'A':
4776 if (strEQ(d,"AUTOLOAD")) return KEY_AUTOLOAD;
4777 break;
79072805 4778 case 'a':
463ee0b2
LW
4779 switch (len) {
4780 case 3:
a0d0e21e
LW
4781 if (strEQ(d,"and")) return -KEY_and;
4782 if (strEQ(d,"abs")) return -KEY_abs;
85e6fe83 4783 break;
463ee0b2 4784 case 5:
a0d0e21e
LW
4785 if (strEQ(d,"alarm")) return -KEY_alarm;
4786 if (strEQ(d,"atan2")) return -KEY_atan2;
463ee0b2
LW
4787 break;
4788 case 6:
a0d0e21e 4789 if (strEQ(d,"accept")) return -KEY_accept;
463ee0b2
LW
4790 break;
4791 }
79072805
LW
4792 break;
4793 case 'B':
4794 if (strEQ(d,"BEGIN")) return KEY_BEGIN;
93a17b20 4795 break;
79072805 4796 case 'b':
a0d0e21e
LW
4797 if (strEQ(d,"bless")) return -KEY_bless;
4798 if (strEQ(d,"bind")) return -KEY_bind;
4799 if (strEQ(d,"binmode")) return -KEY_binmode;
4800 break;
4801 case 'C':
4802 if (strEQ(d,"CORE")) return -KEY_CORE;
79072805
LW
4803 break;
4804 case 'c':
4805 switch (len) {
4806 case 3:
a0d0e21e
LW
4807 if (strEQ(d,"cmp")) return -KEY_cmp;
4808 if (strEQ(d,"chr")) return -KEY_chr;
4809 if (strEQ(d,"cos")) return -KEY_cos;
79072805
LW
4810 break;
4811 case 4:
4812 if (strEQ(d,"chop")) return KEY_chop;
4813 break;
4814 case 5:
a0d0e21e
LW
4815 if (strEQ(d,"close")) return -KEY_close;
4816 if (strEQ(d,"chdir")) return -KEY_chdir;
4817 if (strEQ(d,"chomp")) return KEY_chomp;
4818 if (strEQ(d,"chmod")) return -KEY_chmod;
4819 if (strEQ(d,"chown")) return -KEY_chown;
4820 if (strEQ(d,"crypt")) return -KEY_crypt;
79072805
LW
4821 break;
4822 case 6:
a0d0e21e
LW
4823 if (strEQ(d,"chroot")) return -KEY_chroot;
4824 if (strEQ(d,"caller")) return -KEY_caller;
79072805
LW
4825 break;
4826 case 7:
a0d0e21e 4827 if (strEQ(d,"connect")) return -KEY_connect;
79072805
LW
4828 break;
4829 case 8:
a0d0e21e
LW
4830 if (strEQ(d,"closedir")) return -KEY_closedir;
4831 if (strEQ(d,"continue")) return -KEY_continue;
79072805
LW
4832 break;
4833 }
4834 break;
ed6116ce
LW
4835 case 'D':
4836 if (strEQ(d,"DESTROY")) return KEY_DESTROY;
4837 break;
79072805
LW
4838 case 'd':
4839 switch (len) {
4840 case 2:
4841 if (strEQ(d,"do")) return KEY_do;
4842 break;
4843 case 3:
a0d0e21e 4844 if (strEQ(d,"die")) return -KEY_die;
79072805
LW
4845 break;
4846 case 4:
a0d0e21e 4847 if (strEQ(d,"dump")) return -KEY_dump;
79072805
LW
4848 break;
4849 case 6:
4850 if (strEQ(d,"delete")) return KEY_delete;
4851 break;
4852 case 7:
4853 if (strEQ(d,"defined")) return KEY_defined;
a0d0e21e 4854 if (strEQ(d,"dbmopen")) return -KEY_dbmopen;
79072805
LW
4855 break;
4856 case 8:
a0d0e21e 4857 if (strEQ(d,"dbmclose")) return -KEY_dbmclose;
79072805
LW
4858 break;
4859 }
4860 break;
4861 case 'E':
a0d0e21e 4862 if (strEQ(d,"EQ")) { deprecate(d); return -KEY_eq;}
79072805
LW
4863 if (strEQ(d,"END")) return KEY_END;
4864 break;
4865 case 'e':
4866 switch (len) {
4867 case 2:
a0d0e21e 4868 if (strEQ(d,"eq")) return -KEY_eq;
79072805
LW
4869 break;
4870 case 3:
a0d0e21e
LW
4871 if (strEQ(d,"eof")) return -KEY_eof;
4872 if (strEQ(d,"exp")) return -KEY_exp;
79072805
LW
4873 break;
4874 case 4:
4875 if (strEQ(d,"else")) return KEY_else;
a0d0e21e 4876 if (strEQ(d,"exit")) return -KEY_exit;
79072805 4877 if (strEQ(d,"eval")) return KEY_eval;
a0d0e21e 4878 if (strEQ(d,"exec")) return -KEY_exec;
79072805
LW
4879 if (strEQ(d,"each")) return KEY_each;
4880 break;
4881 case 5:
4882 if (strEQ(d,"elsif")) return KEY_elsif;
4883 break;
a0d0e21e
LW
4884 case 6:
4885 if (strEQ(d,"exists")) return KEY_exists;
cea2e8a9 4886 if (strEQ(d,"elseif")) Perl_warn(aTHX_ "elseif should be elsif");
a0d0e21e 4887 break;
79072805 4888 case 8:
a0d0e21e
LW
4889 if (strEQ(d,"endgrent")) return -KEY_endgrent;
4890 if (strEQ(d,"endpwent")) return -KEY_endpwent;
79072805
LW
4891 break;
4892 case 9:
a0d0e21e 4893 if (strEQ(d,"endnetent")) return -KEY_endnetent;
79072805
LW
4894 break;
4895 case 10:
a0d0e21e
LW
4896 if (strEQ(d,"endhostent")) return -KEY_endhostent;
4897 if (strEQ(d,"endservent")) return -KEY_endservent;
79072805
LW
4898 break;
4899 case 11:
a0d0e21e 4900 if (strEQ(d,"endprotoent")) return -KEY_endprotoent;
79072805 4901 break;
a687059c 4902 }
a687059c 4903 break;
79072805
LW
4904 case 'f':
4905 switch (len) {
4906 case 3:
4907 if (strEQ(d,"for")) return KEY_for;
4908 break;
4909 case 4:
a0d0e21e 4910 if (strEQ(d,"fork")) return -KEY_fork;
79072805
LW
4911 break;
4912 case 5:
a0d0e21e
LW
4913 if (strEQ(d,"fcntl")) return -KEY_fcntl;
4914 if (strEQ(d,"flock")) return -KEY_flock;
79072805
LW
4915 break;
4916 case 6:
4917 if (strEQ(d,"format")) return KEY_format;
a0d0e21e 4918 if (strEQ(d,"fileno")) return -KEY_fileno;
79072805
LW
4919 break;
4920 case 7:
4921 if (strEQ(d,"foreach")) return KEY_foreach;
4922 break;
4923 case 8:
a0d0e21e 4924 if (strEQ(d,"formline")) return -KEY_formline;
79072805 4925 break;
378cc40b 4926 }
a687059c 4927 break;
79072805
LW
4928 case 'G':
4929 if (len == 2) {
a0d0e21e
LW
4930 if (strEQ(d,"GT")) { deprecate(d); return -KEY_gt;}
4931 if (strEQ(d,"GE")) { deprecate(d); return -KEY_ge;}
9f68db38 4932 }
a687059c 4933 break;
79072805 4934 case 'g':
a687059c
LW
4935 if (strnEQ(d,"get",3)) {
4936 d += 3;
4937 if (*d == 'p') {
79072805
LW
4938 switch (len) {
4939 case 7:
a0d0e21e
LW
4940 if (strEQ(d,"ppid")) return -KEY_getppid;
4941 if (strEQ(d,"pgrp")) return -KEY_getpgrp;
79072805
LW
4942 break;
4943 case 8:
a0d0e21e
LW
4944 if (strEQ(d,"pwent")) return -KEY_getpwent;
4945 if (strEQ(d,"pwnam")) return -KEY_getpwnam;
4946 if (strEQ(d,"pwuid")) return -KEY_getpwuid;
79072805
LW
4947 break;
4948 case 11:
a0d0e21e
LW
4949 if (strEQ(d,"peername")) return -KEY_getpeername;
4950 if (strEQ(d,"protoent")) return -KEY_getprotoent;
4951 if (strEQ(d,"priority")) return -KEY_getpriority;
79072805
LW
4952 break;
4953 case 14:
a0d0e21e 4954 if (strEQ(d,"protobyname")) return -KEY_getprotobyname;
79072805
LW
4955 break;
4956 case 16:
a0d0e21e 4957 if (strEQ(d,"protobynumber"))return -KEY_getprotobynumber;
79072805
LW
4958 break;
4959 }
a687059c
LW
4960 }
4961 else if (*d == 'h') {
a0d0e21e
LW
4962 if (strEQ(d,"hostbyname")) return -KEY_gethostbyname;
4963 if (strEQ(d,"hostbyaddr")) return -KEY_gethostbyaddr;
4964 if (strEQ(d,"hostent")) return -KEY_gethostent;
a687059c
LW
4965 }
4966 else if (*d == 'n') {
a0d0e21e
LW
4967 if (strEQ(d,"netbyname")) return -KEY_getnetbyname;
4968 if (strEQ(d,"netbyaddr")) return -KEY_getnetbyaddr;
4969 if (strEQ(d,"netent")) return -KEY_getnetent;
a687059c
LW
4970 }
4971 else if (*d == 's') {
a0d0e21e
LW
4972 if (strEQ(d,"servbyname")) return -KEY_getservbyname;
4973 if (strEQ(d,"servbyport")) return -KEY_getservbyport;
4974 if (strEQ(d,"servent")) return -KEY_getservent;
4975 if (strEQ(d,"sockname")) return -KEY_getsockname;
4976 if (strEQ(d,"sockopt")) return -KEY_getsockopt;
a687059c
LW
4977 }
4978 else if (*d == 'g') {
a0d0e21e
LW
4979 if (strEQ(d,"grent")) return -KEY_getgrent;
4980 if (strEQ(d,"grnam")) return -KEY_getgrnam;
4981 if (strEQ(d,"grgid")) return -KEY_getgrgid;
a687059c
LW
4982 }
4983 else if (*d == 'l') {
a0d0e21e 4984 if (strEQ(d,"login")) return -KEY_getlogin;
a687059c 4985 }
a0d0e21e 4986 else if (strEQ(d,"c")) return -KEY_getc;
79072805 4987 break;
a687059c 4988 }
79072805
LW
4989 switch (len) {
4990 case 2:
a0d0e21e
LW
4991 if (strEQ(d,"gt")) return -KEY_gt;
4992 if (strEQ(d,"ge")) return -KEY_ge;
79072805
LW
4993 break;
4994 case 4:
4995 if (strEQ(d,"grep")) return KEY_grep;
4996 if (strEQ(d,"goto")) return KEY_goto;
fb73857a 4997 if (strEQ(d,"glob")) return KEY_glob;
79072805
LW
4998 break;
4999 case 6:
a0d0e21e 5000 if (strEQ(d,"gmtime")) return -KEY_gmtime;
79072805 5001 break;
378cc40b 5002 }
a687059c 5003 break;
79072805 5004 case 'h':
a0d0e21e 5005 if (strEQ(d,"hex")) return -KEY_hex;
a687059c 5006 break;
7d07dbc2
MB
5007 case 'I':
5008 if (strEQ(d,"INIT")) return KEY_INIT;
5009 break;
79072805
LW
5010 case 'i':
5011 switch (len) {
5012 case 2:
5013 if (strEQ(d,"if")) return KEY_if;
5014 break;
5015 case 3:
a0d0e21e 5016 if (strEQ(d,"int")) return -KEY_int;
79072805
LW
5017 break;
5018 case 5:
a0d0e21e
LW
5019 if (strEQ(d,"index")) return -KEY_index;
5020 if (strEQ(d,"ioctl")) return -KEY_ioctl;
79072805
LW
5021 break;
5022 }
a687059c 5023 break;
79072805 5024 case 'j':
a0d0e21e 5025 if (strEQ(d,"join")) return -KEY_join;
a687059c 5026 break;
79072805
LW
5027 case 'k':
5028 if (len == 4) {
5029 if (strEQ(d,"keys")) return KEY_keys;
a0d0e21e 5030 if (strEQ(d,"kill")) return -KEY_kill;
663a0e37 5031 }
79072805
LW
5032 break;
5033 case 'L':
5034 if (len == 2) {
a0d0e21e
LW
5035 if (strEQ(d,"LT")) { deprecate(d); return -KEY_lt;}
5036 if (strEQ(d,"LE")) { deprecate(d); return -KEY_le;}
378cc40b 5037 }
79072805
LW
5038 break;
5039 case 'l':
5040 switch (len) {
5041 case 2:
a0d0e21e
LW
5042 if (strEQ(d,"lt")) return -KEY_lt;
5043 if (strEQ(d,"le")) return -KEY_le;
5044 if (strEQ(d,"lc")) return -KEY_lc;
79072805
LW
5045 break;
5046 case 3:
a0d0e21e 5047 if (strEQ(d,"log")) return -KEY_log;
79072805
LW
5048 break;
5049 case 4:
5050 if (strEQ(d,"last")) return KEY_last;
a0d0e21e 5051 if (strEQ(d,"link")) return -KEY_link;
c0329465 5052 if (strEQ(d,"lock")) return -KEY_lock;
395c3793 5053 break;
79072805
LW
5054 case 5:
5055 if (strEQ(d,"local")) return KEY_local;
a0d0e21e 5056 if (strEQ(d,"lstat")) return -KEY_lstat;
79072805
LW
5057 break;
5058 case 6:
a0d0e21e
LW
5059 if (strEQ(d,"length")) return -KEY_length;
5060 if (strEQ(d,"listen")) return -KEY_listen;
79072805
LW
5061 break;
5062 case 7:
a0d0e21e 5063 if (strEQ(d,"lcfirst")) return -KEY_lcfirst;
79072805
LW
5064 break;
5065 case 9:
a0d0e21e 5066 if (strEQ(d,"localtime")) return -KEY_localtime;
395c3793
LW
5067 break;
5068 }
a687059c 5069 break;
79072805
LW
5070 case 'm':
5071 switch (len) {
5072 case 1: return KEY_m;
93a17b20
LW
5073 case 2:
5074 if (strEQ(d,"my")) return KEY_my;
5075 break;
a0d0e21e
LW
5076 case 3:
5077 if (strEQ(d,"map")) return KEY_map;
5078 break;
79072805 5079 case 5:
a0d0e21e 5080 if (strEQ(d,"mkdir")) return -KEY_mkdir;
79072805
LW
5081 break;
5082 case 6:
a0d0e21e
LW
5083 if (strEQ(d,"msgctl")) return -KEY_msgctl;
5084 if (strEQ(d,"msgget")) return -KEY_msgget;
5085 if (strEQ(d,"msgrcv")) return -KEY_msgrcv;
5086 if (strEQ(d,"msgsnd")) return -KEY_msgsnd;
79072805
LW
5087 break;
5088 }
a687059c 5089 break;
79072805 5090 case 'N':
a0d0e21e 5091 if (strEQ(d,"NE")) { deprecate(d); return -KEY_ne;}
a687059c 5092 break;
79072805
LW
5093 case 'n':
5094 if (strEQ(d,"next")) return KEY_next;
a0d0e21e
LW
5095 if (strEQ(d,"ne")) return -KEY_ne;
5096 if (strEQ(d,"not")) return -KEY_not;
5097 if (strEQ(d,"no")) return KEY_no;
a687059c 5098 break;
79072805
LW
5099 case 'o':
5100 switch (len) {
463ee0b2 5101 case 2:
a0d0e21e 5102 if (strEQ(d,"or")) return -KEY_or;
463ee0b2 5103 break;
79072805 5104 case 3:
a0d0e21e
LW
5105 if (strEQ(d,"ord")) return -KEY_ord;
5106 if (strEQ(d,"oct")) return -KEY_oct;
72311751 5107 if (strEQ(d,"our")) { deprecate("reserved word \"our\"");
85b81015 5108 return 0;}
79072805
LW
5109 break;
5110 case 4:
a0d0e21e 5111 if (strEQ(d,"open")) return -KEY_open;
79072805
LW
5112 break;
5113 case 7:
a0d0e21e 5114 if (strEQ(d,"opendir")) return -KEY_opendir;
79072805 5115 break;
fe14fcc3 5116 }
a687059c 5117 break;
79072805
LW
5118 case 'p':
5119 switch (len) {
5120 case 3:
5121 if (strEQ(d,"pop")) return KEY_pop;
a0d0e21e 5122 if (strEQ(d,"pos")) return KEY_pos;
79072805
LW
5123 break;
5124 case 4:
5125 if (strEQ(d,"push")) return KEY_push;
a0d0e21e
LW
5126 if (strEQ(d,"pack")) return -KEY_pack;
5127 if (strEQ(d,"pipe")) return -KEY_pipe;
79072805
LW
5128 break;
5129 case 5:
5130 if (strEQ(d,"print")) return KEY_print;
5131 break;
5132 case 6:
5133 if (strEQ(d,"printf")) return KEY_printf;
5134 break;
5135 case 7:
5136 if (strEQ(d,"package")) return KEY_package;
5137 break;
c07a80fd 5138 case 9:
5139 if (strEQ(d,"prototype")) return KEY_prototype;
663a0e37 5140 }
79072805
LW
5141 break;
5142 case 'q':
5143 if (len <= 2) {
5144 if (strEQ(d,"q")) return KEY_q;
8782bef2 5145 if (strEQ(d,"qr")) return KEY_qr;
79072805 5146 if (strEQ(d,"qq")) return KEY_qq;
8990e307 5147 if (strEQ(d,"qw")) return KEY_qw;
79072805 5148 if (strEQ(d,"qx")) return KEY_qx;
663a0e37 5149 }
a0d0e21e 5150 else if (strEQ(d,"quotemeta")) return -KEY_quotemeta;
79072805
LW
5151 break;
5152 case 'r':
5153 switch (len) {
5154 case 3:
a0d0e21e 5155 if (strEQ(d,"ref")) return -KEY_ref;
79072805
LW
5156 break;
5157 case 4:
a0d0e21e
LW
5158 if (strEQ(d,"read")) return -KEY_read;
5159 if (strEQ(d,"rand")) return -KEY_rand;
5160 if (strEQ(d,"recv")) return -KEY_recv;
79072805
LW
5161 if (strEQ(d,"redo")) return KEY_redo;
5162 break;
5163 case 5:
a0d0e21e
LW
5164 if (strEQ(d,"rmdir")) return -KEY_rmdir;
5165 if (strEQ(d,"reset")) return -KEY_reset;
79072805
LW
5166 break;
5167 case 6:
5168 if (strEQ(d,"return")) return KEY_return;
a0d0e21e
LW
5169 if (strEQ(d,"rename")) return -KEY_rename;
5170 if (strEQ(d,"rindex")) return -KEY_rindex;
79072805
LW
5171 break;
5172 case 7:
a0d0e21e
LW
5173 if (strEQ(d,"require")) return -KEY_require;
5174 if (strEQ(d,"reverse")) return -KEY_reverse;
5175 if (strEQ(d,"readdir")) return -KEY_readdir;
79072805
LW
5176 break;
5177 case 8:
a0d0e21e
LW
5178 if (strEQ(d,"readlink")) return -KEY_readlink;
5179 if (strEQ(d,"readline")) return -KEY_readline;
5180 if (strEQ(d,"readpipe")) return -KEY_readpipe;
79072805
LW
5181 break;
5182 case 9:
a0d0e21e 5183 if (strEQ(d,"rewinddir")) return -KEY_rewinddir;
79072805 5184 break;
a687059c 5185 }
79072805
LW
5186 break;
5187 case 's':
a687059c 5188 switch (d[1]) {
79072805 5189 case 0: return KEY_s;
a687059c 5190 case 'c':
79072805 5191 if (strEQ(d,"scalar")) return KEY_scalar;
a687059c
LW
5192 break;
5193 case 'e':
79072805
LW
5194 switch (len) {
5195 case 4:
a0d0e21e
LW
5196 if (strEQ(d,"seek")) return -KEY_seek;
5197 if (strEQ(d,"send")) return -KEY_send;
79072805
LW
5198 break;
5199 case 5:
a0d0e21e 5200 if (strEQ(d,"semop")) return -KEY_semop;
79072805
LW
5201 break;
5202 case 6:
a0d0e21e
LW
5203 if (strEQ(d,"select")) return -KEY_select;
5204 if (strEQ(d,"semctl")) return -KEY_semctl;
5205 if (strEQ(d,"semget")) return -KEY_semget;
79072805
LW
5206 break;
5207 case 7:
a0d0e21e
LW
5208 if (strEQ(d,"setpgrp")) return -KEY_setpgrp;
5209 if (strEQ(d,"seekdir")) return -KEY_seekdir;
79072805
LW
5210 break;
5211 case 8:
a0d0e21e
LW
5212 if (strEQ(d,"setpwent")) return -KEY_setpwent;
5213 if (strEQ(d,"setgrent")) return -KEY_setgrent;
79072805
LW
5214 break;
5215 case 9:
a0d0e21e 5216 if (strEQ(d,"setnetent")) return -KEY_setnetent;
79072805
LW
5217 break;
5218 case 10:
a0d0e21e
LW
5219 if (strEQ(d,"setsockopt")) return -KEY_setsockopt;
5220 if (strEQ(d,"sethostent")) return -KEY_sethostent;
5221 if (strEQ(d,"setservent")) return -KEY_setservent;
79072805
LW
5222 break;
5223 case 11:
a0d0e21e
LW
5224 if (strEQ(d,"setpriority")) return -KEY_setpriority;
5225 if (strEQ(d,"setprotoent")) return -KEY_setprotoent;
79072805
LW
5226 break;
5227 }
a687059c
LW
5228 break;
5229 case 'h':
79072805
LW
5230 switch (len) {
5231 case 5:
5232 if (strEQ(d,"shift")) return KEY_shift;
5233 break;
5234 case 6:
a0d0e21e
LW
5235 if (strEQ(d,"shmctl")) return -KEY_shmctl;
5236 if (strEQ(d,"shmget")) return -KEY_shmget;
79072805
LW
5237 break;
5238 case 7:
a0d0e21e 5239 if (strEQ(d,"shmread")) return -KEY_shmread;
79072805
LW
5240 break;
5241 case 8:
a0d0e21e
LW
5242 if (strEQ(d,"shmwrite")) return -KEY_shmwrite;
5243 if (strEQ(d,"shutdown")) return -KEY_shutdown;
79072805
LW
5244 break;
5245 }
a687059c
LW
5246 break;
5247 case 'i':
a0d0e21e 5248 if (strEQ(d,"sin")) return -KEY_sin;
a687059c
LW
5249 break;
5250 case 'l':
a0d0e21e 5251 if (strEQ(d,"sleep")) return -KEY_sleep;
a687059c
LW
5252 break;
5253 case 'o':
79072805 5254 if (strEQ(d,"sort")) return KEY_sort;
a0d0e21e
LW
5255 if (strEQ(d,"socket")) return -KEY_socket;
5256 if (strEQ(d,"socketpair")) return -KEY_socketpair;
a687059c
LW
5257 break;
5258 case 'p':
79072805 5259 if (strEQ(d,"split")) return KEY_split;
a0d0e21e 5260 if (strEQ(d,"sprintf")) return -KEY_sprintf;
79072805 5261 if (strEQ(d,"splice")) return KEY_splice;
a687059c
LW
5262 break;
5263 case 'q':
a0d0e21e 5264 if (strEQ(d,"sqrt")) return -KEY_sqrt;
a687059c
LW
5265 break;
5266 case 'r':
a0d0e21e 5267 if (strEQ(d,"srand")) return -KEY_srand;
a687059c
LW
5268 break;
5269 case 't':
a0d0e21e 5270 if (strEQ(d,"stat")) return -KEY_stat;
79072805 5271 if (strEQ(d,"study")) return KEY_study;
a687059c
LW
5272 break;
5273 case 'u':
a0d0e21e 5274 if (strEQ(d,"substr")) return -KEY_substr;
79072805 5275 if (strEQ(d,"sub")) return KEY_sub;
a687059c
LW
5276 break;
5277 case 'y':
79072805
LW
5278 switch (len) {
5279 case 6:
a0d0e21e 5280 if (strEQ(d,"system")) return -KEY_system;
79072805
LW
5281 break;
5282 case 7:
a0d0e21e
LW
5283 if (strEQ(d,"symlink")) return -KEY_symlink;
5284 if (strEQ(d,"syscall")) return -KEY_syscall;
137443ea 5285 if (strEQ(d,"sysopen")) return -KEY_sysopen;
5286 if (strEQ(d,"sysread")) return -KEY_sysread;
5287 if (strEQ(d,"sysseek")) return -KEY_sysseek;
79072805
LW
5288 break;
5289 case 8:
a0d0e21e 5290 if (strEQ(d,"syswrite")) return -KEY_syswrite;
79072805 5291 break;
a687059c 5292 }
a687059c
LW
5293 break;
5294 }
5295 break;
79072805
LW
5296 case 't':
5297 switch (len) {
5298 case 2:
5299 if (strEQ(d,"tr")) return KEY_tr;
5300 break;
463ee0b2
LW
5301 case 3:
5302 if (strEQ(d,"tie")) return KEY_tie;
5303 break;
79072805 5304 case 4:
a0d0e21e 5305 if (strEQ(d,"tell")) return -KEY_tell;
c07a80fd 5306 if (strEQ(d,"tied")) return KEY_tied;
a0d0e21e 5307 if (strEQ(d,"time")) return -KEY_time;
79072805
LW
5308 break;
5309 case 5:
a0d0e21e 5310 if (strEQ(d,"times")) return -KEY_times;
79072805
LW
5311 break;
5312 case 7:
a0d0e21e 5313 if (strEQ(d,"telldir")) return -KEY_telldir;
79072805
LW
5314 break;
5315 case 8:
a0d0e21e 5316 if (strEQ(d,"truncate")) return -KEY_truncate;
79072805 5317 break;
378cc40b 5318 }
a687059c 5319 break;
79072805
LW
5320 case 'u':
5321 switch (len) {
5322 case 2:
a0d0e21e
LW
5323 if (strEQ(d,"uc")) return -KEY_uc;
5324 break;
5325 case 3:
5326 if (strEQ(d,"use")) return KEY_use;
79072805
LW
5327 break;
5328 case 5:
5329 if (strEQ(d,"undef")) return KEY_undef;
5330 if (strEQ(d,"until")) return KEY_until;
463ee0b2 5331 if (strEQ(d,"untie")) return KEY_untie;
a0d0e21e
LW
5332 if (strEQ(d,"utime")) return -KEY_utime;
5333 if (strEQ(d,"umask")) return -KEY_umask;
79072805
LW
5334 break;
5335 case 6:
5336 if (strEQ(d,"unless")) return KEY_unless;
a0d0e21e
LW
5337 if (strEQ(d,"unpack")) return -KEY_unpack;
5338 if (strEQ(d,"unlink")) return -KEY_unlink;
79072805
LW
5339 break;
5340 case 7:
5341 if (strEQ(d,"unshift")) return KEY_unshift;
a0d0e21e 5342 if (strEQ(d,"ucfirst")) return -KEY_ucfirst;
79072805 5343 break;
a687059c
LW
5344 }
5345 break;
79072805 5346 case 'v':
a0d0e21e
LW
5347 if (strEQ(d,"values")) return -KEY_values;
5348 if (strEQ(d,"vec")) return -KEY_vec;
a687059c 5349 break;
79072805
LW
5350 case 'w':
5351 switch (len) {
5352 case 4:
a0d0e21e
LW
5353 if (strEQ(d,"warn")) return -KEY_warn;
5354 if (strEQ(d,"wait")) return -KEY_wait;
79072805
LW
5355 break;
5356 case 5:
5357 if (strEQ(d,"while")) return KEY_while;
a0d0e21e 5358 if (strEQ(d,"write")) return -KEY_write;
79072805
LW
5359 break;
5360 case 7:
a0d0e21e 5361 if (strEQ(d,"waitpid")) return -KEY_waitpid;
79072805
LW
5362 break;
5363 case 9:
a0d0e21e 5364 if (strEQ(d,"wantarray")) return -KEY_wantarray;
79072805 5365 break;
2f3197b3 5366 }
a687059c 5367 break;
79072805 5368 case 'x':
a0d0e21e
LW
5369 if (len == 1) return -KEY_x;
5370 if (strEQ(d,"xor")) return -KEY_xor;
a687059c 5371 break;
79072805
LW
5372 case 'y':
5373 if (len == 1) return KEY_y;
5374 break;
5375 case 'z':
a687059c
LW
5376 break;
5377 }
79072805 5378 return 0;
a687059c
LW
5379}
5380
76e3520e 5381STATIC void
cea2e8a9 5382S_checkcomma(pTHX_ register char *s, char *name, char *what)
a687059c 5383{
2f3197b3
LW
5384 char *w;
5385
d008e5eb
GS
5386 if (*s == ' ' && s[1] == '(') { /* XXX gotta be a better way */
5387 dTHR; /* only for ckWARN */
5388 if (ckWARN(WARN_SYNTAX)) {
5389 int level = 1;
5390 for (w = s+2; *w && level; w++) {
5391 if (*w == '(')
5392 ++level;
5393 else if (*w == ')')
5394 --level;
5395 }
5396 if (*w)
5397 for (; *w && isSPACE(*w); w++) ;
5398 if (!*w || !strchr(";|})]oaiuw!=", *w)) /* an advisory hack only... */
cea2e8a9 5399 Perl_warner(aTHX_ WARN_SYNTAX, "%s (...) interpreted as function",name);
d008e5eb 5400 }
2f3197b3 5401 }
3280af22 5402 while (s < PL_bufend && isSPACE(*s))
2f3197b3 5403 s++;
a687059c
LW
5404 if (*s == '(')
5405 s++;
3280af22 5406 while (s < PL_bufend && isSPACE(*s))
a687059c 5407 s++;
834a4ddd 5408 if (isIDFIRST_lazy(s)) {
2f3197b3 5409 w = s++;
834a4ddd 5410 while (isALNUM_lazy(s))
a687059c 5411 s++;
3280af22 5412 while (s < PL_bufend && isSPACE(*s))
a687059c 5413 s++;
e929a76b 5414 if (*s == ',') {
463ee0b2 5415 int kw;
e929a76b 5416 *s = '\0';
864dbfa3 5417 kw = keyword(w, s - w) || get_cv(w, FALSE) != 0;
e929a76b 5418 *s = ',';
463ee0b2 5419 if (kw)
e929a76b 5420 return;
cea2e8a9 5421 Perl_croak(aTHX_ "No comma allowed after %s", what);
463ee0b2
LW
5422 }
5423 }
5424}
5425
423cee85
JH
5426/* Either returns sv, or mortalizes sv and returns a new SV*.
5427 Best used as sv=new_constant(..., sv, ...).
5428 If s, pv are NULL, calls subroutine with one argument,
5429 and type is used with error messages only. */
5430
b3ac6de7 5431STATIC SV *
cea2e8a9 5432S_new_constant(pTHX_ char *s, STRLEN len, char *key, SV *sv, SV *pv, char *type)
b3ac6de7 5433{
b3ac6de7 5434 dSP;
3280af22 5435 HV *table = GvHV(PL_hintgv); /* ^H */
b3ac6de7 5436 SV *res;
b3ac6de7
IZ
5437 SV **cvp;
5438 SV *cv, *typesv;
423cee85
JH
5439 char *why, *why1, *why2;
5440
5441 if (!(PL_hints & HINT_LOCALIZE_HH)) {
5442 SV *msg;
5443
5444 why = "%^H is not localized";
5445 report_short:
5446 why1 = why2 = "";
5447 report:
5448 msg = Perl_newSVpvf(aTHX_ "constant(%s): %s%s%s",
5449 (type ? type: "undef"), why1, why2, why);
5450 yyerror(SvPVX(msg));
5451 SvREFCNT_dec(msg);
5452 return sv;
5453 }
b3ac6de7 5454 if (!table) {
423cee85
JH
5455 why = "%^H is not defined";
5456 goto report_short;
b3ac6de7
IZ
5457 }
5458 cvp = hv_fetch(table, key, strlen(key), FALSE);
5459 if (!cvp || !SvOK(*cvp)) {
423cee85
JH
5460 why = "} is not defined";
5461 why1 = "$^H{";
5462 why2 = key;
5463 goto report;
b3ac6de7
IZ
5464 }
5465 sv_2mortal(sv); /* Parent created it permanently */
5466 cv = *cvp;
423cee85
JH
5467 if (!pv && s)
5468 pv = sv_2mortal(newSVpvn(s, len));
5469 if (type && pv)
5470 typesv = sv_2mortal(newSVpv(type, 0));
b3ac6de7 5471 else
423cee85
JH
5472 typesv = &PL_sv_undef;
5473
e788e7d3 5474 PUSHSTACKi(PERLSI_OVERLOAD);
423cee85
JH
5475 ENTER ;
5476 SAVETMPS;
5477
5478 PUSHMARK(SP) ;
25eaa213 5479 EXTEND(sp, 4);
423cee85
JH
5480 if (pv)
5481 PUSHs(pv);
b3ac6de7 5482 PUSHs(sv);
423cee85
JH
5483 if (pv)
5484 PUSHs(typesv);
b3ac6de7
IZ
5485 PUSHs(cv);
5486 PUTBACK;
423cee85
JH
5487 call_sv(cv, G_SCALAR | ( PL_in_eval ? 0 : G_EVAL));
5488
5489 SPAGAIN ;
5490
5491 /* Check the eval first */
5492 if (!PL_in_eval && SvTRUE(ERRSV))
5493 {
5494 STRLEN n_a;
5495 sv_catpv(ERRSV, "Propagated");
5496 yyerror(SvPV(ERRSV, n_a)); /* Duplicates the message inside eval */
5497 POPs ;
5498 res = SvREFCNT_inc(sv);
5499 }
5500 else {
5501 res = POPs;
5502 SvREFCNT_inc(res);
5503 }
5504
5505 PUTBACK ;
5506 FREETMPS ;
5507 LEAVE ;
b3ac6de7 5508 POPSTACK;
423cee85 5509
b3ac6de7 5510 if (!SvOK(res)) {
423cee85
JH
5511 why = "}} did not return a defined value";
5512 why1 = "Call to &{$^H{";
5513 why2 = key;
5514 sv = res;
5515 goto report;
5516 }
5517
5518 return res;
b3ac6de7 5519}
423cee85 5520
76e3520e 5521STATIC char *
cea2e8a9 5522S_scan_word(pTHX_ register char *s, char *dest, STRLEN destlen, int allow_package, STRLEN *slp)
463ee0b2
LW
5523{
5524 register char *d = dest;
8903cb82 5525 register char *e = d + destlen - 3; /* two-character token, ending NUL */
463ee0b2 5526 for (;;) {
8903cb82 5527 if (d >= e)
cea2e8a9 5528 Perl_croak(aTHX_ ident_too_long);
834a4ddd 5529 if (isALNUM(*s)) /* UTF handled below */
463ee0b2 5530 *d++ = *s++;
834a4ddd 5531 else if (*s == '\'' && allow_package && isIDFIRST_lazy(s+1)) {
463ee0b2
LW
5532 *d++ = ':';
5533 *d++ = ':';
5534 s++;
5535 }
c3e0f903 5536 else if (*s == ':' && s[1] == ':' && allow_package && s[2] != '$') {
463ee0b2
LW
5537 *d++ = *s++;
5538 *d++ = *s++;
5539 }
834a4ddd 5540 else if (UTF && *(U8*)s >= 0xc0 && isALNUM_utf8((U8*)s)) {
a0ed51b3 5541 char *t = s + UTF8SKIP(s);
dfe13c55 5542 while (*t & 0x80 && is_utf8_mark((U8*)t))
a0ed51b3
LW
5543 t += UTF8SKIP(t);
5544 if (d + (t - s) > e)
cea2e8a9 5545 Perl_croak(aTHX_ ident_too_long);
a0ed51b3
LW
5546 Copy(s, d, t - s, char);
5547 d += t - s;
5548 s = t;
5549 }
463ee0b2
LW
5550 else {
5551 *d = '\0';
5552 *slp = d - dest;
5553 return s;
e929a76b 5554 }
378cc40b
LW
5555 }
5556}
5557
76e3520e 5558STATIC char *
cea2e8a9 5559S_scan_ident(pTHX_ register char *s, register char *send, char *dest, STRLEN destlen, I32 ck_uni)
378cc40b
LW
5560{
5561 register char *d;
8903cb82 5562 register char *e;
79072805 5563 char *bracket = 0;
748a9306 5564 char funny = *s++;
378cc40b 5565
3280af22
NIS
5566 if (PL_lex_brackets == 0)
5567 PL_lex_fakebrack = 0;
a0d0e21e
LW
5568 if (isSPACE(*s))
5569 s = skipspace(s);
378cc40b 5570 d = dest;
8903cb82 5571 e = d + destlen - 3; /* two-character token, ending NUL */
de3bb511 5572 if (isDIGIT(*s)) {
8903cb82 5573 while (isDIGIT(*s)) {
5574 if (d >= e)
cea2e8a9 5575 Perl_croak(aTHX_ ident_too_long);
378cc40b 5576 *d++ = *s++;
8903cb82 5577 }
378cc40b
LW
5578 }
5579 else {
463ee0b2 5580 for (;;) {
8903cb82 5581 if (d >= e)
cea2e8a9 5582 Perl_croak(aTHX_ ident_too_long);
834a4ddd 5583 if (isALNUM(*s)) /* UTF handled below */
463ee0b2 5584 *d++ = *s++;
834a4ddd 5585 else if (*s == '\'' && isIDFIRST_lazy(s+1)) {
463ee0b2
LW
5586 *d++ = ':';
5587 *d++ = ':';
5588 s++;
5589 }
a0d0e21e 5590 else if (*s == ':' && s[1] == ':') {
463ee0b2
LW
5591 *d++ = *s++;
5592 *d++ = *s++;
5593 }
834a4ddd 5594 else if (UTF && *(U8*)s >= 0xc0 && isALNUM_utf8((U8*)s)) {
a0ed51b3 5595 char *t = s + UTF8SKIP(s);
dfe13c55 5596 while (*t & 0x80 && is_utf8_mark((U8*)t))
a0ed51b3
LW
5597 t += UTF8SKIP(t);
5598 if (d + (t - s) > e)
cea2e8a9 5599 Perl_croak(aTHX_ ident_too_long);
a0ed51b3
LW
5600 Copy(s, d, t - s, char);
5601 d += t - s;
5602 s = t;
5603 }
463ee0b2
LW
5604 else
5605 break;
5606 }
378cc40b
LW
5607 }
5608 *d = '\0';
5609 d = dest;
79072805 5610 if (*d) {
3280af22
NIS
5611 if (PL_lex_state != LEX_NORMAL)
5612 PL_lex_state = LEX_INTERPENDMAYBE;
79072805 5613 return s;
378cc40b 5614 }
748a9306 5615 if (*s == '$' && s[1] &&
834a4ddd 5616 (isALNUM_lazy(s+1) || strchr("${", s[1]) || strnEQ(s+1,"::",2)) )
5cd24f17 5617 {
4810e5ec 5618 return s;
5cd24f17 5619 }
79072805
LW
5620 if (*s == '{') {
5621 bracket = s;
5622 s++;
5623 }
5624 else if (ck_uni)
5625 check_uni();
93a17b20 5626 if (s < send)
79072805
LW
5627 *d = *s++;
5628 d[1] = '\0';
2b92dfce 5629 if (*d == '^' && *s && isCONTROLVAR(*s)) {
bbce6d69 5630 *d = toCTRL(*s);
5631 s++;
de3bb511 5632 }
79072805 5633 if (bracket) {
748a9306 5634 if (isSPACE(s[-1])) {
fa83b5b6 5635 while (s < send) {
5636 char ch = *s++;
5637 if (ch != ' ' && ch != '\t') {
5638 *d = ch;
5639 break;
5640 }
5641 }
748a9306 5642 }
834a4ddd 5643 if (isIDFIRST_lazy(d)) {
79072805 5644 d++;
a0ed51b3
LW
5645 if (UTF) {
5646 e = s;
834a4ddd 5647 while (e < send && isALNUM_lazy(e) || *e == ':') {
a0ed51b3 5648 e += UTF8SKIP(e);
dfe13c55 5649 while (e < send && *e & 0x80 && is_utf8_mark((U8*)e))
a0ed51b3
LW
5650 e += UTF8SKIP(e);
5651 }
5652 Copy(s, d, e - s, char);
5653 d += e - s;
5654 s = e;
5655 }
5656 else {
2b92dfce 5657 while ((isALNUM(*s) || *s == ':') && d < e)
a0ed51b3 5658 *d++ = *s++;
2b92dfce 5659 if (d >= e)
cea2e8a9 5660 Perl_croak(aTHX_ ident_too_long);
a0ed51b3 5661 }
79072805 5662 *d = '\0';
748a9306 5663 while (s < send && (*s == ' ' || *s == '\t')) s++;
ff68c719 5664 if ((*s == '[' || (*s == '{' && strNE(dest, "sub")))) {
d008e5eb 5665 dTHR; /* only for ckWARN */
599cee73 5666 if (ckWARN(WARN_AMBIGUOUS) && keyword(dest, d - dest)) {
748a9306 5667 char *brack = *s == '[' ? "[...]" : "{...}";
cea2e8a9 5668 Perl_warner(aTHX_ WARN_AMBIGUOUS,
599cee73 5669 "Ambiguous use of %c{%s%s} resolved to %c%s%s",
748a9306
LW
5670 funny, dest, brack, funny, dest, brack);
5671 }
3280af22 5672 PL_lex_fakebrack = PL_lex_brackets+1;
79072805 5673 bracket++;
3280af22 5674 PL_lex_brackstack[PL_lex_brackets++] = XOPERATOR;
79072805
LW
5675 return s;
5676 }
2b92dfce
GS
5677 }
5678 /* Handle extended ${^Foo} variables
5679 * 1999-02-27 mjd-perl-patch@plover.com */
5680 else if (!isALNUM(*d) && !isPRINT(*d) /* isCTRL(d) */
5681 && isALNUM(*s))
5682 {
5683 d++;
5684 while (isALNUM(*s) && d < e) {
5685 *d++ = *s++;
5686 }
5687 if (d >= e)
cea2e8a9 5688 Perl_croak(aTHX_ ident_too_long);
2b92dfce 5689 *d = '\0';
79072805
LW
5690 }
5691 if (*s == '}') {
5692 s++;
3280af22
NIS
5693 if (PL_lex_state == LEX_INTERPNORMAL && !PL_lex_brackets)
5694 PL_lex_state = LEX_INTERPEND;
748a9306
LW
5695 if (funny == '#')
5696 funny = '@';
d008e5eb
GS
5697 if (PL_lex_state == LEX_NORMAL) {
5698 dTHR; /* only for ckWARN */
5699 if (ckWARN(WARN_AMBIGUOUS) &&
864dbfa3 5700 (keyword(dest, d - dest) || get_cv(dest, FALSE)))
d008e5eb 5701 {
cea2e8a9 5702 Perl_warner(aTHX_ WARN_AMBIGUOUS,
d008e5eb
GS
5703 "Ambiguous use of %c{%s} resolved to %c%s",
5704 funny, dest, funny, dest);
5705 }
5706 }
79072805
LW
5707 }
5708 else {
5709 s = bracket; /* let the parser handle it */
93a17b20 5710 *dest = '\0';
79072805
LW
5711 }
5712 }
3280af22
NIS
5713 else if (PL_lex_state == LEX_INTERPNORMAL && !PL_lex_brackets && !intuit_more(s))
5714 PL_lex_state = LEX_INTERPEND;
378cc40b
LW
5715 return s;
5716}
5717
cea2e8a9
GS
5718void
5719Perl_pmflag(pTHX_ U16 *pmfl, int ch)
a0d0e21e 5720{
bbce6d69 5721 if (ch == 'i')
a0d0e21e 5722 *pmfl |= PMf_FOLD;
a0d0e21e
LW
5723 else if (ch == 'g')
5724 *pmfl |= PMf_GLOBAL;
c90c0ff4 5725 else if (ch == 'c')
5726 *pmfl |= PMf_CONTINUE;
a0d0e21e
LW
5727 else if (ch == 'o')
5728 *pmfl |= PMf_KEEP;
5729 else if (ch == 'm')
5730 *pmfl |= PMf_MULTILINE;
5731 else if (ch == 's')
5732 *pmfl |= PMf_SINGLELINE;
5733 else if (ch == 'x')
5734 *pmfl |= PMf_EXTENDED;
5735}
378cc40b 5736
76e3520e 5737STATIC char *
cea2e8a9 5738S_scan_pat(pTHX_ char *start, I32 type)
378cc40b 5739{
79072805
LW
5740 PMOP *pm;
5741 char *s;
378cc40b 5742
09bef843 5743 s = scan_str(start,FALSE,FALSE);
79072805 5744 if (!s) {
3280af22
NIS
5745 if (PL_lex_stuff)
5746 SvREFCNT_dec(PL_lex_stuff);
5747 PL_lex_stuff = Nullsv;
cea2e8a9 5748 Perl_croak(aTHX_ "Search pattern not terminated");
378cc40b 5749 }
bbce6d69 5750
8782bef2 5751 pm = (PMOP*)newPMOP(type, 0);
3280af22 5752 if (PL_multi_open == '?')
79072805 5753 pm->op_pmflags |= PMf_ONCE;
8782bef2
GB
5754 if(type == OP_QR) {
5755 while (*s && strchr("iomsx", *s))
5756 pmflag(&pm->op_pmflags,*s++);
5757 }
5758 else {
5759 while (*s && strchr("iogcmsx", *s))
5760 pmflag(&pm->op_pmflags,*s++);
5761 }
4633a7c4 5762 pm->op_pmpermflags = pm->op_pmflags;
bbce6d69 5763
3280af22 5764 PL_lex_op = (OP*)pm;
79072805 5765 yylval.ival = OP_MATCH;
378cc40b
LW
5766 return s;
5767}
5768
76e3520e 5769STATIC char *
cea2e8a9 5770S_scan_subst(pTHX_ char *start)
79072805 5771{
a0d0e21e 5772 register char *s;
79072805 5773 register PMOP *pm;
4fdae800 5774 I32 first_start;
79072805
LW
5775 I32 es = 0;
5776
79072805
LW
5777 yylval.ival = OP_NULL;
5778
09bef843 5779 s = scan_str(start,FALSE,FALSE);
79072805
LW
5780
5781 if (!s) {
3280af22
NIS
5782 if (PL_lex_stuff)
5783 SvREFCNT_dec(PL_lex_stuff);
5784 PL_lex_stuff = Nullsv;
cea2e8a9 5785 Perl_croak(aTHX_ "Substitution pattern not terminated");
a687059c 5786 }
79072805 5787
3280af22 5788 if (s[-1] == PL_multi_open)
79072805
LW
5789 s--;
5790
3280af22 5791 first_start = PL_multi_start;
09bef843 5792 s = scan_str(s,FALSE,FALSE);
79072805 5793 if (!s) {
3280af22
NIS
5794 if (PL_lex_stuff)
5795 SvREFCNT_dec(PL_lex_stuff);
5796 PL_lex_stuff = Nullsv;
5797 if (PL_lex_repl)
5798 SvREFCNT_dec(PL_lex_repl);
5799 PL_lex_repl = Nullsv;
cea2e8a9 5800 Perl_croak(aTHX_ "Substitution replacement not terminated");
a687059c 5801 }
3280af22 5802 PL_multi_start = first_start; /* so whole substitution is taken together */
2f3197b3 5803
79072805 5804 pm = (PMOP*)newPMOP(OP_SUBST, 0);
48c036b1 5805 while (*s) {
a687059c
LW
5806 if (*s == 'e') {
5807 s++;
2f3197b3 5808 es++;
a687059c 5809 }
b3eb6a9b 5810 else if (strchr("iogcmsx", *s))
a0d0e21e 5811 pmflag(&pm->op_pmflags,*s++);
48c036b1
GS
5812 else
5813 break;
378cc40b 5814 }
79072805
LW
5815
5816 if (es) {
5817 SV *repl;
0244c3a4
GS
5818 PL_sublex_info.super_bufptr = s;
5819 PL_sublex_info.super_bufend = PL_bufend;
5820 PL_multi_end = 0;
79072805 5821 pm->op_pmflags |= PMf_EVAL;
79cb57f6 5822 repl = newSVpvn("",0);
463ee0b2 5823 while (es-- > 0)
a0d0e21e 5824 sv_catpv(repl, es ? "eval " : "do ");
79072805 5825 sv_catpvn(repl, "{ ", 2);
3280af22 5826 sv_catsv(repl, PL_lex_repl);
79072805 5827 sv_catpvn(repl, " };", 2);
25da4f38 5828 SvEVALED_on(repl);
3280af22
NIS
5829 SvREFCNT_dec(PL_lex_repl);
5830 PL_lex_repl = repl;
378cc40b 5831 }
79072805 5832
4633a7c4 5833 pm->op_pmpermflags = pm->op_pmflags;
3280af22 5834 PL_lex_op = (OP*)pm;
79072805 5835 yylval.ival = OP_SUBST;
378cc40b
LW
5836 return s;
5837}
5838
76e3520e 5839STATIC char *
cea2e8a9 5840S_scan_trans(pTHX_ char *start)
378cc40b 5841{
a0d0e21e 5842 register char* s;
11343788 5843 OP *o;
79072805
LW
5844 short *tbl;
5845 I32 squash;
a0ed51b3 5846 I32 del;
79072805 5847 I32 complement;
a0ed51b3
LW
5848 I32 utf8;
5849 I32 count = 0;
79072805
LW
5850
5851 yylval.ival = OP_NULL;
5852
09bef843 5853 s = scan_str(start,FALSE,FALSE);
79072805 5854 if (!s) {
3280af22
NIS
5855 if (PL_lex_stuff)
5856 SvREFCNT_dec(PL_lex_stuff);
5857 PL_lex_stuff = Nullsv;
cea2e8a9 5858 Perl_croak(aTHX_ "Transliteration pattern not terminated");
a687059c 5859 }
3280af22 5860 if (s[-1] == PL_multi_open)
2f3197b3
LW
5861 s--;
5862
09bef843 5863 s = scan_str(s,FALSE,FALSE);
79072805 5864 if (!s) {
3280af22
NIS
5865 if (PL_lex_stuff)
5866 SvREFCNT_dec(PL_lex_stuff);
5867 PL_lex_stuff = Nullsv;
5868 if (PL_lex_repl)
5869 SvREFCNT_dec(PL_lex_repl);
5870 PL_lex_repl = Nullsv;
cea2e8a9 5871 Perl_croak(aTHX_ "Transliteration replacement not terminated");
a687059c 5872 }
79072805 5873
a0ed51b3
LW
5874 if (UTF) {
5875 o = newSVOP(OP_TRANS, 0, 0);
5876 utf8 = OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF;
5877 }
5878 else {
5879 New(803,tbl,256,short);
5880 o = newPVOP(OP_TRANS, 0, (char*)tbl);
5881 utf8 = 0;
5882 }
2f3197b3 5883
a0ed51b3
LW
5884 complement = del = squash = 0;
5885 while (strchr("cdsCU", *s)) {
395c3793 5886 if (*s == 'c')
79072805 5887 complement = OPpTRANS_COMPLEMENT;
395c3793 5888 else if (*s == 'd')
a0ed51b3
LW
5889 del = OPpTRANS_DELETE;
5890 else if (*s == 's')
79072805 5891 squash = OPpTRANS_SQUASH;
a0ed51b3
LW
5892 else {
5893 switch (count++) {
5894 case 0:
5895 if (*s == 'C')
5896 utf8 &= ~OPpTRANS_FROM_UTF;
5897 else
5898 utf8 |= OPpTRANS_FROM_UTF;
5899 break;
5900 case 1:
5901 if (*s == 'C')
5902 utf8 &= ~OPpTRANS_TO_UTF;
5903 else
5904 utf8 |= OPpTRANS_TO_UTF;
5905 break;
5906 default:
cea2e8a9 5907 Perl_croak(aTHX_ "Too many /C and /U options");
a0ed51b3
LW
5908 }
5909 }
395c3793
LW
5910 s++;
5911 }
a0ed51b3 5912 o->op_private = del|squash|complement|utf8;
79072805 5913
3280af22 5914 PL_lex_op = o;
79072805
LW
5915 yylval.ival = OP_TRANS;
5916 return s;
5917}
5918
76e3520e 5919STATIC char *
cea2e8a9 5920S_scan_heredoc(pTHX_ register char *s)
79072805 5921{
11343788 5922 dTHR;
79072805
LW
5923 SV *herewas;
5924 I32 op_type = OP_SCALAR;
5925 I32 len;
5926 SV *tmpstr;
5927 char term;
5928 register char *d;
fc36a67e 5929 register char *e;
4633a7c4 5930 char *peek;
3280af22 5931 int outer = (PL_rsfp && !(PL_lex_inwhat == OP_SCALAR));
79072805
LW
5932
5933 s += 2;
3280af22
NIS
5934 d = PL_tokenbuf;
5935 e = PL_tokenbuf + sizeof PL_tokenbuf - 1;
fd2d0953 5936 if (!outer)
79072805 5937 *d++ = '\n';
4633a7c4
LW
5938 for (peek = s; *peek == ' ' || *peek == '\t'; peek++) ;
5939 if (*peek && strchr("`'\"",*peek)) {
5940 s = peek;
79072805 5941 term = *s++;
3280af22 5942 s = delimcpy(d, e, s, PL_bufend, term, &len);
fc36a67e 5943 d += len;
3280af22 5944 if (s < PL_bufend)
79072805 5945 s++;
79072805
LW
5946 }
5947 else {
5948 if (*s == '\\')
5949 s++, term = '\'';
5950 else
5951 term = '"';
834a4ddd 5952 if (!isALNUM_lazy(s))
4633a7c4 5953 deprecate("bare << to mean <<\"\"");
834a4ddd 5954 for (; isALNUM_lazy(s); s++) {
fc36a67e 5955 if (d < e)
5956 *d++ = *s;
5957 }
5958 }
3280af22 5959 if (d >= PL_tokenbuf + sizeof PL_tokenbuf - 1)
cea2e8a9 5960 Perl_croak(aTHX_ "Delimiter for here document is too long");
79072805
LW
5961 *d++ = '\n';
5962 *d = '\0';
3280af22 5963 len = d - PL_tokenbuf;
6a27c188 5964#ifndef PERL_STRICT_CR
f63a84b2
LW
5965 d = strchr(s, '\r');
5966 if (d) {
5967 char *olds = s;
5968 s = d;
3280af22 5969 while (s < PL_bufend) {
f63a84b2
LW
5970 if (*s == '\r') {
5971 *d++ = '\n';
5972 if (*++s == '\n')
5973 s++;
5974 }
5975 else if (*s == '\n' && s[1] == '\r') { /* \015\013 on a mac? */
5976 *d++ = *s++;
5977 s++;
5978 }
5979 else
5980 *d++ = *s++;
5981 }
5982 *d = '\0';
3280af22
NIS
5983 PL_bufend = d;
5984 SvCUR_set(PL_linestr, PL_bufend - SvPVX(PL_linestr));
f63a84b2
LW
5985 s = olds;
5986 }
5987#endif
79072805 5988 d = "\n";
3280af22 5989 if (outer || !(d=ninstr(s,PL_bufend,d,d+1)))
79cb57f6 5990 herewas = newSVpvn(s,PL_bufend-s);
79072805 5991 else
79cb57f6 5992 s--, herewas = newSVpvn(s,d-s);
79072805 5993 s += SvCUR(herewas);
748a9306 5994
8d6dde3e 5995 tmpstr = NEWSV(87,79);
748a9306
LW
5996 sv_upgrade(tmpstr, SVt_PVIV);
5997 if (term == '\'') {
79072805 5998 op_type = OP_CONST;
748a9306
LW
5999 SvIVX(tmpstr) = -1;
6000 }
6001 else if (term == '`') {
79072805 6002 op_type = OP_BACKTICK;
748a9306
LW
6003 SvIVX(tmpstr) = '\\';
6004 }
79072805
LW
6005
6006 CLINE;
3280af22
NIS
6007 PL_multi_start = PL_curcop->cop_line;
6008 PL_multi_open = PL_multi_close = '<';
6009 term = *PL_tokenbuf;
0244c3a4
GS
6010 if (PL_lex_inwhat == OP_SUBST && PL_in_eval && !PL_rsfp) {
6011 char *bufptr = PL_sublex_info.super_bufptr;
6012 char *bufend = PL_sublex_info.super_bufend;
6013 char *olds = s - SvCUR(herewas);
6014 s = strchr(bufptr, '\n');
6015 if (!s)
6016 s = bufend;
6017 d = s;
6018 while (s < bufend &&
6019 (*s != term || memNE(s,PL_tokenbuf,len)) ) {
6020 if (*s++ == '\n')
6021 PL_curcop->cop_line++;
6022 }
6023 if (s >= bufend) {
6024 PL_curcop->cop_line = PL_multi_start;
6025 missingterm(PL_tokenbuf);
6026 }
6027 sv_setpvn(herewas,bufptr,d-bufptr+1);
6028 sv_setpvn(tmpstr,d+1,s-d);
6029 s += len - 1;
6030 sv_catpvn(herewas,s,bufend-s);
6031 (void)strcpy(bufptr,SvPVX(herewas));
6032
6033 s = olds;
6034 goto retval;
6035 }
6036 else if (!outer) {
79072805 6037 d = s;
3280af22
NIS
6038 while (s < PL_bufend &&
6039 (*s != term || memNE(s,PL_tokenbuf,len)) ) {
79072805 6040 if (*s++ == '\n')
3280af22 6041 PL_curcop->cop_line++;
79072805 6042 }
3280af22
NIS
6043 if (s >= PL_bufend) {
6044 PL_curcop->cop_line = PL_multi_start;
6045 missingterm(PL_tokenbuf);
79072805
LW
6046 }
6047 sv_setpvn(tmpstr,d+1,s-d);
6048 s += len - 1;
3280af22 6049 PL_curcop->cop_line++; /* the preceding stmt passes a newline */
49d8d3a1 6050
3280af22
NIS
6051 sv_catpvn(herewas,s,PL_bufend-s);
6052 sv_setsv(PL_linestr,herewas);
6053 PL_oldoldbufptr = PL_oldbufptr = PL_bufptr = s = PL_linestart = SvPVX(PL_linestr);
6054 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
79072805
LW
6055 }
6056 else
6057 sv_setpvn(tmpstr,"",0); /* avoid "uninitialized" warning */
3280af22 6058 while (s >= PL_bufend) { /* multiple line string? */
fd2d0953 6059 if (!outer ||
3280af22
NIS
6060 !(PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = filter_gets(PL_linestr, PL_rsfp, 0))) {
6061 PL_curcop->cop_line = PL_multi_start;
6062 missingterm(PL_tokenbuf);
79072805 6063 }
3280af22
NIS
6064 PL_curcop->cop_line++;
6065 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
6a27c188 6066#ifndef PERL_STRICT_CR
3280af22 6067 if (PL_bufend - PL_linestart >= 2) {
a1529941
NIS
6068 if ((PL_bufend[-2] == '\r' && PL_bufend[-1] == '\n') ||
6069 (PL_bufend[-2] == '\n' && PL_bufend[-1] == '\r'))
c6f14548 6070 {
3280af22
NIS
6071 PL_bufend[-2] = '\n';
6072 PL_bufend--;
6073 SvCUR_set(PL_linestr, PL_bufend - SvPVX(PL_linestr));
f63a84b2 6074 }
3280af22
NIS
6075 else if (PL_bufend[-1] == '\r')
6076 PL_bufend[-1] = '\n';
f63a84b2 6077 }
3280af22
NIS
6078 else if (PL_bufend - PL_linestart == 1 && PL_bufend[-1] == '\r')
6079 PL_bufend[-1] = '\n';
f63a84b2 6080#endif
3280af22 6081 if (PERLDB_LINE && PL_curstash != PL_debstash) {
79072805
LW
6082 SV *sv = NEWSV(88,0);
6083
93a17b20 6084 sv_upgrade(sv, SVt_PVMG);
3280af22
NIS
6085 sv_setsv(sv,PL_linestr);
6086 av_store(GvAV(PL_curcop->cop_filegv),
6087 (I32)PL_curcop->cop_line,sv);
79072805 6088 }
3280af22
NIS
6089 if (*s == term && memEQ(s,PL_tokenbuf,len)) {
6090 s = PL_bufend - 1;
79072805 6091 *s = ' ';
3280af22
NIS
6092 sv_catsv(PL_linestr,herewas);
6093 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
79072805
LW
6094 }
6095 else {
3280af22
NIS
6096 s = PL_bufend;
6097 sv_catsv(tmpstr,PL_linestr);
395c3793
LW
6098 }
6099 }
79072805 6100 s++;
0244c3a4
GS
6101retval:
6102 PL_multi_end = PL_curcop->cop_line;
79072805
LW
6103 if (SvCUR(tmpstr) + 5 < SvLEN(tmpstr)) {
6104 SvLEN_set(tmpstr, SvCUR(tmpstr) + 1);
463ee0b2 6105 Renew(SvPVX(tmpstr), SvLEN(tmpstr), char);
79072805 6106 }
8990e307 6107 SvREFCNT_dec(herewas);
3280af22 6108 PL_lex_stuff = tmpstr;
79072805
LW
6109 yylval.ival = op_type;
6110 return s;
6111}
6112
02aa26ce
NT
6113/* scan_inputsymbol
6114 takes: current position in input buffer
6115 returns: new position in input buffer
6116 side-effects: yylval and lex_op are set.
6117
6118 This code handles:
6119
6120 <> read from ARGV
6121 <FH> read from filehandle
6122 <pkg::FH> read from package qualified filehandle
6123 <pkg'FH> read from package qualified filehandle
6124 <$fh> read from filehandle in $fh
6125 <*.h> filename glob
6126
6127*/
6128
76e3520e 6129STATIC char *
cea2e8a9 6130S_scan_inputsymbol(pTHX_ char *start)
79072805 6131{
02aa26ce 6132 register char *s = start; /* current position in buffer */
79072805 6133 register char *d;
fc36a67e 6134 register char *e;
1b420867 6135 char *end;
79072805
LW
6136 I32 len;
6137
3280af22
NIS
6138 d = PL_tokenbuf; /* start of temp holding space */
6139 e = PL_tokenbuf + sizeof PL_tokenbuf; /* end of temp holding space */
1b420867
GS
6140 end = strchr(s, '\n');
6141 if (!end)
6142 end = PL_bufend;
6143 s = delimcpy(d, e, s + 1, end, '>', &len); /* extract until > */
02aa26ce
NT
6144
6145 /* die if we didn't have space for the contents of the <>,
1b420867 6146 or if it didn't end, or if we see a newline
02aa26ce
NT
6147 */
6148
3280af22 6149 if (len >= sizeof PL_tokenbuf)
cea2e8a9 6150 Perl_croak(aTHX_ "Excessively long <> operator");
1b420867 6151 if (s >= end)
cea2e8a9 6152 Perl_croak(aTHX_ "Unterminated <> operator");
02aa26ce 6153
fc36a67e 6154 s++;
02aa26ce
NT
6155
6156 /* check for <$fh>
6157 Remember, only scalar variables are interpreted as filehandles by
6158 this code. Anything more complex (e.g., <$fh{$num}>) will be
6159 treated as a glob() call.
6160 This code makes use of the fact that except for the $ at the front,
6161 a scalar variable and a filehandle look the same.
6162 */
4633a7c4 6163 if (*d == '$' && d[1]) d++;
02aa26ce
NT
6164
6165 /* allow <Pkg'VALUE> or <Pkg::VALUE> */
834a4ddd 6166 while (*d && (isALNUM_lazy(d) || *d == '\'' || *d == ':'))
79072805 6167 d++;
02aa26ce
NT
6168
6169 /* If we've tried to read what we allow filehandles to look like, and
6170 there's still text left, then it must be a glob() and not a getline.
6171 Use scan_str to pull out the stuff between the <> and treat it
6172 as nothing more than a string.
6173 */
6174
3280af22 6175 if (d - PL_tokenbuf != len) {
79072805
LW
6176 yylval.ival = OP_GLOB;
6177 set_csh();
09bef843 6178 s = scan_str(start,FALSE,FALSE);
79072805 6179 if (!s)
cea2e8a9 6180 Perl_croak(aTHX_ "Glob not terminated");
79072805
LW
6181 return s;
6182 }
395c3793 6183 else {
02aa26ce 6184 /* we're in a filehandle read situation */
3280af22 6185 d = PL_tokenbuf;
02aa26ce
NT
6186
6187 /* turn <> into <ARGV> */
79072805
LW
6188 if (!len)
6189 (void)strcpy(d,"ARGV");
02aa26ce
NT
6190
6191 /* if <$fh>, create the ops to turn the variable into a
6192 filehandle
6193 */
79072805 6194 if (*d == '$') {
a0d0e21e 6195 I32 tmp;
02aa26ce
NT
6196
6197 /* try to find it in the pad for this block, otherwise find
6198 add symbol table ops
6199 */
11343788
MB
6200 if ((tmp = pad_findmy(d)) != NOT_IN_PAD) {
6201 OP *o = newOP(OP_PADSV, 0);
6202 o->op_targ = tmp;
f5284f61 6203 PL_lex_op = (OP*)newUNOP(OP_READLINE, 0, o);
a0d0e21e
LW
6204 }
6205 else {
6206 GV *gv = gv_fetchpv(d+1,TRUE, SVt_PV);
3280af22 6207 PL_lex_op = (OP*)newUNOP(OP_READLINE, 0,
a0d0e21e 6208 newUNOP(OP_RV2SV, 0,
f5284f61 6209 newGVOP(OP_GV, 0, gv)));
a0d0e21e 6210 }
f5284f61
IZ
6211 PL_lex_op->op_flags |= OPf_SPECIAL;
6212 /* we created the ops in PL_lex_op, so make yylval.ival a null op */
79072805
LW
6213 yylval.ival = OP_NULL;
6214 }
02aa26ce
NT
6215
6216 /* If it's none of the above, it must be a literal filehandle
6217 (<Foo::BAR> or <FOO>) so build a simple readline OP */
79072805 6218 else {
85e6fe83 6219 GV *gv = gv_fetchpv(d,TRUE, SVt_PVIO);
3280af22 6220 PL_lex_op = (OP*)newUNOP(OP_READLINE, 0, newGVOP(OP_GV, 0, gv));
79072805
LW
6221 yylval.ival = OP_NULL;
6222 }
6223 }
02aa26ce 6224
79072805
LW
6225 return s;
6226}
6227
02aa26ce
NT
6228
6229/* scan_str
6230 takes: start position in buffer
09bef843
SB
6231 keep_quoted preserve \ on the embedded delimiter(s)
6232 keep_delims preserve the delimiters around the string
02aa26ce
NT
6233 returns: position to continue reading from buffer
6234 side-effects: multi_start, multi_close, lex_repl or lex_stuff, and
6235 updates the read buffer.
6236
6237 This subroutine pulls a string out of the input. It is called for:
6238 q single quotes q(literal text)
6239 ' single quotes 'literal text'
6240 qq double quotes qq(interpolate $here please)
6241 " double quotes "interpolate $here please"
6242 qx backticks qx(/bin/ls -l)
6243 ` backticks `/bin/ls -l`
6244 qw quote words @EXPORT_OK = qw( func() $spam )
6245 m// regexp match m/this/
6246 s/// regexp substitute s/this/that/
6247 tr/// string transliterate tr/this/that/
6248 y/// string transliterate y/this/that/
6249 ($*@) sub prototypes sub foo ($)
09bef843 6250 (stuff) sub attr parameters sub foo : attr(stuff)
02aa26ce
NT
6251 <> readline or globs <FOO>, <>, <$fh>, or <*.c>
6252
6253 In most of these cases (all but <>, patterns and transliterate)
6254 yylex() calls scan_str(). m// makes yylex() call scan_pat() which
6255 calls scan_str(). s/// makes yylex() call scan_subst() which calls
6256 scan_str(). tr/// and y/// make yylex() call scan_trans() which
6257 calls scan_str().
6258
6259 It skips whitespace before the string starts, and treats the first
6260 character as the delimiter. If the delimiter is one of ([{< then
6261 the corresponding "close" character )]}> is used as the closing
6262 delimiter. It allows quoting of delimiters, and if the string has
6263 balanced delimiters ([{<>}]) it allows nesting.
6264
6265 The lexer always reads these strings into lex_stuff, except in the
6266 case of the operators which take *two* arguments (s/// and tr///)
6267 when it checks to see if lex_stuff is full (presumably with the 1st
6268 arg to s or tr) and if so puts the string into lex_repl.
6269
6270*/
6271
76e3520e 6272STATIC char *
09bef843 6273S_scan_str(pTHX_ char *start, int keep_quoted, int keep_delims)
79072805 6274{
11343788 6275 dTHR;
02aa26ce
NT
6276 SV *sv; /* scalar value: string */
6277 char *tmps; /* temp string, used for delimiter matching */
6278 register char *s = start; /* current position in the buffer */
6279 register char term; /* terminating character */
6280 register char *to; /* current position in the sv's data */
6281 I32 brackets = 1; /* bracket nesting level */
6282
6283 /* skip space before the delimiter */
fb73857a 6284 if (isSPACE(*s))
6285 s = skipspace(s);
02aa26ce
NT
6286
6287 /* mark where we are, in case we need to report errors */
79072805 6288 CLINE;
02aa26ce
NT
6289
6290 /* after skipping whitespace, the next character is the terminator */
a0d0e21e 6291 term = *s;
02aa26ce 6292 /* mark where we are */
3280af22
NIS
6293 PL_multi_start = PL_curcop->cop_line;
6294 PL_multi_open = term;
02aa26ce
NT
6295
6296 /* find corresponding closing delimiter */
93a17b20 6297 if (term && (tmps = strchr("([{< )]}> )]}>",term)))
79072805 6298 term = tmps[5];
3280af22 6299 PL_multi_close = term;
79072805 6300
02aa26ce 6301 /* create a new SV to hold the contents. 87 is leak category, I'm
8d6dde3e
IZ
6302 assuming. 79 is the SV's initial length. What a random number. */
6303 sv = NEWSV(87,79);
ed6116ce
LW
6304 sv_upgrade(sv, SVt_PVIV);
6305 SvIVX(sv) = term;
a0d0e21e 6306 (void)SvPOK_only(sv); /* validate pointer */
02aa26ce
NT
6307
6308 /* move past delimiter and try to read a complete string */
09bef843
SB
6309 if (keep_delims)
6310 sv_catpvn(sv, s, 1);
93a17b20
LW
6311 s++;
6312 for (;;) {
02aa26ce 6313 /* extend sv if need be */
3280af22 6314 SvGROW(sv, SvCUR(sv) + (PL_bufend - s) + 1);
02aa26ce 6315 /* set 'to' to the next character in the sv's string */
463ee0b2 6316 to = SvPVX(sv)+SvCUR(sv);
09bef843 6317
02aa26ce 6318 /* if open delimiter is the close delimiter read unbridle */
3280af22
NIS
6319 if (PL_multi_open == PL_multi_close) {
6320 for (; s < PL_bufend; s++,to++) {
02aa26ce 6321 /* embedded newlines increment the current line number */
3280af22
NIS
6322 if (*s == '\n' && !PL_rsfp)
6323 PL_curcop->cop_line++;
02aa26ce 6324 /* handle quoted delimiters */
3280af22 6325 if (*s == '\\' && s+1 < PL_bufend && term != '\\') {
09bef843 6326 if (!keep_quoted && s[1] == term)
a0d0e21e 6327 s++;
02aa26ce 6328 /* any other quotes are simply copied straight through */
a0d0e21e
LW
6329 else
6330 *to++ = *s++;
6331 }
02aa26ce
NT
6332 /* terminate when run out of buffer (the for() condition), or
6333 have found the terminator */
93a17b20
LW
6334 else if (*s == term)
6335 break;
6336 *to = *s;
6337 }
6338 }
02aa26ce
NT
6339
6340 /* if the terminator isn't the same as the start character (e.g.,
6341 matched brackets), we have to allow more in the quoting, and
6342 be prepared for nested brackets.
6343 */
93a17b20 6344 else {
02aa26ce 6345 /* read until we run out of string, or we find the terminator */
3280af22 6346 for (; s < PL_bufend; s++,to++) {
02aa26ce 6347 /* embedded newlines increment the line count */
3280af22
NIS
6348 if (*s == '\n' && !PL_rsfp)
6349 PL_curcop->cop_line++;
02aa26ce 6350 /* backslashes can escape the open or closing characters */
3280af22 6351 if (*s == '\\' && s+1 < PL_bufend) {
09bef843
SB
6352 if (!keep_quoted &&
6353 ((s[1] == PL_multi_open) || (s[1] == PL_multi_close)))
a0d0e21e
LW
6354 s++;
6355 else
6356 *to++ = *s++;
6357 }
02aa26ce 6358 /* allow nested opens and closes */
3280af22 6359 else if (*s == PL_multi_close && --brackets <= 0)
93a17b20 6360 break;
3280af22 6361 else if (*s == PL_multi_open)
93a17b20
LW
6362 brackets++;
6363 *to = *s;
6364 }
6365 }
02aa26ce 6366 /* terminate the copied string and update the sv's end-of-string */
93a17b20 6367 *to = '\0';
463ee0b2 6368 SvCUR_set(sv, to - SvPVX(sv));
93a17b20 6369
02aa26ce
NT
6370 /*
6371 * this next chunk reads more into the buffer if we're not done yet
6372 */
6373
3280af22 6374 if (s < PL_bufend) break; /* handle case where we are done yet :-) */
79072805 6375
6a27c188 6376#ifndef PERL_STRICT_CR
f63a84b2 6377 if (to - SvPVX(sv) >= 2) {
c6f14548
GS
6378 if ((to[-2] == '\r' && to[-1] == '\n') ||
6379 (to[-2] == '\n' && to[-1] == '\r'))
6380 {
f63a84b2
LW
6381 to[-2] = '\n';
6382 to--;
6383 SvCUR_set(sv, to - SvPVX(sv));
6384 }
6385 else if (to[-1] == '\r')
6386 to[-1] = '\n';
6387 }
6388 else if (to - SvPVX(sv) == 1 && to[-1] == '\r')
6389 to[-1] = '\n';
6390#endif
6391
02aa26ce
NT
6392 /* if we're out of file, or a read fails, bail and reset the current
6393 line marker so we can report where the unterminated string began
6394 */
3280af22
NIS
6395 if (!PL_rsfp ||
6396 !(PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = filter_gets(PL_linestr, PL_rsfp, 0))) {
c07a80fd 6397 sv_free(sv);
3280af22 6398 PL_curcop->cop_line = PL_multi_start;
79072805
LW
6399 return Nullch;
6400 }
02aa26ce 6401 /* we read a line, so increment our line counter */
3280af22 6402 PL_curcop->cop_line++;
a0ed51b3 6403
02aa26ce 6404 /* update debugger info */
3280af22 6405 if (PERLDB_LINE && PL_curstash != PL_debstash) {
79072805
LW
6406 SV *sv = NEWSV(88,0);
6407
93a17b20 6408 sv_upgrade(sv, SVt_PVMG);
3280af22
NIS
6409 sv_setsv(sv,PL_linestr);
6410 av_store(GvAV(PL_curcop->cop_filegv),
6411 (I32)PL_curcop->cop_line, sv);
395c3793 6412 }
a0ed51b3 6413
3280af22
NIS
6414 /* having changed the buffer, we must update PL_bufend */
6415 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
378cc40b 6416 }
02aa26ce
NT
6417
6418 /* at this point, we have successfully read the delimited string */
6419
09bef843
SB
6420 if (keep_delims)
6421 sv_catpvn(sv, s, 1);
3280af22 6422 PL_multi_end = PL_curcop->cop_line;
79072805 6423 s++;
02aa26ce
NT
6424
6425 /* if we allocated too much space, give some back */
93a17b20
LW
6426 if (SvCUR(sv) + 5 < SvLEN(sv)) {
6427 SvLEN_set(sv, SvCUR(sv) + 1);
463ee0b2 6428 Renew(SvPVX(sv), SvLEN(sv), char);
79072805 6429 }
02aa26ce
NT
6430
6431 /* decide whether this is the first or second quoted string we've read
6432 for this op
6433 */
6434
3280af22
NIS
6435 if (PL_lex_stuff)
6436 PL_lex_repl = sv;
79072805 6437 else
3280af22 6438 PL_lex_stuff = sv;
378cc40b
LW
6439 return s;
6440}
6441
02aa26ce
NT
6442/*
6443 scan_num
6444 takes: pointer to position in buffer
6445 returns: pointer to new position in buffer
6446 side-effects: builds ops for the constant in yylval.op
6447
6448 Read a number in any of the formats that Perl accepts:
6449
4f19785b 6450 0(x[0-7A-F]+)|([0-7]+)|(b[01])
02aa26ce
NT
6451 [\d_]+(\.[\d_]*)?[Ee](\d+)
6452
6453 Underbars (_) are allowed in decimal numbers. If -w is on,
6454 underbars before a decimal point must be at three digit intervals.
6455
3280af22 6456 Like most scan_ routines, it uses the PL_tokenbuf buffer to hold the
02aa26ce
NT
6457 thing it reads.
6458
6459 If it reads a number without a decimal point or an exponent, it will
6460 try converting the number to an integer and see if it can do so
6461 without loss of precision.
6462*/
6463
378cc40b 6464char *
864dbfa3 6465Perl_scan_num(pTHX_ char *start)
378cc40b 6466{
02aa26ce
NT
6467 register char *s = start; /* current position in buffer */
6468 register char *d; /* destination in temp buffer */
6469 register char *e; /* end of temp buffer */
b8403495 6470 IV tryiv; /* used to see if it can be an IV */
65202027 6471 NV value; /* number read, as a double */
02aa26ce 6472 SV *sv; /* place to put the converted number */
b8403495 6473 bool floatit; /* boolean: int or float? */
02aa26ce 6474 char *lastub = 0; /* position of last underbar */
fc36a67e 6475 static char number_too_long[] = "Number too long";
378cc40b 6476
02aa26ce
NT
6477 /* We use the first character to decide what type of number this is */
6478
378cc40b 6479 switch (*s) {
79072805 6480 default:
cea2e8a9 6481 Perl_croak(aTHX_ "panic: scan_num");
02aa26ce
NT
6482
6483 /* if it starts with a 0, it could be an octal number, a decimal in
4f19785b 6484 0.13 disguise, or a hexadecimal number, or a binary number.
02aa26ce 6485 */
378cc40b
LW
6486 case '0':
6487 {
02aa26ce
NT
6488 /* variables:
6489 u holds the "number so far"
4f19785b
WSI
6490 shift the power of 2 of the base
6491 (hex == 4, octal == 3, binary == 1)
02aa26ce
NT
6492 overflowed was the number more than we can hold?
6493
6494 Shift is used when we add a digit. It also serves as an "are
4f19785b
WSI
6495 we in octal/hex/binary?" indicator to disallow hex characters
6496 when in octal mode.
02aa26ce 6497 */
f248d071 6498 dTHR;
9e24b6e2
JH
6499 NV n = 0.0;
6500 UV u = 0;
79072805 6501 I32 shift;
9e24b6e2
JH
6502 bool overflowed = FALSE;
6503 static NV nvshift[5] = { 1.0, 2.0, 4.0, 8.0, 16.0 };
6504 static char* bases[5] = { "", "binary", "", "octal",
6505 "hexadecimal" };
6506 static char* Bases[5] = { "", "Binary", "", "Octal",
6507 "Hexadecimal" };
6508 static char *maxima[5] = { "",
6509 "0b11111111111111111111111111111111",
6510 "",
893fe2c2 6511 "037777777777",
9e24b6e2
JH
6512 "0xffffffff" };
6513 char *base, *Base, *max;
378cc40b 6514
02aa26ce 6515 /* check for hex */
378cc40b
LW
6516 if (s[1] == 'x') {
6517 shift = 4;
6518 s += 2;
4f19785b
WSI
6519 } else if (s[1] == 'b') {
6520 shift = 1;
6521 s += 2;
378cc40b 6522 }
02aa26ce 6523 /* check for a decimal in disguise */
b78218b7 6524 else if (s[1] == '.' || s[1] == 'e' || s[1] == 'E')
378cc40b 6525 goto decimal;
02aa26ce 6526 /* so it must be octal */
378cc40b
LW
6527 else
6528 shift = 3;
9e24b6e2
JH
6529
6530 base = bases[shift];
6531 Base = Bases[shift];
6532 max = maxima[shift];
02aa26ce 6533
4f19785b 6534 /* read the rest of the number */
378cc40b 6535 for (;;) {
9e24b6e2 6536 /* x is used in the overflow test,
893fe2c2 6537 b is the digit we're adding on. */
9e24b6e2 6538 UV x, b;
55497cff 6539
378cc40b 6540 switch (*s) {
02aa26ce
NT
6541
6542 /* if we don't mention it, we're done */
378cc40b
LW
6543 default:
6544 goto out;
02aa26ce
NT
6545
6546 /* _ are ignored */
de3bb511
LW
6547 case '_':
6548 s++;
6549 break;
02aa26ce
NT
6550
6551 /* 8 and 9 are not octal */
378cc40b 6552 case '8': case '9':
4f19785b 6553 if (shift == 3)
cea2e8a9 6554 yyerror(Perl_form(aTHX_ "Illegal octal digit '%c'", *s));
378cc40b 6555 /* FALL THROUGH */
02aa26ce
NT
6556
6557 /* octal digits */
4f19785b 6558 case '2': case '3': case '4':
378cc40b 6559 case '5': case '6': case '7':
4f19785b 6560 if (shift == 1)
cea2e8a9 6561 yyerror(Perl_form(aTHX_ "Illegal binary digit '%c'", *s));
4f19785b
WSI
6562 /* FALL THROUGH */
6563
6564 case '0': case '1':
02aa26ce 6565 b = *s++ & 15; /* ASCII digit -> value of digit */
55497cff 6566 goto digit;
02aa26ce
NT
6567
6568 /* hex digits */
378cc40b
LW
6569 case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
6570 case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
02aa26ce 6571 /* make sure they said 0x */
378cc40b
LW
6572 if (shift != 4)
6573 goto out;
55497cff 6574 b = (*s++ & 7) + 9;
02aa26ce
NT
6575
6576 /* Prepare to put the digit we have onto the end
6577 of the number so far. We check for overflows.
6578 */
6579
55497cff 6580 digit:
9e24b6e2
JH
6581 if (!overflowed) {
6582 x = u << shift; /* make room for the digit */
6583
6584 if ((x >> shift) != u
6585 && !(PL_hints & HINT_NEW_BINARY)) {
6586 dTHR;
6587 overflowed = TRUE;
6588 n = (NV) u;
767a6a26
PM
6589 if (ckWARN_d(WARN_OVERFLOW))
6590 Perl_warner(aTHX_ WARN_OVERFLOW,
9e24b6e2
JH
6591 "Integer overflow in %s number",
6592 base);
6593 } else
6594 u = x | b; /* add the digit to the end */
6595 }
6596 if (overflowed) {
6597 n *= nvshift[shift];
6598 /* If an NV has not enough bits in its
6599 * mantissa to represent an UV this summing of
6600 * small low-order numbers is a waste of time
6601 * (because the NV cannot preserve the
6602 * low-order bits anyway): we could just
6603 * remember when did we overflow and in the
6604 * end just multiply n by the right
6605 * amount. */
6606 n += (NV) b;
55497cff 6607 }
378cc40b
LW
6608 break;
6609 }
6610 }
02aa26ce
NT
6611
6612 /* if we get here, we had success: make a scalar value from
6613 the number.
6614 */
378cc40b 6615 out:
79072805 6616 sv = NEWSV(92,0);
9e24b6e2
JH
6617 if (overflowed) {
6618 dTHR;
767a6a26
PM
6619 if (ckWARN(WARN_PORTABLE) && n > 4294967295.0)
6620 Perl_warner(aTHX_ WARN_PORTABLE,
9e24b6e2
JH
6621 "%s number > %s non-portable",
6622 Base, max);
6623 sv_setnv(sv, n);
6624 }
6625 else {
15041a67 6626#if UVSIZE > 4
9e24b6e2 6627 dTHR;
767a6a26
PM
6628 if (ckWARN(WARN_PORTABLE) && u > 0xffffffff)
6629 Perl_warner(aTHX_ WARN_PORTABLE,
9e24b6e2
JH
6630 "%s number > %s non-portable",
6631 Base, max);
2cc4c2dc 6632#endif
9e24b6e2
JH
6633 sv_setuv(sv, u);
6634 }
2cc4c2dc 6635 if (PL_hints & HINT_NEW_BINARY)
b3ac6de7 6636 sv = new_constant(start, s - start, "binary", sv, Nullsv, NULL);
378cc40b
LW
6637 }
6638 break;
02aa26ce
NT
6639
6640 /*
6641 handle decimal numbers.
6642 we're also sent here when we read a 0 as the first digit
6643 */
378cc40b
LW
6644 case '1': case '2': case '3': case '4': case '5':
6645 case '6': case '7': case '8': case '9': case '.':
6646 decimal:
3280af22
NIS
6647 d = PL_tokenbuf;
6648 e = PL_tokenbuf + sizeof PL_tokenbuf - 6; /* room for various punctuation */
79072805 6649 floatit = FALSE;
02aa26ce
NT
6650
6651 /* read next group of digits and _ and copy into d */
de3bb511 6652 while (isDIGIT(*s) || *s == '_') {
02aa26ce
NT
6653 /* skip underscores, checking for misplaced ones
6654 if -w is on
6655 */
93a17b20 6656 if (*s == '_') {
d008e5eb 6657 dTHR; /* only for ckWARN */
599cee73 6658 if (ckWARN(WARN_SYNTAX) && lastub && s - lastub != 3)
cea2e8a9 6659 Perl_warner(aTHX_ WARN_SYNTAX, "Misplaced _ in number");
93a17b20
LW
6660 lastub = ++s;
6661 }
fc36a67e 6662 else {
02aa26ce 6663 /* check for end of fixed-length buffer */
fc36a67e 6664 if (d >= e)
cea2e8a9 6665 Perl_croak(aTHX_ number_too_long);
02aa26ce 6666 /* if we're ok, copy the character */
378cc40b 6667 *d++ = *s++;
fc36a67e 6668 }
378cc40b 6669 }
02aa26ce
NT
6670
6671 /* final misplaced underbar check */
d008e5eb
GS
6672 if (lastub && s - lastub != 3) {
6673 dTHR;
6674 if (ckWARN(WARN_SYNTAX))
cea2e8a9 6675 Perl_warner(aTHX_ WARN_SYNTAX, "Misplaced _ in number");
d008e5eb 6676 }
02aa26ce
NT
6677
6678 /* read a decimal portion if there is one. avoid
6679 3..5 being interpreted as the number 3. followed
6680 by .5
6681 */
2f3197b3 6682 if (*s == '.' && s[1] != '.') {
79072805 6683 floatit = TRUE;
378cc40b 6684 *d++ = *s++;
02aa26ce
NT
6685
6686 /* copy, ignoring underbars, until we run out of
6687 digits. Note: no misplaced underbar checks!
6688 */
fc36a67e 6689 for (; isDIGIT(*s) || *s == '_'; s++) {
02aa26ce 6690 /* fixed length buffer check */
fc36a67e 6691 if (d >= e)
cea2e8a9 6692 Perl_croak(aTHX_ number_too_long);
fc36a67e 6693 if (*s != '_')
6694 *d++ = *s;
378cc40b
LW
6695 }
6696 }
02aa26ce
NT
6697
6698 /* read exponent part, if present */
93a17b20 6699 if (*s && strchr("eE",*s) && strchr("+-0123456789",s[1])) {
79072805
LW
6700 floatit = TRUE;
6701 s++;
02aa26ce
NT
6702
6703 /* regardless of whether user said 3E5 or 3e5, use lower 'e' */
79072805 6704 *d++ = 'e'; /* At least some Mach atof()s don't grok 'E' */
02aa26ce
NT
6705
6706 /* allow positive or negative exponent */
378cc40b
LW
6707 if (*s == '+' || *s == '-')
6708 *d++ = *s++;
02aa26ce
NT
6709
6710 /* read digits of exponent (no underbars :-) */
fc36a67e 6711 while (isDIGIT(*s)) {
6712 if (d >= e)
cea2e8a9 6713 Perl_croak(aTHX_ number_too_long);
378cc40b 6714 *d++ = *s++;
fc36a67e 6715 }
378cc40b 6716 }
02aa26ce
NT
6717
6718 /* terminate the string */
378cc40b 6719 *d = '\0';
02aa26ce
NT
6720
6721 /* make an sv from the string */
79072805 6722 sv = NEWSV(92,0);
097ee67d
JH
6723
6724 value = Atof(PL_tokenbuf);
02aa26ce
NT
6725
6726 /*
6727 See if we can make do with an integer value without loss of
6728 precision. We use I_V to cast to an int, because some
6729 compilers have issues. Then we try casting it back and see
6730 if it was the same. We only do this if we know we
6731 specifically read an integer.
6732
6733 Note: if floatit is true, then we don't need to do the
6734 conversion at all.
6735 */
1e422769 6736 tryiv = I_V(value);
65202027 6737 if (!floatit && (NV)tryiv == value)
1e422769 6738 sv_setiv(sv, tryiv);
2f3197b3 6739 else
1e422769 6740 sv_setnv(sv, value);
b8403495
JH
6741 if ( floatit ? (PL_hints & HINT_NEW_FLOAT) :
6742 (PL_hints & HINT_NEW_INTEGER) )
3280af22 6743 sv = new_constant(PL_tokenbuf, d - PL_tokenbuf,
b8403495
JH
6744 (floatit ? "float" : "integer"),
6745 sv, Nullsv, NULL);
378cc40b 6746 break;
79072805 6747 }
a687059c 6748
02aa26ce
NT
6749 /* make the op for the constant and return */
6750
79072805 6751 yylval.opval = newSVOP(OP_CONST, 0, sv);
a687059c 6752
378cc40b
LW
6753 return s;
6754}
6755
76e3520e 6756STATIC char *
cea2e8a9 6757S_scan_formline(pTHX_ register char *s)
378cc40b 6758{
11343788 6759 dTHR;
79072805 6760 register char *eol;
378cc40b 6761 register char *t;
79cb57f6 6762 SV *stuff = newSVpvn("",0);
79072805 6763 bool needargs = FALSE;
378cc40b 6764
79072805 6765 while (!needargs) {
85e6fe83 6766 if (*s == '.' || *s == '}') {
79072805 6767 /*SUPPRESS 530*/
51882d45
GS
6768#ifdef PERL_STRICT_CR
6769 for (t = s+1;*t == ' ' || *t == '\t'; t++) ;
6770#else
6771 for (t = s+1;*t == ' ' || *t == '\t' || *t == '\r'; t++) ;
6772#endif
6a65c6a0 6773 if (*t == '\n' || t == PL_bufend)
79072805
LW
6774 break;
6775 }
3280af22 6776 if (PL_in_eval && !PL_rsfp) {
93a17b20 6777 eol = strchr(s,'\n');
0f85fab0 6778 if (!eol++)
3280af22 6779 eol = PL_bufend;
0f85fab0
LW
6780 }
6781 else
3280af22 6782 eol = PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
79072805 6783 if (*s != '#') {
a0d0e21e
LW
6784 for (t = s; t < eol; t++) {
6785 if (*t == '~' && t[1] == '~' && SvCUR(stuff)) {
6786 needargs = FALSE;
6787 goto enough; /* ~~ must be first line in formline */
378cc40b 6788 }
a0d0e21e
LW
6789 if (*t == '@' || *t == '^')
6790 needargs = TRUE;
378cc40b 6791 }
a0d0e21e 6792 sv_catpvn(stuff, s, eol-s);
79072805
LW
6793 }
6794 s = eol;
3280af22
NIS
6795 if (PL_rsfp) {
6796 s = filter_gets(PL_linestr, PL_rsfp, 0);
6797 PL_oldoldbufptr = PL_oldbufptr = PL_bufptr = PL_linestart = SvPVX(PL_linestr);
6798 PL_bufend = PL_bufptr + SvCUR(PL_linestr);
79072805 6799 if (!s) {
3280af22 6800 s = PL_bufptr;
79072805 6801 yyerror("Format not terminated");
378cc40b
LW
6802 break;
6803 }
378cc40b 6804 }
463ee0b2 6805 incline(s);
79072805 6806 }
a0d0e21e
LW
6807 enough:
6808 if (SvCUR(stuff)) {
3280af22 6809 PL_expect = XTERM;
79072805 6810 if (needargs) {
3280af22
NIS
6811 PL_lex_state = LEX_NORMAL;
6812 PL_nextval[PL_nexttoke].ival = 0;
79072805
LW
6813 force_next(',');
6814 }
a0d0e21e 6815 else
3280af22
NIS
6816 PL_lex_state = LEX_FORMLINE;
6817 PL_nextval[PL_nexttoke].opval = (OP*)newSVOP(OP_CONST, 0, stuff);
79072805 6818 force_next(THING);
3280af22 6819 PL_nextval[PL_nexttoke].ival = OP_FORMLINE;
79072805 6820 force_next(LSTOP);
378cc40b 6821 }
79072805 6822 else {
8990e307 6823 SvREFCNT_dec(stuff);
3280af22
NIS
6824 PL_lex_formbrack = 0;
6825 PL_bufptr = s;
79072805
LW
6826 }
6827 return s;
378cc40b 6828}
a687059c 6829
76e3520e 6830STATIC void
cea2e8a9 6831S_set_csh(pTHX)
a687059c 6832{
ae986130 6833#ifdef CSH
3280af22
NIS
6834 if (!PL_cshlen)
6835 PL_cshlen = strlen(PL_cshname);
ae986130 6836#endif
a687059c 6837}
463ee0b2 6838
ba6d6ac9 6839I32
864dbfa3 6840Perl_start_subparse(pTHX_ I32 is_format, U32 flags)
8990e307 6841{
11343788 6842 dTHR;
3280af22
NIS
6843 I32 oldsavestack_ix = PL_savestack_ix;
6844 CV* outsidecv = PL_compcv;
748a9306 6845 AV* comppadlist;
8990e307 6846
3280af22
NIS
6847 if (PL_compcv) {
6848 assert(SvTYPE(PL_compcv) == SVt_PVCV);
e9a444f0 6849 }
3280af22
NIS
6850 save_I32(&PL_subline);
6851 save_item(PL_subname);
6852 SAVEI32(PL_padix);
6853 SAVESPTR(PL_curpad);
6854 SAVESPTR(PL_comppad);
6855 SAVESPTR(PL_comppad_name);
6856 SAVESPTR(PL_compcv);
6857 SAVEI32(PL_comppad_name_fill);
6858 SAVEI32(PL_min_intro_pending);
6859 SAVEI32(PL_max_intro_pending);
6860 SAVEI32(PL_pad_reset_pending);
6861
6862 PL_compcv = (CV*)NEWSV(1104,0);
6863 sv_upgrade((SV *)PL_compcv, is_format ? SVt_PVFM : SVt_PVCV);
6864 CvFLAGS(PL_compcv) |= flags;
6865
6866 PL_comppad = newAV();
6867 av_push(PL_comppad, Nullsv);
6868 PL_curpad = AvARRAY(PL_comppad);
6869 PL_comppad_name = newAV();
6870 PL_comppad_name_fill = 0;
6871 PL_min_intro_pending = 0;
6872 PL_padix = 0;
6873 PL_subline = PL_curcop->cop_line;
6d4ff0d2 6874#ifdef USE_THREADS
79cb57f6 6875 av_store(PL_comppad_name, 0, newSVpvn("@_", 2));
533c011a
NIS
6876 PL_curpad[0] = (SV*)newAV();
6877 SvPADMY_on(PL_curpad[0]); /* XXX Needed? */
6d4ff0d2 6878#endif /* USE_THREADS */
748a9306
LW
6879
6880 comppadlist = newAV();
6881 AvREAL_off(comppadlist);
3280af22
NIS
6882 av_store(comppadlist, 0, (SV*)PL_comppad_name);
6883 av_store(comppadlist, 1, (SV*)PL_comppad);
748a9306 6884
3280af22
NIS
6885 CvPADLIST(PL_compcv) = comppadlist;
6886 CvOUTSIDE(PL_compcv) = (CV*)SvREFCNT_inc(outsidecv);
11343788 6887#ifdef USE_THREADS
533c011a
NIS
6888 CvOWNER(PL_compcv) = 0;
6889 New(666, CvMUTEXP(PL_compcv), 1, perl_mutex);
6890 MUTEX_INIT(CvMUTEXP(PL_compcv));
11343788 6891#endif /* USE_THREADS */
748a9306 6892
8990e307
LW
6893 return oldsavestack_ix;
6894}
6895
6896int
864dbfa3 6897Perl_yywarn(pTHX_ char *s)
8990e307 6898{
11343788 6899 dTHR;
3280af22 6900 --PL_error_count;
faef0170 6901 PL_in_eval |= EVAL_WARNONLY;
748a9306 6902 yyerror(s);
faef0170 6903 PL_in_eval &= ~EVAL_WARNONLY;
748a9306 6904 return 0;
8990e307
LW
6905}
6906
6907int
864dbfa3 6908Perl_yyerror(pTHX_ char *s)
463ee0b2 6909{
11343788 6910 dTHR;
68dc0745 6911 char *where = NULL;
6912 char *context = NULL;
6913 int contlen = -1;
46fc3d4c 6914 SV *msg;
463ee0b2 6915
3280af22 6916 if (!yychar || (yychar == ';' && !PL_rsfp))
54310121 6917 where = "at EOF";
3280af22
NIS
6918 else if (PL_bufptr > PL_oldoldbufptr && PL_bufptr - PL_oldoldbufptr < 200 &&
6919 PL_oldoldbufptr != PL_oldbufptr && PL_oldbufptr != PL_bufptr) {
6920 while (isSPACE(*PL_oldoldbufptr))
6921 PL_oldoldbufptr++;
6922 context = PL_oldoldbufptr;
6923 contlen = PL_bufptr - PL_oldoldbufptr;
463ee0b2 6924 }
3280af22
NIS
6925 else if (PL_bufptr > PL_oldbufptr && PL_bufptr - PL_oldbufptr < 200 &&
6926 PL_oldbufptr != PL_bufptr) {
6927 while (isSPACE(*PL_oldbufptr))
6928 PL_oldbufptr++;
6929 context = PL_oldbufptr;
6930 contlen = PL_bufptr - PL_oldbufptr;
463ee0b2
LW
6931 }
6932 else if (yychar > 255)
68dc0745 6933 where = "next token ???";
463ee0b2 6934 else if ((yychar & 127) == 127) {
3280af22
NIS
6935 if (PL_lex_state == LEX_NORMAL ||
6936 (PL_lex_state == LEX_KNOWNEXT && PL_lex_defer == LEX_NORMAL))
68dc0745 6937 where = "at end of line";
3280af22 6938 else if (PL_lex_inpat)
68dc0745 6939 where = "within pattern";
463ee0b2 6940 else
68dc0745 6941 where = "within string";
463ee0b2 6942 }
46fc3d4c 6943 else {
79cb57f6 6944 SV *where_sv = sv_2mortal(newSVpvn("next char ", 10));
46fc3d4c 6945 if (yychar < 32)
cea2e8a9 6946 Perl_sv_catpvf(aTHX_ where_sv, "^%c", toCTRL(yychar));
46fc3d4c 6947 else if (isPRINT_LC(yychar))
cea2e8a9 6948 Perl_sv_catpvf(aTHX_ where_sv, "%c", yychar);
463ee0b2 6949 else
cea2e8a9 6950 Perl_sv_catpvf(aTHX_ where_sv, "\\%03o", yychar & 255);
46fc3d4c 6951 where = SvPVX(where_sv);
463ee0b2 6952 }
46fc3d4c 6953 msg = sv_2mortal(newSVpv(s, 0));
cf2093f6
JH
6954#ifdef IV_IS_QUAD
6955 Perl_sv_catpvf(aTHX_ msg, " at %_ line %" PERL_PRId64 ", ",
6956 GvSV(PL_curcop->cop_filegv), (IV)PL_curcop->cop_line);
6957#else
cea2e8a9 6958 Perl_sv_catpvf(aTHX_ msg, " at %_ line %ld, ",
cf2093f6
JH
6959 GvSV(PL_curcop->cop_filegv), (long)PL_curcop->cop_line);
6960#endif
68dc0745 6961 if (context)
cea2e8a9 6962 Perl_sv_catpvf(aTHX_ msg, "near \"%.*s\"\n", contlen, context);
463ee0b2 6963 else
cea2e8a9 6964 Perl_sv_catpvf(aTHX_ msg, "%s\n", where);
3280af22 6965 if (PL_multi_start < PL_multi_end && (U32)(PL_curcop->cop_line - PL_multi_end) <= 1) {
cf2093f6
JH
6966#ifdef IV_IS_QUAD
6967 Perl_sv_catpvf(aTHX_ msg,
6968 " (Might be a runaway multi-line %c%c string starting on line %" PERL_\
6969PRId64 ")\n",
6970 (int)PL_multi_open,(int)PL_multi_close,(IV)PL_multi_start);
6971#else
6972 Perl_sv_catpvf(aTHX_ msg,
6973 " (Might be a runaway multi-line %c%c string starting on line %ld)\n",
6974 (int)PL_multi_open,(int)PL_multi_close,(long)PL_multi_start);
6975#endif
3280af22 6976 PL_multi_end = 0;
a0d0e21e 6977 }
faef0170 6978 if (PL_in_eval & EVAL_WARNONLY)
cea2e8a9 6979 Perl_warn(aTHX_ "%_", msg);
3280af22 6980 else if (PL_in_eval)
38a03e6e 6981 sv_catsv(ERRSV, msg);
463ee0b2 6982 else
46fc3d4c 6983 PerlIO_write(PerlIO_stderr(), SvPVX(msg), SvCUR(msg));
3280af22 6984 if (++PL_error_count >= 10)
cea2e8a9 6985 Perl_croak(aTHX_ "%_ has too many errors.\n", GvSV(PL_curcop->cop_filegv));
3280af22
NIS
6986 PL_in_my = 0;
6987 PL_in_my_stash = Nullhv;
463ee0b2
LW
6988 return 0;
6989}
4e35701f 6990
161b471a 6991
51371543
GS
6992#ifdef PERL_OBJECT
6993#define NO_XSLOCKS
6994#include "XSUB.h"
6995#endif
6996
ffb4593c
NT
6997/*
6998 * restore_rsfp
6999 * Restore a source filter.
7000 */
7001
51371543
GS
7002static void
7003restore_rsfp(pTHXo_ void *f)
7004{
7005 PerlIO *fp = (PerlIO*)f;
7006
7007 if (PL_rsfp == PerlIO_stdin())
7008 PerlIO_clearerr(PL_rsfp);
7009 else if (PL_rsfp && (PL_rsfp != fp))
7010 PerlIO_close(PL_rsfp);
7011 PL_rsfp = fp;
7012}
7013
ffb4593c
NT
7014/*
7015 * restore_expect
7016 * Restores the state of PL_expect when the lexing that begun with a
7017 * start_lex() call has ended.
7018 */
7019
51371543
GS
7020static void
7021restore_expect(pTHXo_ void *e)
7022{
7023 /* a safe way to store a small integer in a pointer */
7024 PL_expect = (expectation)((char *)e - PL_tokenbuf);
7025}
7026
ffb4593c
NT
7027/*
7028 * restore_lex_expect
7029 * Restores the state of PL_lex_expect when the lexing that begun with a
7030 * start_lex() call has ended.
7031 */
7032
51371543
GS
7033static void
7034restore_lex_expect(pTHXo_ void *e)
7035{
7036 /* a safe way to store a small integer in a pointer */
7037 PL_lex_expect = (expectation)((char *)e - PL_tokenbuf);
7038}