Quoted-printable is evil.
[p5sagit/p5-mst-13.2.git] / op.c
diff --git a/op.c b/op.c
index f08e6a3..04df4de 100644 (file)
--- a/op.c
+++ b/op.c
@@ -78,9 +78,9 @@ Perl_Slab_Free(pTHX_ void *op)
     assert( ptr < ( (I32 **) slab + PERL_SLAB_SIZE) );
     assert( *slab > 0 );
     if (--(*slab) == 0) {
-     #ifdef NETWARE
-      #define PerlMemShared PerlMem
-     #endif
+#  ifdef NETWARE
+#    define PerlMemShared PerlMem
+#  endif
        
     PerlMemShared_free(slab);
        if (slab == PL_OpSlab) {
@@ -6277,6 +6277,21 @@ Perl_peep(pTHX_ register OP *o)
            o->op_seq = PL_op_seqmax++;
            break;
        case OP_STUB:
+           /* XXX This makes sub {}; work as expected.
+              ie {return;} not {return @_;}
+              When optimiser is properly split into fixups and
+              optimisations, this needs to stay in the fixups.  */
+           if(!oldop &&
+              o->op_next &&
+              o->op_next->op_type == OP_LEAVESUB) {
+             OP* newop = newSTATEOP(0, Nullch, 0);
+              newop->op_next = o->op_next;
+              o->op_next = 0;
+                      op_free(o);
+              o = newop;
+                      ((UNOP*)o->op_next)->op_first = newop;   
+              CvSTART(PL_compcv) = newop;      
+           }
            if ((o->op_flags & OPf_WANT) != OPf_WANT_LIST) {
                o->op_seq = PL_op_seqmax++;
                break; /* Scalar stub must produce undef.  List stub is noop */