Eliminate xpad_cop_seq from _xnvu union
authorDavid Mitchell <davem@iabyn.com>
Tue, 27 Sep 2016 13:50:25 +0000 (14:50 +0100)
committerDavid Mitchell <davem@iabyn.com>
Tue, 27 Sep 2016 14:57:44 +0000 (15:57 +0100)
PVNV's used to be used to hold pad names (like '$lex'), but aren't used
for this purpose any more. So eliminate the xpad_cop_seq part of the
union.

Since S_scan_subst() was using xnv_u.xpad_cop_seq.xlow to store a
temporary line count, add a new union member for that.

The main usage of this field on CPAN is to define
COP_SEQ_RANGE_LOW()-style macros, so if the module is still using
xpad_cop_seq for that purpose, it's already broken.

pad.c
sv.h
toke.c

diff --git a/pad.c b/pad.c
index bcbf95b..e810ccd 100644 (file)
--- a/pad.c
+++ b/pad.c
@@ -1066,8 +1066,8 @@ associated with the C<PARENT_FAKELEX_FLAGS> field of a fake pad name.
 Note that C<pad_findlex()> is recursive; it recurses up the chain of CVs,
 then comes back down, adding fake entries
 as it goes.  It has to be this way
-because fake names in anon protoypes have to store in C<xlow> the index into
-the parent pad.
+because fake names in anon protoypes have to store in C<xpadn_low> the
+index into the parent pad.
 
 =cut
 */
diff --git a/sv.h b/sv.h
index 07719a6..7f43f3b 100644 (file)
--- a/sv.h
+++ b/sv.h
@@ -487,10 +487,7 @@ perform the upgrade if necessary.  See C<L</svtype>>.
 union _xnvu {
     NV     xnv_nv;             /* numeric value, if any */
     HV *    xgv_stash;
-    struct {
-       U32 xlow;
-       U32 xhigh;
-    }      xpad_cop_seq;       /* used by pad.c for cop_sequence */
+    line_t  xnv_lines;           /* used internally by S_scan_subst() */
 };
 
 union _xivu {
diff --git a/toke.c b/toke.c
index 5fed84d..d44d36a 100644 (file)
--- a/toke.c
+++ b/toke.c
@@ -2493,7 +2493,7 @@ S_sublex_done(pTHX)
        }
        if (SvTYPE(PL_linestr) >= SVt_PVNV) {
            CopLINE(PL_curcop) +=
-               ((XPVNV*)SvANY(PL_linestr))->xnv_u.xpad_cop_seq.xlow
+               ((XPVNV*)SvANY(PL_linestr))->xnv_u.xnv_lines
                 + PL_parser->herelines;
            PL_parser->herelines = 0;
        }
@@ -9429,7 +9429,7 @@ S_scan_subst(pTHX_ char *start)
     }
     if (CopLINE(PL_curcop) != first_line) {
        sv_upgrade(PL_parser->lex_sub_repl, SVt_PVNV);
-       ((XPVNV*)SvANY(PL_parser->lex_sub_repl))->xnv_u.xpad_cop_seq.xlow =
+       ((XPVNV*)SvANY(PL_parser->lex_sub_repl))->xnv_u.xnv_lines =
            CopLINE(PL_curcop) - first_line;
        CopLINE_set(PL_curcop, first_line);
     }