summaryrefslogtreecommitdiff
path: root/pad.c
diff options
context:
space:
mode:
authorFather Chrysostomos <sprout@cpan.org>2014-11-27 19:30:06 -0800
committerFather Chrysostomos <sprout@cpan.org>2014-11-30 11:48:40 -0800
commit0aaff5a18f835ca5d9cbbbf6546aff21cc5a9e0e (patch)
tree3f49bfcc1fff249233f72db9e6327980bb8ebb2e /pad.c
parent5e6246a7a7423b3861d3df84462447b1f2032f9c (diff)
downloadperl-0aaff5a18f835ca5d9cbbbf6546aff21cc5a9e0e.tar.gz
Use PADNAME rather than SV in pad.c:pad_check_dup
Diffstat (limited to 'pad.c')
-rw-r--r--pad.c26
1 files changed, 13 insertions, 13 deletions
diff --git a/pad.c b/pad.c
index 1bc9b0a536..d44917c2f5 100644
--- a/pad.c
+++ b/pad.c
@@ -854,7 +854,7 @@ C<is_our> indicates that the name to check is an 'our' declaration.
STATIC void
S_pad_check_dup(pTHX_ PADNAME *name, U32 flags, const HV *ourstash)
{
- SV **svp;
+ PADNAME **svp;
PADOFFSET top, off;
const U32 is_our = flags & padadd_OUR;
@@ -873,22 +873,22 @@ S_pad_check_dup(pTHX_ PADNAME *name, U32 flags, const HV *ourstash)
/* XXX DAPM - why the (I32) cast - shouldn't we ensure they're the same
* type ? */
for (off = top; (I32)off > PL_comppad_name_floor; off--) {
- SV * const sv = svp[off];
+ PADNAME * const sv = svp[off];
if (sv
- && PadnameLEN(sv)
- && !SvFAKE(sv)
+ && PadnameLEN(sv) == PadnameLEN(name)
+ && !PadnameOUTER(sv)
&& ( COP_SEQ_RANGE_LOW(sv) == PERL_PADSEQ_INTRO
|| COP_SEQ_RANGE_HIGH(sv) == PERL_PADSEQ_INTRO)
- && sv_eq((SV *)name, sv))
+ && memEQ(PadnamePV(sv), PadnamePV(name), PadnameLEN(name)))
{
if (is_our && (SvPAD_OUR(sv)))
break; /* "our" masking "our" */
/* diag_listed_as: "%s" variable %s masks earlier declaration in same %s */
Perl_warner(aTHX_ packWARN(WARN_MISC),
- "\"%s\" %s %"SVf" masks earlier declaration in same %s",
+ "\"%s\" %s %"PNf" masks earlier declaration in same %s",
(is_our ? "our" : PL_parser->in_my == KEY_my ? "my" : "state"),
- *SvPVX(sv) == '&' ? "subroutine" : "variable",
- SVfARG(sv),
+ *PadnamePV(sv) == '&' ? "subroutine" : "variable",
+ PNfARG(sv),
(COP_SEQ_RANGE_HIGH(sv) == PERL_PADSEQ_INTRO
? "scope" : "statement"));
--off;
@@ -898,17 +898,17 @@ S_pad_check_dup(pTHX_ PADNAME *name, U32 flags, const HV *ourstash)
/* check the rest of the pad */
if (is_our) {
while (off > 0) {
- SV * const sv = svp[off];
+ PADNAME * const sv = svp[off];
if (sv
- && PadnameLEN(sv)
- && !SvFAKE(sv)
+ && PadnameLEN(sv) == PadnameLEN(name)
+ && !PadnameOUTER(sv)
&& ( COP_SEQ_RANGE_LOW(sv) == PERL_PADSEQ_INTRO
|| COP_SEQ_RANGE_HIGH(sv) == PERL_PADSEQ_INTRO)
&& SvOURSTASH(sv) == ourstash
- && sv_eq((SV *)name, sv))
+ && memEQ(PadnamePV(sv), PadnamePV(name), PadnameLEN(name)))
{
Perl_warner(aTHX_ packWARN(WARN_MISC),
- "\"our\" variable %"SVf" redeclared", SVfARG(sv));
+ "\"our\" variable %"PNf" redeclared", PNfARG(sv));
if ((I32)off <= PL_comppad_name_floor)
Perl_warner(aTHX_ packWARN(WARN_MISC),
"\t(Did you mean \"local\" instead of \"our\"?)\n");