From: Artur Bergman Date: Thu, 30 Oct 2003 22:01:35 +0000 (+0000) Subject: Fix for the orange lion bug - aka empty sub bug X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=2d981f2701e9f92843f194f91d9b984eefa4793e;p=p5sagit%2Fp5-mst-13.2.git Fix for the orange lion bug - aka empty sub bug Message-Id: p4raw-id: //depot/perl@21582 --- diff --git a/MANIFEST b/MANIFEST index d7ad32c..f3b3ba5 100644 --- a/MANIFEST +++ b/MANIFEST @@ -2797,6 +2797,7 @@ t/op/srand.t See if srand works t/op/stash.t See if %:: stashes work t/op/stat.t See if stat works t/op/study.t See if study works +t/op/sub.t See if subroutines work t/op/sub_lval.t See if lvalue subroutines work t/op/subst_amp.t See if $&-related substitution works t/op/substr.t See if substr works diff --git a/op.c b/op.c index 6dc36ca..6beeae0 100644 --- a/op.c +++ b/op.c @@ -6277,6 +6277,17 @@ Perl_peep(pTHX_ register OP *o) o->op_seq = PL_op_seqmax++; break; case OP_STUB: + 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 */ diff --git a/t/op/sub.t b/t/op/sub.t new file mode 100644 index 0000000..b76d34c --- /dev/null +++ b/t/op/sub.t @@ -0,0 +1,19 @@ +#!./perl + +BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; + require Config; import Config; +} + +use Test::More tests => 4; + +sub empty_sub {} + +is(empty_sub,undef,"Is empty"); +is(empty_sub(1,2,3),undef,"Is still empty"); +@test = empty_sub(); +is(scalar(@test), 0, 'Didnt return anything'); +@test = empty_sub(1,2,3); +is(scalar(@test), 0, 'Didnt return anything'); +