summaryrefslogtreecommitdiff
path: root/op.c
diff options
context:
space:
mode:
authorIlmari Karonen <iltzu@sci.fi>2001-08-19 22:27:33 +0300
committerAbhijit Menon-Sen <ams@wiw.org>2001-09-02 02:54:50 +0000
commitd8a34499b0ed1aed7c7d5741ef20a99cbe385896 (patch)
tree5d35d053cbc29fc49fb0832f2e75bedd29f4497b /op.c
parent94bf5962d98bd99abeac287cb07a0bfb42e8b55f (diff)
downloadperl-d8a34499b0ed1aed7c7d5741ef20a99cbe385896.tar.gz
RE: [PATCH] Add a nextstate into empty blocks
Message-Id: <Pine.SOL.3.96.1010819163840.8384B-100000@simpukka> (op/sub_lval.t updated to take new error message into account.) p4raw-id: //depot/perl@11822
Diffstat (limited to 'op.c')
-rw-r--r--op.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/op.c b/op.c
index d86f47bd5a..f167a666c4 100644
--- a/op.c
+++ b/op.c
@@ -2155,7 +2155,10 @@ OP*
Perl_block_end(pTHX_ I32 floor, OP *seq)
{
int needblockscope = PL_hints & HINT_BLOCK_SCOPE;
- OP* retval = scalarseq(seq);
+ line_t copline = PL_copline;
+ /* there should be a nextstate in every block */
+ OP* retval = seq ? scalarseq(seq) : newSTATEOP(0, Nullch, seq);
+ PL_copline = copline; /* XXX newSTATEOP may reset PL_copline */
LEAVE_SCOPE(floor);
PL_pad_reset_pending = FALSE;
PL_compiling.op_private = PL_hints;
@@ -4704,7 +4707,8 @@ Perl_newATTRSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
&& (!const_sv || sv_cmp(cv_const_sv(cv), const_sv))))
{
line_t oldline = CopLINE(PL_curcop);
- CopLINE_set(PL_curcop, PL_copline);
+ if (PL_copline != NOLINE)
+ CopLINE_set(PL_curcop, PL_copline);
Perl_warner(aTHX_ WARN_REDEFINE,
CvCONST(cv) ? "Constant subroutine %s redefined"
: "Subroutine %s redefined", name);
@@ -5177,8 +5181,8 @@ Perl_newFORM(pTHX_ I32 floor, OP *o, OP *block)
if ((cv = GvFORM(gv))) {
if (ckWARN(WARN_REDEFINE)) {
line_t oldline = CopLINE(PL_curcop);
-
- CopLINE_set(PL_curcop, PL_copline);
+ if (PL_copline != NOLINE)
+ CopLINE_set(PL_curcop, PL_copline);
Perl_warner(aTHX_ WARN_REDEFINE, "Format %s redefined",name);
CopLINE_set(PL_curcop, oldline);
}