diff options
-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'); + |