summaryrefslogtreecommitdiff
path: root/t/base
diff options
context:
space:
mode:
authorFather Chrysostomos <sprout@cpan.org>2012-09-20 06:24:25 -0700
committerFather Chrysostomos <sprout@cpan.org>2012-09-20 08:37:58 -0700
commitc31f6d3b869d78bbd101e694fd3b384b47a77f6d (patch)
tree8835bcb86728561b08945b6d7f5c35c36033b8b4 /t/base
parenta310a8f2bf41061e1bf6feadf7d6758f96b481c5 (diff)
downloadperl-c31f6d3b869d78bbd101e694fd3b384b47a77f6d.tar.gz
[perl #105924] require 1 << 2
Setting PL_expect after force_next has no effect, as force_next (called by force_version and force_word) picks up the current value of PL_expect and arranges for it to be reset thereto after the forced token is force-fed to the parser. The KEY_require case should be setting PL_expect to XTERM (as it already does) when there is no forced token (version or bareword), because we expect a term after ‘require’, but to XOPERATOR when there is a forced token, because we expect an operator after that forced token. Since the PL_expect assignment has no effect after force_next, we can set it to XOPERATOR before calling potentially calling force_next, and then to XTERM afterwards. Loop exits had the same bug, so this fixes them all.
Diffstat (limited to 't/base')
-rw-r--r--t/base/lex.t10
1 files changed, 9 insertions, 1 deletions
diff --git a/t/base/lex.t b/t/base/lex.t
index dc4abe50e9..bca43b4570 100644
--- a/t/base/lex.t
+++ b/t/base/lex.t
@@ -1,6 +1,6 @@
#!./perl
-print "1..75\n";
+print "1..81\n";
$x = 'x';
@@ -372,3 +372,11 @@ eval 'warn ({$_ => 1} + 1) if 0';
print "not " if $@;
print "ok 75 - listop({$_ => 1} + 1)\n";
print "# $@" if $@;
+
+$test = 76;
+for(qw< require goto last next redo dump >) {
+ eval "sub { $_ foo << 2 }";
+ print "not " if $@;
+ print "ok ", $test++, " - [perl #105924] $_ WORD << ...\n";
+ print "# $@" if $@;
+}