X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=op.c;h=98239d9dd80cdcb243e0b2e07fe0670174fb1978;hb=78da6883f07d155aeb421dce0d6958c4526de8e6;hp=92d15da3a1aeb49604f585b4c0e7114c67611218;hpb=a27978d3b51a1694fbb3bf9d13a41f0518386f5c;p=p5sagit%2Fp5-mst-13.2.git diff --git a/op.c b/op.c index 92d15da..98239d9 100644 --- a/op.c +++ b/op.c @@ -842,12 +842,12 @@ clear_pmop: lastpmop = pmop; pmop = pmop->op_pmnext; } + } #ifdef USE_ITHREADS - Safefree(PmopSTASHPV(cPMOPo)); + Safefree(PmopSTASHPV(cPMOPo)); #else - /* NOTE: PMOP.op_pmstash is not refcounted */ + /* NOTE: PMOP.op_pmstash is not refcounted */ #endif - } } cPMOPo->op_pmreplroot = Nullop; ReREFCNT_dec(PM_GETRE(cPMOPo)); @@ -2948,7 +2948,16 @@ Perl_newPMOP(pTHX_ I32 type, I32 flags) pmop->op_pmpermflags |= PMf_LOCALE; pmop->op_pmflags = pmop->op_pmpermflags; - /* link into pm list */ + #ifdef USE_ITHREADS + { + SV* repointer = newSViv(0); + av_push(PL_regex_padav,SvREFCNT_inc(repointer)); + pmop->op_pmoffset = av_len(PL_regex_padav); + PL_regex_pad = AvARRAY(PL_regex_padav); + } + #endif + + /* link into pm list */ if (type != OP_TRANS && PL_curstash) { pmop->op_pmnext = HvPMROOT(PL_curstash); HvPMROOT(PL_curstash) = pmop; @@ -3193,6 +3202,7 @@ Perl_package(pTHX_ OP *o) op_free(o); } else { + deprecate("\"package\" with no arguments"); sv_setpv(PL_curstname,""); PL_curstash = Nullhv; } @@ -4160,9 +4170,10 @@ Perl_cv_undef(pTHX_ CV *cv) #ifdef USE_ITHREADS if (CvFILE(cv) && !CvXSUB(cv)) { + /* for XSUBs CvFILE point directly to static memory; __FILE__ */ Safefree(CvFILE(cv)); - CvFILE(cv) = 0; } + CvFILE(cv) = 0; #endif if (!CvXSUB(cv) && CvROOT(cv)) { @@ -6117,39 +6128,6 @@ Perl_ck_null(pTHX_ OP *o) } OP * -Perl_ck_octmode(pTHX_ OP *o) -{ - OP *p; - - if ((ckWARN(WARN_OCTMODE) - /* Add WARN_MKDIR instead of getting rid of WARN_{CHMOD,UMASK}. - Backwards compatibility and consistency are terrible things. - AMS 20010705 */ - || (o->op_type == OP_CHMOD && ckWARN(WARN_CHMOD)) - || (o->op_type == OP_UMASK && ckWARN(WARN_UMASK)) - || (o->op_type == OP_MKDIR && ckWARN(WARN_MKDIR))) - && o->op_flags & OPf_KIDS) - { - if (o->op_type == OP_MKDIR) - p = cLISTOPo->op_last; /* mkdir $foo, 0777 */ - else if (o->op_type == OP_CHMOD) - p = cLISTOPo->op_first->op_sibling; /* chmod 0777, $foo */ - else - p = cUNOPo->op_first; /* umask 0222 */ - - if (p->op_type == OP_CONST && !(p->op_private & OPpCONST_OCTAL)) { - int mode = SvIV(cSVOPx_sv(p)); - - Perl_warner(aTHX_ WARN_OCTMODE, - "Non-octal literal mode (%d) specified", mode); - Perl_warner(aTHX_ WARN_OCTMODE, - "\t(Did you mean 0%d instead?)\n", mode); - } - } - return ck_fun(o); -} - -OP * Perl_ck_open(pTHX_ OP *o) { HV *table = GvHV(PL_hintgv);