diff options
Diffstat (limited to 'toke.c')
-rw-r--r-- | toke.c | 34 |
1 files changed, 24 insertions, 10 deletions
@@ -7319,14 +7319,13 @@ Perl_yylex(pTHX) case KEY_quotemeta: UNI(OP_QUOTEMETA); - case KEY_qw: + case KEY_qw: { + OP *words = NULL; s = scan_str(s,!!PL_madskills,FALSE); if (!s) missingterm(NULL); PL_expect = XOPERATOR; - force_next(')'); if (SvCUR(PL_lex_stuff)) { - OP *words = NULL; int warned = 0; d = SvPV_force(PL_lex_stuff, len); while (len) { @@ -7358,18 +7357,17 @@ Perl_yylex(pTHX) newSVOP(OP_CONST, 0, tokeq(sv))); } } - if (words) { - start_force(PL_curforce); - NEXTVAL_NEXTTOKE.opval = words; - force_next(THING); - } } + if (!words) + words = newNULLLIST(); if (PL_lex_stuff) { SvREFCNT_dec(PL_lex_stuff); PL_lex_stuff = NULL; } - PL_expect = XTERM; - TOKEN('('); + PL_expect = XOPERATOR; + pl_yylval.opval = sawparens(words); + TOKEN(QWLIST); + } case KEY_qq: s = scan_str(s,!!PL_madskills,FALSE); @@ -13985,6 +13983,22 @@ Perl_parse_fullstmt(pTHX_ U32 flags) return fullstmtop; } +void +Perl_coerce_qwlist_to_paren_list(pTHX_ OP *qwlist) +{ + PERL_ARGS_ASSERT_COERCE_QWLIST_TO_PAREN_LIST; + deprecate("qw(...) as parentheses"); + force_next(')'); + if (qwlist->op_type == OP_STUB) { + op_free(qwlist); + } + else { + NEXTVAL_NEXTTOKE.opval = qwlist; + force_next(THING); + } + force_next('('); +} + /* * Local variables: * c-indentation-style: bsd |