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