diff options
author | Rafael Garcia-Suarez <rgarciasuarez@gmail.com> | 2005-07-19 14:12:38 +0000 |
---|---|---|
committer | Rafael Garcia-Suarez <rgarciasuarez@gmail.com> | 2005-07-19 14:12:38 +0000 |
commit | 7f73a9f140198d1b3d1c2f2b62d4fd14dc5667c3 (patch) | |
tree | b2b93ed533f5fe20f74d67c1e63e28e1675cbbe4 | |
parent | 4e3bc6ae6a0630a65b9a3f0043bebeeaa828d763 (diff) | |
download | perl-7f73a9f140198d1b3d1c2f2b62d4fd14dc5667c3.tar.gz |
Extend the the "our variable redeclared" warning to the case:
our $x; our $x;
and add more tests
p4raw-id: //depot/perl@25187
-rw-r--r-- | pad.c | 8 | ||||
-rw-r--r-- | t/lib/strict/vars | 6 | ||||
-rw-r--r-- | t/lib/warnings/pad | 62 |
3 files changed, 60 insertions, 16 deletions
@@ -515,9 +515,10 @@ Perl_pad_check_dup(pTHX_ const char *name, bool is_our, const HV *ourstash) && sv != &PL_sv_undef && !SvFAKE(sv) && (SvIVX(sv) == PAD_MAX || SvIVX(sv) == 0) - && !(is_our && (SvFLAGS(sv) & SVpad_OUR)) && strEQ(name, SvPVX_const(sv))) { + if (is_our && (SvFLAGS(sv) & SVpad_OUR)) + break; /* "our" masking "our" */ Perl_warner(aTHX_ packWARN(WARN_MISC), "\"%s\" variable %s masks earlier declaration in same %s", (is_our ? "our" : "my"), @@ -540,8 +541,9 @@ Perl_pad_check_dup(pTHX_ const char *name, bool is_our, const HV *ourstash) { Perl_warner(aTHX_ packWARN(WARN_MISC), "\"our\" variable %s redeclared", name); - Perl_warner(aTHX_ packWARN(WARN_MISC), - "\t(Did you mean \"local\" instead of \"our\"?)\n"); + if (off <= PL_comppad_name_floor) + Perl_warner(aTHX_ packWARN(WARN_MISC), + "\t(Did you mean \"local\" instead of \"our\"?)\n"); break; } } while ( off-- > 0 ); diff --git a/t/lib/strict/vars b/t/lib/strict/vars index 06d9e0059e..16deab9837 100644 --- a/t/lib/strict/vars +++ b/t/lib/strict/vars @@ -372,14 +372,14 @@ EXPECT 20 ######## -# multiple our declarations in same scope, same package, no warning +# multiple our declarations in same scope, same package, warning use strict 'vars'; use warnings; our $foo; ${foo} = 10; our $foo; EXPECT - +"our" variable $foo redeclared at - line 7. ######## # multiple our declarations in same scope, same package, warning @@ -390,12 +390,14 @@ use warnings; our $foo; { our $foo; + our $foo; package Foo; our $foo; } EXPECT "our" variable $foo redeclared at - line 9. (Did you mean "local" instead of "our"?) +"our" variable $foo redeclared at - line 10. ######## --FILE-- abc diff --git a/t/lib/warnings/pad b/t/lib/warnings/pad index f25452f81a..bf5c367fc9 100644 --- a/t/lib/warnings/pad +++ b/t/lib/warnings/pad @@ -1,6 +1,6 @@ pad.c AOK - "my" variable %s masks earlier declaration in same scope + "%s" variable %s masks earlier declaration in same scope my $x; my $x ; @@ -49,16 +49,6 @@ EXPECT # pad.c use warnings 'misc' ; our $x ; -our $x ; -our $y = our $y ; -our $p ; -package X ; -our $p ; -EXPECT -######## -# pad.c -use warnings 'misc' ; -our $x ; my $x ; our $y = my $y ; our $p ; @@ -244,20 +234,53 @@ my $x; } EXPECT ######## +# pad.c +use warnings 'misc' ; +our $x ; +our $x ; +our $y = our $y ; +our $p ; +package X ; +our $p ; +package main ; +no warnings 'misc' ; +our $a ; +our $a ; +our $b = our $b ; +our $c ; +package X ; +our $c ; +EXPECT +"our" variable $x redeclared at - line 4. +"our" variable $y redeclared at - line 5. +######## use warnings 'misc' ; our $x; { our $x; } +our $x; +no warnings 'misc' ; +our $y; +{ + our $y; +} +our $y; EXPECT "our" variable $x redeclared at - line 4. (Did you mean "local" instead of "our"?) +"our" variable $x redeclared at - line 6. ######## use warnings 'misc' ; our $x; { my $x; } +no warnings 'misc' ; +our $y; +{ + my $y; +} EXPECT ######## use warnings 'misc' ; @@ -265,6 +288,23 @@ my $x; { our $x; } +no warnings 'misc' ; +my $y; +{ + our $y; +} +EXPECT +######## +use warnings 'misc' ; +my $x; +{ + my $x; +} +no warnings 'misc' ; +my $y; +{ + my $y; +} EXPECT ######## # an our var being introduced should suppress errors about global syms |