Clean up Darwin hints
[p5sagit/p5-mst-13.2.git] / op.c
diff --git a/op.c b/op.c
index 28c93d8..62309a1 100644 (file)
--- a/op.c
+++ b/op.c
@@ -2951,7 +2951,7 @@ Perl_newPMOP(pTHX_ I32 type, I32 flags)
  #ifdef USE_ITHREADS
         {
                 SV* repointer = newSViv(0);
-                av_push(PL_regex_padav,repointer);
+                av_push(PL_regex_padav,SvREFCNT_inc(repointer));
                 pmop->op_pmoffset = av_len(PL_regex_padav);
                 PL_regex_pad = AvARRAY(PL_regex_padav);
         }
@@ -4750,6 +4750,8 @@ Perl_newATTRSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
        }
        /* ... before we throw it away */
        SvREFCNT_dec(PL_compcv);
+       if (PERLDB_INTER)/* Advice debugger on the new sub. */
+         ++PL_sub_generation;
     }
     else {
        cv = PL_compcv;
@@ -6779,7 +6781,15 @@ Perl_peep(pTHX_ register OP *o)
            {
                PL_curcop = ((COP*)o);
            }
-           goto nothin;
+           /* XXX: We avoid setting op_seq here to prevent later calls
+              to peep() from mistakenly concluding that optimisation
+              has already occurred. This doesn't fix the real problem,
+              though (See 20010220.007). AMS 20010719 */
+           if (oldop && o->op_next) {
+               oldop->op_next = o->op_next;
+               continue;
+           }
+           break;
        case OP_SCALAR:
        case OP_LINESEQ:
        case OP_SCOPE: