diff options
author | Artur Bergman <sky@nanisky.com> | 2003-10-30 22:01:35 +0000 |
---|---|---|
committer | Nicholas Clark <nick@ccl4.org> | 2003-10-30 22:18:53 +0000 |
commit | 2d981f2701e9f92843f194f91d9b984eefa4793e (patch) | |
tree | d300f345d05dd8b67c79e737892eb0b9fbe5cc85 | |
parent | d8012aafdb274a91ce4d5cb2e6453548a3aa2dd5 (diff) | |
download | perl-2d981f2701e9f92843f194f91d9b984eefa4793e.tar.gz |
Fix for the orange lion bug - aka empty sub bug
Message-Id: <A10EEA90-0B24-11D8-93CD-000A95A2734C@nanisky.com>
p4raw-id: //depot/perl@21582
-rw-r--r-- | MANIFEST | 1 | ||||
-rw-r--r-- | op.c | 11 | ||||
-rw-r--r-- | t/op/sub.t | 19 |
3 files changed, 31 insertions, 0 deletions
@@ -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 @@ -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 0000000000..b76d34cb72 --- /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'); + |