X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/a1e27170fc118bb226e97988b42fb9a970689740..248ec5921d4dcf7e0bc87ed86231768fd3d0c60d:/pp_ctl.c diff --git a/pp_ctl.c b/pp_ctl.c index 50db9a8..011da56 100644 --- a/pp_ctl.c +++ b/pp_ctl.c @@ -165,7 +165,8 @@ PP(pp_regcomp) } - if (TAINTING_get && TAINT_get) { + assert(TAINTING_get || !TAINT_get); + if (TAINT_get) { SvTAINTED_on((SV*)new_re); RX_TAINT_on(new_re); } @@ -928,35 +929,29 @@ PP(pp_grepstart) dSP; SV *src; - if (PL_stack_base + *PL_markstack_ptr == SP) { + if (PL_stack_base + TOPMARK == SP) { (void)POPMARK; if (GIMME_V == G_SCALAR) mXPUSHi(0); RETURNOP(PL_op->op_next->op_next); } - PL_stack_sp = PL_stack_base + *PL_markstack_ptr + 1; + PL_stack_sp = PL_stack_base + TOPMARK + 1; Perl_pp_pushmark(aTHX); /* push dst */ Perl_pp_pushmark(aTHX); /* push src */ ENTER_with_name("grep"); /* enter outer scope */ SAVETMPS; - if (PL_op->op_private & OPpGREP_LEX) - SAVESPTR(PAD_SVl(PL_op->op_targ)); - else - SAVE_DEFSV; + SAVE_DEFSV; ENTER_with_name("grep_item"); /* enter inner scope */ SAVEVPTR(PL_curpm); - src = PL_stack_base[*PL_markstack_ptr]; + src = PL_stack_base[TOPMARK]; if (SvPADTMP(src)) { - src = PL_stack_base[*PL_markstack_ptr] = sv_mortalcopy(src); + src = PL_stack_base[TOPMARK] = sv_mortalcopy(src); PL_tmps_floor++; } SvTEMP_off(src); - if (PL_op->op_private & OPpGREP_LEX) - PAD_SVl(PL_op->op_targ) = src; - else - DEFSV_set(src); + DEFSV_set(src); PUTBACK; if (PL_op->op_type == OP_MAPSTART) @@ -968,7 +963,7 @@ PP(pp_mapwhile) { dSP; const I32 gimme = GIMME_V; - I32 items = (SP - PL_stack_base) - *PL_markstack_ptr; /* how many new items */ + I32 items = (SP - PL_stack_base) - TOPMARK; /* how many new items */ I32 count; I32 shift; SV** src; @@ -1069,7 +1064,7 @@ PP(pp_mapwhile) LEAVE_with_name("grep_item"); /* exit inner scope */ /* All done yet? */ - if (PL_markstack_ptr[-1] > *PL_markstack_ptr) { + if (PL_markstack_ptr[-1] > TOPMARK) { (void)POPMARK; /* pop top */ LEAVE_with_name("grep"); /* exit outer scope */ @@ -1078,15 +1073,8 @@ PP(pp_mapwhile) (void)POPMARK; /* pop dst */ SP = PL_stack_base + POPMARK; /* pop original mark */ if (gimme == G_SCALAR) { - if (PL_op->op_private & OPpGREP_LEX) { - SV* sv = sv_newmortal(); - sv_setiv(sv, items); - PUSHs(sv); - } - else { dTARGET; XPUSHi(items); - } } else if (gimme == G_ARRAY) SP += items; @@ -1104,10 +1092,7 @@ PP(pp_mapwhile) src = sv_mortalcopy(src); } SvTEMP_off(src); - if (PL_op->op_private & OPpGREP_LEX) - PAD_SVl(PL_op->op_targ) = src; - else - DEFSV_set(src); + DEFSV_set(src); RETURNOP(cLOGOP->op_other); } @@ -1823,7 +1808,7 @@ PP(pp_caller) cx->blk_sub.retop, TRUE); if (!lcop) lcop = cx->blk_oldcop; - mPUSHi((I32)CopLINE(lcop)); + mPUSHu(CopLINE(lcop)); if (!has_arg) RETURN; if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) { @@ -3161,8 +3146,8 @@ S_docatch(pTHX_ OP *o) =for apidoc find_runcv Locate the CV corresponding to the currently executing sub or eval. -If db_seqp is non_null, skip CVs that are in the DB package and populate -*db_seqp with the cop sequence number at the point that the DB:: code was +If C is non_null, skip CVs that are in the DB package and populate +C<*db_seqp> with the cop sequence number at the point that the DB:: code was entered. (This allows debuggers to eval in the scope of the breakpoint rather than in the scope of the debugger itself.) @@ -3497,11 +3482,14 @@ S_check_type_and_open(pTHX_ SV *name) /* checking here captures a reasonable error message when * PERL_DISABLE_PMC is true, but when PMC checks are enabled, the * user gets a confusing message about looking for the .pmc file - * rather than for the .pm file. + * rather than for the .pm file so do the check in S_doopen_pm when + * PMC is on instead of here. S_doopen_pm calls this func. * This check prevents a \0 in @INC causing problems. */ +#ifdef PERL_DISABLE_PMC if (!IS_SAFE_PATHNAME(p, len, "require")) return NULL; +#endif /* on Win32 stat is expensive (it does an open() and close() twice and a couple other IO calls), the open will fail with a dir on its own with @@ -3557,13 +3545,14 @@ S_doopen_pm(pTHX_ SV *name) if (namelen > 3 && memEQs(p + namelen - 3, 3, ".pm")) { SV *const pmcsv = sv_newmortal(); - Stat_t pmcstat; + PerlIO * pmcio; SvSetSV_nosteal(pmcsv,name); sv_catpvs(pmcsv, "c"); - if (PerlLIO_stat(SvPV_nolen_const(pmcsv), &pmcstat) >= 0) - return check_type_and_open(pmcsv); + pmcio = check_type_and_open(pmcsv); + if (pmcio) + return pmcio; } return check_type_and_open(name); } @@ -4356,15 +4345,9 @@ PP(pp_entergiven) ENTER_with_name("given"); SAVETMPS; - if (PL_op->op_targ) { - SAVEPADSVANDMORTALIZE(PL_op->op_targ); - SvREFCNT_dec(PAD_SVl(PL_op->op_targ)); - PAD_SVl(PL_op->op_targ) = SvREFCNT_inc_NN(POPs); - } - else { - SAVE_DEFSV; - DEFSV_set(POPs); - } + assert(!PL_op->op_targ); /* used to be set for lexical $_ */ + SAVE_DEFSV; + DEFSV_set(POPs); PUSHBLOCK(cx, CXt_GIVEN, SP); PUSHGIVEN(cx);