X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/7b52d6569c115e4522e1cbe14cfd730e60c84bf1..a2373b32b1b1b8979cf9c5bb27478555d4ac2bde:/pp_hot.c diff --git a/pp_hot.c b/pp_hot.c index 5eedf24..1094510 100644 --- a/pp_hot.c +++ b/pp_hot.c @@ -76,7 +76,8 @@ PP(pp_null) return NORMAL; } -/* This is sometimes called directly by pp_coreargs and pp_grepstart. */ +/* This is sometimes called directly by pp_coreargs, pp_grepstart and + amagic_call. */ PP(pp_pushmark) { PUSHMARK(PL_stack_sp); @@ -1632,8 +1633,7 @@ Perl_do_readline(pTHX) if (gimme == G_SCALAR) { /* undef TARG, and push that undefined value */ if (type != OP_RCATLINE) { - SV_CHECK_THINKFIRST_COW_DROP(TARG); - SvOK_off(TARG); + sv_setsv(TARG,NULL); } PUSHTARG; } @@ -1877,14 +1877,14 @@ S_softref2xv_lite(pTHX_ SV *const sv, const char *const what, } -/* handle one or more derefs and array/hash indexings, e.g. - * $h->{foo} or $a[0]{$key}[$i] or f()->[1] +/* Handle one or more aggregate derefs and array/hash indexings, e.g. + * $h->{foo} or $a[0]{$key}[$i] or f()->[1] * * op_aux points to an array of unions of UV / IV / SV* / PADOFFSET. - * Each of these either contains an action, or an argument, such as - * a UV to use as an array index, or a lexical var to retrieve. - * In fact, several actions re stored per UV; we keep shifting new actions - * of the one UV, and only reload when it becomes zero. + * Each of these either contains a set of actions, or an argument, such as + * an IV to use as an array index, or a lexical var to retrieve. + * Several actions re stored per UV; we keep shifting new actions off the + * one UV, and only reload when it becomes zero. */ PP(pp_multideref) @@ -2947,8 +2947,12 @@ PP(pp_leavesub) PERL_CONTEXT *cx; SV *sv; - if (CxMULTICALL(&cxstack[cxstack_ix])) + if (CxMULTICALL(&cxstack[cxstack_ix])) { + /* entry zero of a stack is always PL_sv_undef, which + * simplifies converting a '()' return into undef in scalar context */ + assert(PL_stack_sp > PL_stack_base || *PL_stack_base == &PL_sv_undef); return 0; + } POPBLOCK(cx,newpm); cxstack_ix++; /* temporarily protect top context */ @@ -3611,11 +3615,5 @@ PP(pp_method_redir_super) } /* - * Local variables: - * c-indentation-style: bsd - * c-basic-offset: 4 - * indent-tabs-mode: nil - * End: - * * ex: set ts=8 sts=4 sw=4 et: */