Re: [patch] re_dup
[p5sagit/p5-mst-13.2.git] / op.c
diff --git a/op.c b/op.c
index 92d15da..98239d9 100644 (file)
--- 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,"<none>");
        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);