summaryrefslogtreecommitdiff
path: root/t/lib
diff options
context:
space:
mode:
authorZefram <zefram@fysh.org>2010-09-08 09:51:29 +0200
committerRafael Garcia-Suarez <rgs@consttype.org>2010-09-08 10:15:44 +0200
commitea25a9b2cf73948b1e8c5675de027e0ad13277bd (patch)
tree2b8bc87185e0e9e01b643752f911cdf4eeac0f85 /t/lib
parentc99cfaa7c4ced6145d9642cd15da5bb2ea4ad19e (diff)
downloadperl-ea25a9b2cf73948b1e8c5675de027e0ad13277bd.tar.gz
make qw(...) first-class syntax
This makes a qw(...) list literal a distinct token type for the parser, where previously it was munged into a "(",THING,")" sequence. The change means that qw(...) can't accidentally supply parens to parts of the grammar that want real parens. Due to many bits of code taking advantage of that by "foreach my $x qw(...) {}", this patch also includes a hack to coerce qw(...) to the old-style parenthesised THING, emitting a deprecation warning along the way.
Diffstat (limited to 't/lib')
-rw-r--r--t/lib/warnings/perly235
1 files changed, 235 insertions, 0 deletions
diff --git a/t/lib/warnings/perly b/t/lib/warnings/perly
index afc5dccc72..02e29fde2e 100644
--- a/t/lib/warnings/perly
+++ b/t/lib/warnings/perly
@@ -8,6 +8,22 @@
sub fred {} $a = "fred" ; do $a()
sub fred {} $a = "fred" ; do $a(1)
+ Use of qw(...) as parentheses is deprecated
+
+ if qw(a) {}
+ unless qw(a) {}
+ if (0) {} elsif qw(a) {}
+ given qw(a) {}
+ when qw(a) {}
+ while qw(a) {}
+ until qw(a) {}
+ foreach $x qw(a b c) {}
+ foreach my $x qw(a b c) {}
+ $obj->meth qw(a b c)
+ do foo qw(a b c)
+ do $subref qw(a b c)
+ &foo qw(a b c)
+ $a[0] qw(a b c)
__END__
# perly.y
@@ -29,3 +45,222 @@ Use of "do" to call subroutines is deprecated at - line 4.
Use of "do" to call subroutines is deprecated at - line 5.
Use of "do" to call subroutines is deprecated at - line 7.
Use of "do" to call subroutines is deprecated at - line 8.
+########
+use warnings qw(deprecated void);
+if qw(a) { print "x0\n"; } else { }
+if qw(0) { print "x1\n"; } else { }
+if qw(z a) { print "x2\n"; } else { }
+if qw(z 0) { print "x3\n"; } else { }
+EXPECT
+Use of qw(...) as parentheses is deprecated at - line 2.
+Use of qw(...) as parentheses is deprecated at - line 3.
+Use of qw(...) as parentheses is deprecated at - line 4.
+Useless use of a constant (z) in void context at - line 4.
+Use of qw(...) as parentheses is deprecated at - line 5.
+Useless use of a constant (z) in void context at - line 5.
+x0
+x2
+########
+if qw() { print "x0\n"; } else { }
+EXPECT
+Use of qw(...) as parentheses is deprecated at - line 1.
+syntax error at - line 1, near "if qw()"
+Execution of - aborted due to compilation errors.
+########
+use warnings qw(deprecated void);
+unless qw(a) { print "x0\n"; } else { }
+unless qw(0) { print "x1\n"; } else { }
+unless qw(z a) { print "x2\n"; } else { }
+unless qw(z 0) { print "x3\n"; } else { }
+EXPECT
+Use of qw(...) as parentheses is deprecated at - line 2.
+Use of qw(...) as parentheses is deprecated at - line 3.
+Use of qw(...) as parentheses is deprecated at - line 4.
+Useless use of a constant (z) in void context at - line 4.
+Use of qw(...) as parentheses is deprecated at - line 5.
+Useless use of a constant (z) in void context at - line 5.
+x1
+x3
+########
+unless qw() { print "x0\n"; } else { }
+EXPECT
+Use of qw(...) as parentheses is deprecated at - line 1.
+syntax error at - line 1, near "unless qw()"
+Execution of - aborted due to compilation errors.
+########
+use warnings qw(deprecated void);
+if(0) { print "eek\n"; } elsif qw(a) { print "x0\n"; } else { }
+if(0) { print "eek\n"; } elsif qw(0) { print "x1\n"; } else { }
+if(0) { print "eek\n"; } elsif qw(z a) { print "x2\n"; } else { }
+if(0) { print "eek\n"; } elsif qw(z 0) { print "x3\n"; } else { }
+EXPECT
+Use of qw(...) as parentheses is deprecated at - line 2.
+Use of qw(...) as parentheses is deprecated at - line 3.
+Use of qw(...) as parentheses is deprecated at - line 4.
+Useless use of a constant (z) in void context at - line 4.
+Use of qw(...) as parentheses is deprecated at - line 5.
+Useless use of a constant (z) in void context at - line 5.
+x0
+x2
+########
+if(0) { print "eek\n"; } elsif qw() { print "x0\n"; } else { }
+EXPECT
+Use of qw(...) as parentheses is deprecated at - line 1.
+syntax error at - line 1, near "elsif qw()"
+Execution of - aborted due to compilation errors.
+########
+use warnings qw(deprecated void); use feature "switch";
+given qw(a) { print "x0 $_\n"; }
+given qw(z a) { print "x1 $_\n"; }
+EXPECT
+Use of qw(...) as parentheses is deprecated at - line 2.
+Use of qw(...) as parentheses is deprecated at - line 3.
+Useless use of a constant (z) in void context at - line 3.
+x0 a
+x1 a
+########
+use feature "switch";
+given qw() { print "x0\n"; }
+EXPECT
+Use of qw(...) as parentheses is deprecated at - line 2.
+syntax error at - line 2, near "given qw()"
+Execution of - aborted due to compilation errors.
+########
+use warnings qw(deprecated void); use feature "switch";
+given("a") { when qw(a) { print "x0\n"; } }
+given("a") { when qw(b) { print "x1\n"; } }
+given("a") { when qw(z a) { print "x2\n"; } }
+given("a") { when qw(z b) { print "x3\n"; } }
+EXPECT
+Use of qw(...) as parentheses is deprecated at - line 2.
+Use of qw(...) as parentheses is deprecated at - line 3.
+Use of qw(...) as parentheses is deprecated at - line 4.
+Useless use of a constant (z) in void context at - line 4.
+Use of qw(...) as parentheses is deprecated at - line 5.
+Useless use of a constant (z) in void context at - line 5.
+x0
+x2
+########
+use feature "switch";
+given("a") { when qw() { print "x0\n"; } }
+EXPECT
+Use of qw(...) as parentheses is deprecated at - line 2.
+syntax error at - line 2, near "when qw()"
+syntax error at - line 2, near "} }"
+Execution of - aborted due to compilation errors.
+########
+use warnings qw(deprecated void);
+while qw(a) { print "x0\n"; last; } {;}
+while qw(0) { print "x1\n"; last; } {;}
+while qw(z a) { print "x2\n"; last; } {;}
+while qw(z 0) { print "x3\n"; last; } {;}
+EXPECT
+Use of qw(...) as parentheses is deprecated at - line 2.
+Use of qw(...) as parentheses is deprecated at - line 3.
+Use of qw(...) as parentheses is deprecated at - line 4.
+Useless use of a constant (z) in void context at - line 4.
+Use of qw(...) as parentheses is deprecated at - line 5.
+Useless use of a constant (z) in void context at - line 5.
+x0
+x2
+########
+while qw() { print "x0\n"; last; }
+EXPECT
+Use of qw(...) as parentheses is deprecated at - line 1.
+x0
+########
+use warnings qw(deprecated void);
+until qw(a) { print "x0\n"; last; } {;}
+until qw(0) { print "x1\n"; last; } {;}
+until qw(z a) { print "x2\n"; last; } {;}
+until qw(z 0) { print "x3\n"; last; } {;}
+EXPECT
+Use of qw(...) as parentheses is deprecated at - line 2.
+Use of qw(...) as parentheses is deprecated at - line 3.
+Use of qw(...) as parentheses is deprecated at - line 4.
+Useless use of a constant (z) in void context at - line 4.
+Use of qw(...) as parentheses is deprecated at - line 5.
+Useless use of a constant (z) in void context at - line 5.
+x1
+x3
+########
+until qw() { print "x0\n"; } else { }
+EXPECT
+Use of qw(...) as parentheses is deprecated at - line 1.
+syntax error at - line 1, near "until qw()"
+Execution of - aborted due to compilation errors.
+########
+foreach $x qw(a b c) { print $x, "\n"; }
+EXPECT
+Use of qw(...) as parentheses is deprecated at - line 1.
+a
+b
+c
+########
+foreach $x qw() { print $x, "\n"; }
+EXPECT
+Use of qw(...) as parentheses is deprecated at - line 1.
+syntax error at - line 1, near "$x qw()"
+Execution of - aborted due to compilation errors.
+########
+foreach my $x qw(a b c) { print $x, "\n"; }
+EXPECT
+Use of qw(...) as parentheses is deprecated at - line 1.
+a
+b
+c
+########
+foreach my $x qw() { print $x, "\n"; }
+EXPECT
+Use of qw(...) as parentheses is deprecated at - line 1.
+syntax error at - line 1, near "$x qw()"
+Execution of - aborted due to compilation errors.
+########
+sub a5c85eef3bf30129e20989e96b099d13::foo { print "+", join(":", @_), "\n"; }
+"a5c85eef3bf30129e20989e96b099d13"->foo qw(); {;}
+"a5c85eef3bf30129e20989e96b099d13"->foo qw(a b c); {;}
+EXPECT
+Use of qw(...) as parentheses is deprecated at - line 2.
+Use of qw(...) as parentheses is deprecated at - line 3.
++a5c85eef3bf30129e20989e96b099d13
++a5c85eef3bf30129e20989e96b099d13:a:b:c
+########
+sub fd4de2af1449cec72693c36842d41862 { print "+", join(":", @_), "\n"; }
+do fd4de2af1449cec72693c36842d41862 qw(); {;}
+do fd4de2af1449cec72693c36842d41862 qw(a b c); {;}
+EXPECT
+Use of qw(...) as parentheses is deprecated at - line 2.
+Use of "do" to call subroutines is deprecated at - line 2.
+Use of qw(...) as parentheses is deprecated at - line 3.
+Use of "do" to call subroutines is deprecated at - line 3.
++
++a:b:c
+########
+$subref = sub { print "+", join(":", @_), "\n"; };
+do $subref qw();
+do $subref qw(a b c);
+EXPECT
+Use of qw(...) as parentheses is deprecated at - line 2.
+Use of "do" to call subroutines is deprecated at - line 2.
+Use of qw(...) as parentheses is deprecated at - line 3.
+Use of "do" to call subroutines is deprecated at - line 3.
++
++a:b:c
+########
+sub e293a8f7cb38880a48867fcb336448e5 { print "+", join(":", @_), "\n"; }
+&e293a8f7cb38880a48867fcb336448e5 qw();
+&e293a8f7cb38880a48867fcb336448e5 qw(a b c);
+EXPECT
+Use of qw(...) as parentheses is deprecated at - line 2.
+Use of qw(...) as parentheses is deprecated at - line 3.
++
++a:b:c
+########
+my @a = (sub { print "+", join(":", @_), "\n"; });
+$a[0] qw();
+$a[0] qw(a b c);
+EXPECT
+Use of qw(...) as parentheses is deprecated at - line 2.
+Use of qw(...) as parentheses is deprecated at - line 3.
++
++a:b:c