X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/9dcb836830f7b4b182872b1181fb344b559c1d2e..df4833a805257d77e95c7fd839a7761a513edcb3:/toke.c diff --git a/toke.c b/toke.c index 1e4beee..ef215a5 100644 --- a/toke.c +++ b/toke.c @@ -7059,8 +7059,7 @@ Perl_yylex(pTHX) Perl_croak(aTHX_ "CORE::%s is not a keyword", PL_tokenbuf); if (tmp < 0) tmp = -tmp; - if (tmp == KEY_require || tmp == KEY_do || - tmp == KEY_continue) + else if (tmp == KEY_require || tmp == KEY_do) /* that's a way to remember we saw "CORE::" */ orig_keyword = tmp; goto reserved_word; @@ -7100,14 +7099,6 @@ Perl_yylex(pTHX) UNI(OP_CHOP); case KEY_continue: - /* When 'use switch' is in effect or when - prefixed with CORE::, continue has a dual - life as a control operator. */ - { - if ( !FEATURE_IS_ENABLED("switch") - && orig_keyword != KEY_continue ) - PREBLOCK(CONTINUE); - else { /* We have to disambiguate the two senses of "continue". If the next token is a '{' then treat it as the start of a continue block; @@ -7118,8 +7109,6 @@ Perl_yylex(pTHX) PREBLOCK(CONTINUE); else FUN0(OP_CONTINUE); - } - } case KEY_chdir: /* may use HOME */ @@ -7656,7 +7645,8 @@ Perl_yylex(pTHX) missingterm(NULL); PL_expect = XOPERATOR; if (SvCUR(PL_lex_stuff)) { - int warned = 0; + int warned_comma = !ckWARN(WARN_QW); + int warned_comment = warned_comma; d = SvPV_force(PL_lex_stuff, len); while (len) { for (; isSPACE(*d) && len; --len, ++d) @@ -7664,17 +7654,17 @@ Perl_yylex(pTHX) if (len) { SV *sv; const char *b = d; - if (!warned && ckWARN(WARN_QW)) { + if (!warned_comma || !warned_comment) { for (; !isSPACE(*d) && len; --len, ++d) { - if (*d == ',') { + if (!warned_comma && *d == ',') { Perl_warner(aTHX_ packWARN(WARN_QW), "Possible attempt to separate words with commas"); - ++warned; + ++warned_comma; } - else if (*d == '#') { + else if (!warned_comment && *d == '#') { Perl_warner(aTHX_ packWARN(WARN_QW), "Possible attempt to put comments in qw() list"); - ++warned; + ++warned_comment; } } } @@ -8325,7 +8315,7 @@ S_pending_ident(pTHX) yyerror(Perl_form(aTHX_ "No package name allowed for " "variable %s in \"our\"", PL_tokenbuf)); - tmp = allocmy(PL_tokenbuf, tokenbuf_len, 0); + tmp = allocmy(PL_tokenbuf, tokenbuf_len, UTF ? SVf_UTF8 : 0); } else { if (has_colon) @@ -8333,7 +8323,8 @@ S_pending_ident(pTHX) PL_in_my == KEY_my ? "my" : "state", PL_tokenbuf)); pl_yylval.opval = newOP(OP_PADANY, 0); - pl_yylval.opval->op_targ = allocmy(PL_tokenbuf, tokenbuf_len, 0); + pl_yylval.opval->op_targ = allocmy(PL_tokenbuf, tokenbuf_len, + UTF ? SVf_UTF8 : 0); return PRIVATEREF; } } @@ -8352,7 +8343,8 @@ S_pending_ident(pTHX) if (!has_colon) { if (!PL_in_my) - tmp = pad_findmy(PL_tokenbuf, tokenbuf_len, 0); + tmp = pad_findmy_pvn(PL_tokenbuf, tokenbuf_len, + UTF ? SVf_UTF8 : 0); if (tmp != NOT_IN_PAD) { /* might be an "our" variable" */ if (PAD_COMPNAME_FLAGS_isOUR(tmp)) { @@ -9572,7 +9564,7 @@ S_scan_inputsymbol(pTHX_ char *start) /* try to find it in the pad for this block, otherwise find add symbol table ops */ - const PADOFFSET tmp = pad_findmy(d, len, 0); + const PADOFFSET tmp = pad_findmy_pvn(d, len, UTF ? SVf_UTF8 : 0); if (tmp != NOT_IN_PAD) { if (PAD_COMPNAME_FLAGS_isOUR(tmp)) { HV * const stash = PAD_COMPNAME_OURSTASH(tmp);