summaryrefslogtreecommitdiff
path: root/toke.c
diff options
context:
space:
mode:
authorPerl 5 Porters <perl5-porters@africa.nicoh.com>1996-11-30 05:31:00 +1200
committerChip Salzenberg <chip@atlantic.net>1996-11-30 05:31:00 +1200
commitff68c7194e176ca1907544a3a65684b76834d0fe (patch)
tree4124d603a6b2a937f4ce1d9469426f84421f93e0 /toke.c
parenteff9c6e2f5bda63e4dc69fc15e237a9843954369 (diff)
downloadperl-ff68c7194e176ca1907544a3a65684b76834d0fe.tar.gz
[inseparable changes from patch from perl5.003_09 to perl5.003_10]
CORE LANGUAGE CHANGES Subject: Allow &{sub {...}} without warning From: Chip Salzenberg <chip@atlantic.net> Files: toke.c Subject: Make parens optional on [gs]ethost and [gs]et{pw,gr} function From: Chip Salzenberg <chip@atlantic.net> Files: toke.c Subject: Fix syntax error with "$x [0]" and "$x {y}" and "@x {y}" From: Chip Salzenberg <chip@atlantic.net> Files: toke.c DOCUMENTATION Subject: Improve documentation for sysread() and syswrite() From: Chip Salzenberg <chip@atlantic.net> Files: pod/perlfunc.pod Subject: Document how to use $SIG{ALRM} and alarm() Date: Tue, 26 Nov 1996 11:42:49 -0500 From: Roderick Schertler <roderick@ibcinc.com> Files: pod/perlfunc.pod Msg-ID: <5898.849026569@eeyore.ibcinc.com> (applied based on p5p patch as commit 5fa5e7dfc2abaaadd377c97cd1ebe78ea844da88) OTHER CORE CHANGES Subject: Hash key memory corruption fix and naming cleanup From: Chip Salzenberg <chip@atlantic.net> Files: hv.c hv.h perl.h Subject: Undo broken perf. patch (PADTMP stealing) From: Chip Salzenberg <chip@atlantic.net> Files: sv.c Subject: Make SV unstudied in sv_gets() From: Chip Salzenberg <chip@atlantic.net> Files: sv.c Subject: Better support for UVs From: Paul Marquess <pmarquess@bfsec.bt.co.uk> Files: global.sym old_global.sym perl.h pp.c pp.h proto.h sv.c sv.h Subject: Minor locale cleanups From: Chip Salzenberg <chip@atlantic.net> Files: t/lib/posix.t util.c Accept "POSIX" locale as standard like "C". Reset locale to 'C' when testing strtod() in t/lib/posix.t. Subject: Always taint result of sprintf() on float From: Chip Salzenberg <chip@atlantic.net> Files: doop.c Subject: Fix spurious warning from bitwise string ops From: Chip Salzenberg <chip@atlantic.net> Files: doop.c Subject: Eliminate warning on {,sys}read(,$newvar,) From: Chip Salzenberg <chip@atlantic.net> Files: doop.c pp_sys.c Subject: Namespace cleanup From: Chip Salzenberg <chip@atlantic.net> Files: global.sym old_global.sym perl.h Subject: Modify perl_exp.SH; create old_perl_exp.SH; document old_* From: Chip Salzenberg <chip@atlantic.net> Files: Configure INSTALL MANIFEST old_perl_exp.SH perl_exp.SH PORTABILITY Subject: Reliable signal patch Date: Tue, 26 Nov 1996 05:40:50 -0500 (EST) From: Kenneth Albanowski <kjahds@kjahds.com> Files: global.sym mg.c old_global.sym perl.h pp_sys.c proto.h util.c Msg-ID: <Pine.LNX.3.93.961126053209.294J-100000@kjahds.com> (applied based on p5p patch as commit 679728958e74b0ccd6d61567d84851f1ef994e1f) Subject: Emulate missing flock() with either fcntl() or lockf() From: Chip Salzenberg <chip@atlantic.net> Files: pp_sys.c Subject: 3_09: minor patches for OS/2 Date: Wed, 27 Nov 1996 03:30:05 -0500 (EST) From: Ilya Zakharevich <ilya@math.ohio-state.edu> Files: doio.c global.sym malloc.c old_global.sym os2/Makefile.SHs os2/OS2/ExtAttr/Makefile.PL os2/OS2/PrfDB/Makefile.PL os2/OS2/Process/Makefile.PL os2/OS2/REXX/Makefile.PL os2/os2.c os2/os2ish.h perl.h Subject: 3_09: minor patches This patches mostly enable commpilation under OS/2, and fix malloc.c. Enjoy, p5p-msgid: <199611270830.DAA04985@monk.mps.ohio-state.edu> Subject: Re: 5.003_09 and QNX Date: Wed, 27 Nov 96 13:36:06 est From: Norton Allen <nort@bottesini.harvard.edu> Files: Configure MANIFEST README.qnx hints/qnx.sh qnx/ar qnx/cpp t/TEST toke.c util.c x2p/proto.h Msg-ID: <9611271836.AA14460@bottesini.harvard.edu> (applied based on p5p patch as commit c5117498be098729dc2af28089bd130c88c8d42b)
Diffstat (limited to 'toke.c')
-rw-r--r--toke.c33
1 files changed, 18 insertions, 15 deletions
diff --git a/toke.c b/toke.c
index b4c4d9e59a..7dd35cb655 100644
--- a/toke.c
+++ b/toke.c
@@ -1856,7 +1856,7 @@ yylex()
case XOPERATOR:
while (s < bufend && (*s == ' ' || *s == '\t'))
s++;
- if (s < bufend && (isALPHA(*s) || *s == '_')) {
+ if (s < bufend && isIDFIRST(*s)) {
d = scan_word(s, tokenbuf, FALSE, &len);
while (d < bufend && (*d == ' ' || *d == '\t'))
d++;
@@ -2104,6 +2104,10 @@ yylex()
TERM(THING);
}
+ d = s;
+ if (lex_state == LEX_NORMAL)
+ s = skipspace(s);
+
if ((expect != XREF || oldoldbufptr == last_lop) && intuit_more(s)) {
char *t;
if (*s == '[') {
@@ -2139,9 +2143,8 @@ yylex()
}
expect = XOPERATOR;
- if (lex_state == LEX_NORMAL && isSPACE(*s)) {
+ if (lex_state == LEX_NORMAL && isSPACE(*d)) {
bool islop = (last_lop == oldoldbufptr);
- s = skipspace(s);
if (!islop || last_lop_op == OP_GREPSTART)
expect = XOPERATOR;
else if (strchr("$@\"'`q", *s))
@@ -2170,6 +2173,8 @@ yylex()
yyerror("Final @ should be \\@ or @name");
PREREF('@');
}
+ if (lex_state == LEX_NORMAL)
+ s = skipspace(s);
if ((expect != XREF || oldoldbufptr == last_lop) && intuit_more(s)) {
if (*s == '{')
tokenbuf[0] = '%';
@@ -2842,10 +2847,10 @@ yylex()
FUN0(OP_GPWENT);
case KEY_getpwnam:
- FUN1(OP_GPWNAM);
+ UNI(OP_GPWNAM);
case KEY_getpwuid:
- FUN1(OP_GPWUID);
+ UNI(OP_GPWUID);
case KEY_getpeername:
UNI(OP_GETPEERNAME);
@@ -2887,10 +2892,10 @@ yylex()
FUN0(OP_GGRENT);
case KEY_getgrnam:
- FUN1(OP_GGRNAM);
+ UNI(OP_GGRNAM);
case KEY_getgrgid:
- FUN1(OP_GGRGID);
+ UNI(OP_GGRGID);
case KEY_getlogin:
FUN0(OP_GETLOGIN);
@@ -3218,16 +3223,16 @@ yylex()
LOP(OP_SETPRIORITY,XTERM);
case KEY_sethostent:
- FUN1(OP_SHOSTENT);
+ UNI(OP_SHOSTENT);
case KEY_setnetent:
- FUN1(OP_SNETENT);
+ UNI(OP_SNETENT);
case KEY_setservent:
- FUN1(OP_SSERVENT);
+ UNI(OP_SSERVENT);
case KEY_setprotoent:
- FUN1(OP_SPROTOENT);
+ UNI(OP_SPROTOENT);
case KEY_setpwent:
FUN0(OP_SPWENT);
@@ -4261,13 +4266,13 @@ I32 ck_uni;
while (s < send && (*s == ' ' || *s == '\t')) s++;
*d = *s;
}
- if (isALPHA(*d) || *d == '_') {
+ if (isIDFIRST(*d)) {
d++;
while (isALNUM(*s) || *s == ':')
*d++ = *s++;
*d = '\0';
while (s < send && (*s == ' ' || *s == '\t')) s++;
- if ((*s == '[' || *s == '{')) {
+ if ((*s == '[' || (*s == '{' && strNE(dest, "sub")))) {
if (dowarn && keyword(dest, d - dest)) {
char *brack = *s == '[' ? "[...]" : "{...}";
warn("Ambiguous use of %c{%s%s} resolved to %c%s%s",
@@ -4978,11 +4983,9 @@ start_subparse()
CV* outsidecv = compcv;
AV* comppadlist;
-#ifndef __QNX__
if (compcv) {
assert(SvTYPE(compcv) == SVt_PVCV);
}
-#endif
save_I32(&subline);
save_item(subname);
SAVEI32(padix);