summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorFather Chrysostomos <sprout@cpan.org>2012-03-31 13:50:04 -0700
committerFather Chrysostomos <sprout@cpan.org>2012-04-03 08:46:03 -0700
commitd1718a7cf54f01c3c9d449a1ea96c9bba32d1126 (patch)
treee8589072ca6d679a871b14f215413bc51da4a517 /ext
parent6331a2f5f6ee89f25cb6803c1d9ef97d6d1799e5 (diff)
downloadperl-d1718a7cf54f01c3c9d449a1ea96c9bba32d1126.tar.gz
[perl #111462] Move strict hints from %^H to $^H
With commit b50b20584, strict.pm starting putting hints in %^H to indicate that strict mode has been enabled or disabled explicitly, so version declarations should not change the setting. This causes ‘Unbalanced string table refcount’ warnings when Safe.pm encounters prohibited ops. This happens because ops are leaking when those ops point to HEKs (in the internal form that %^H takes when attached to ops). This commit moves those new strict hints into $^H, to avoid those warnings. This does simply paper over the real problem (leaked ops), but at least it gets the warnings back down to the 5.14 amount. Because of the new hints in $^H, B::Concise has been updated to account for them, and so have all its tests. I modified OptreeCheck to avoid setting the hints with ‘no strict;’, as that resulted in slightly fewer changes to the tests. It will also result in fewer changes to the tests in future. Two B::Deparse tests started failing due to %^H not being localised. Apparently there is a bug somewhere (in perl, Deparse.pm or deparse.t) that got triggered as a result. In fact, one of the tests exhibited *two* bugs. But for now, I’ve simply added a workaround to the two tests so they don’t trigger those bugs (which bugs will have to wait till after 5.16).
Diffstat (limited to 'ext')
-rw-r--r--ext/B/B/Concise.pm5
-rw-r--r--ext/B/t/OptreeCheck.pm2
-rw-r--r--ext/B/t/f_map.t52
-rw-r--r--ext/B/t/f_sort.t92
-rw-r--r--ext/B/t/optree_check.t4
-rw-r--r--ext/B/t/optree_constants.t24
-rw-r--r--ext/B/t/optree_samples.t28
-rw-r--r--ext/B/t/optree_specials.t72
8 files changed, 141 insertions, 138 deletions
diff --git a/ext/B/B/Concise.pm b/ext/B/B/Concise.pm
index bc360c92fa..49a4c167b0 100644
--- a/ext/B/B/Concise.pm
+++ b/ext/B/B/Concise.pm
@@ -668,7 +668,7 @@ $priv{$_}{128} = '+1' for qw "caller wantarray runcv";
our %hints; # used to display each COP's op_hints values
# strict refs, subs, vars
-@hints{2,512,1024} = ('$', '&', '*');
+@hints{2,512,1024,2<<28,4<<28,8<<28} = ('$', '&', '*', 'x$', 'x&', 'x*');
# integers, locale, bytes
@hints{1,4,8,16} = ('i', 'l', 'b');
# block scope, localise %^H, $^OPEN (in), $^OPEN (out)
@@ -1547,6 +1547,9 @@ string if this is not a COP. Here are the symbols used:
$ strict refs
& strict subs
* strict vars
+ x$ explicit use/no strict refs
+ x& explicit use/no strict subs
+ x* explicit use/no strict vars
i integers
l locale
b bytes
diff --git a/ext/B/t/OptreeCheck.pm b/ext/B/t/OptreeCheck.pm
index ae86794403..8cfc5b61ca 100644
--- a/ext/B/t/OptreeCheck.pm
+++ b/ext/B/t/OptreeCheck.pm
@@ -482,7 +482,7 @@ sub getRendering {
# in caller's package ( to test arg-fixup, comment next line)
my $pkg = '{ package '.caller(1) .';';
{
- no strict;
+ BEGIN { $^H = 0 }
no warnings;
$code = eval "$pkg sub { $code } }";
}
diff --git a/ext/B/t/f_map.t b/ext/B/t/f_map.t
index bedb7a047f..2fa2ec95eb 100644
--- a/ext/B/t/f_map.t
+++ b/ext/B/t/f_map.t
@@ -46,7 +46,7 @@ checkOptree(note => q{},
bcopts => q{-exec},
code => q{@chars = map(chr, @nums); },
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-# 1 <;> nextstate(main 475 (eval 10):1) v:%
+# 1 <;> nextstate(main 475 (eval 10):1) v
# 2 <0> pushmark s
# 3 <0> pushmark s
# 4 <#> gv[*nums] s
@@ -62,7 +62,7 @@ checkOptree(note => q{},
# d <2> aassign[t9] KS/COMMON
# e <1> leavesub[1 ref] K/REFC,1
EOT_EOT
-# 1 <;> nextstate(main 559 (eval 15):1) v:%
+# 1 <;> nextstate(main 559 (eval 15):1) v
# 2 <0> pushmark s
# 3 <0> pushmark s
# 4 <$> gv(*nums) s
@@ -90,7 +90,7 @@ checkOptree(note => q{},
bcopts => q{-exec},
code => q{%hash = map { getkey($_) => $_ } @array; },
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-# 1 <;> nextstate(main 476 (eval 10):1) v:%,{
+# 1 <;> nextstate(main 476 (eval 10):1) v:{
# 2 <0> pushmark s
# 3 <0> pushmark s
# 4 <#> gv[*array] s
@@ -98,7 +98,7 @@ checkOptree(note => q{},
# 6 <@> mapstart lK*
# 7 <|> mapwhile(other->8)[t9] lK
# 8 <0> enter l
-# 9 <;> nextstate(main 475 (eval 10):1) v:%,{
+# 9 <;> nextstate(main 475 (eval 10):1) v:{
# a <0> pushmark s
# b <0> pushmark s
# c <#> gvsv[*_] s
@@ -114,7 +114,7 @@ checkOptree(note => q{},
# l <2> aassign[t10] KS/COMMON
# m <1> leavesub[1 ref] K/REFC,1
EOT_EOT
-# 1 <;> nextstate(main 560 (eval 15):1) v:%,{
+# 1 <;> nextstate(main 560 (eval 15):1) v:{
# 2 <0> pushmark s
# 3 <0> pushmark s
# 4 <$> gv(*array) s
@@ -122,7 +122,7 @@ EOT_EOT
# 6 <@> mapstart lK*
# 7 <|> mapwhile(other->8)[t4] lK
# 8 <0> enter l
-# 9 <;> nextstate(main 559 (eval 15):1) v:%,{
+# 9 <;> nextstate(main 559 (eval 15):1) v:{
# a <0> pushmark s
# b <0> pushmark s
# c <$> gvsv(*_) s
@@ -155,15 +155,15 @@ checkOptree(note => q{},
bcopts => q{-exec},
code => q{{ %hash = (); foreach $_ (@array) { $hash{getkey($_)} = $_; } } },
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-# 1 <;> nextstate(main 478 (eval 10):1) v:%,{
+# 1 <;> nextstate(main 478 (eval 10):1) v:{
# 2 <{> enterloop(next->u last->u redo->3)
-# 3 <;> nextstate(main 475 (eval 10):1) v:%
+# 3 <;> nextstate(main 475 (eval 10):1) v
# 4 <0> pushmark s
# 5 <0> pushmark s
# 6 <#> gv[*hash] s
# 7 <1> rv2hv[t2] lKRM*/1
# 8 <2> aassign[t3] vKS
-# 9 <;> nextstate(main 476 (eval 10):1) v:%,{
+# 9 <;> nextstate(main 476 (eval 10):1) v:{
# a <0> pushmark sM
# b <#> gv[*array] s
# c <1> rv2av[t6] sKRM/1
@@ -172,7 +172,7 @@ checkOptree(note => q{},
# f <{> enteriter(next->q last->t redo->g) lKS/8
# r <0> iter s
# s <|> and(other->g) K/1
-# g <;> nextstate(main 475 (eval 10):1) v:%,{
+# g <;> nextstate(main 475 (eval 10):1) v:{
# h <#> gvsv[*_] s
# i <#> gv[*hash] s
# j <1> rv2hv sKR/1
@@ -188,15 +188,15 @@ checkOptree(note => q{},
# u <2> leaveloop K/2
# v <1> leavesub[1 ref] K/REFC,1
EOT_EOT
-# 1 <;> nextstate(main 562 (eval 15):1) v:%,{
+# 1 <;> nextstate(main 562 (eval 15):1) v:{
# 2 <{> enterloop(next->u last->u redo->3)
-# 3 <;> nextstate(main 559 (eval 15):1) v:%
+# 3 <;> nextstate(main 559 (eval 15):1) v
# 4 <0> pushmark s
# 5 <0> pushmark s
# 6 <$> gv(*hash) s
# 7 <1> rv2hv[t1] lKRM*/1
# 8 <2> aassign[t2] vKS
-# 9 <;> nextstate(main 560 (eval 15):1) v:%,{
+# 9 <;> nextstate(main 560 (eval 15):1) v:{
# a <0> pushmark sM
# b <$> gv(*array) s
# c <1> rv2av[t3] sKRM/1
@@ -205,7 +205,7 @@ EOT_EOT
# f <{> enteriter(next->q last->t redo->g) lKS/8
# r <0> iter s
# s <|> and(other->g) K/1
-# g <;> nextstate(main 559 (eval 15):1) v:%,{
+# g <;> nextstate(main 559 (eval 15):1) v:{
# h <$> gvsv(*_) s
# i <$> gv(*hash) s
# j <1> rv2hv sKR/1
@@ -234,7 +234,7 @@ checkOptree(note => q{},
bcopts => q{-exec},
code => q{%hash = map { +"\L$_", 1 } @array; },
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-# 1 <;> nextstate(main 476 (eval 10):1) v:%
+# 1 <;> nextstate(main 476 (eval 10):1) v
# 2 <0> pushmark s
# 3 <0> pushmark s
# 4 <#> gv[*array] s
@@ -255,7 +255,7 @@ checkOptree(note => q{},
# h <2> aassign[t10] KS/COMMON
# i <1> leavesub[1 ref] K/REFC,1
EOT_EOT
-# 1 <;> nextstate(main 560 (eval 15):1) v:%
+# 1 <;> nextstate(main 560 (eval 15):1) v
# 2 <0> pushmark s
# 3 <0> pushmark s
# 4 <$> gv(*array) s
@@ -288,7 +288,7 @@ checkOptree(note => q{},
bcopts => q{-exec},
code => q{%hash = map { ("\L$_", 1) } @array; },
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-# 1 <;> nextstate(main 476 (eval 10):1) v:%
+# 1 <;> nextstate(main 476 (eval 10):1) v
# 2 <0> pushmark s
# 3 <0> pushmark s
# 4 <#> gv[*array] s
@@ -309,7 +309,7 @@ checkOptree(note => q{},
# h <2> aassign[t10] KS/COMMON
# i <1> leavesub[1 ref] K/REFC,1
EOT_EOT
-# 1 <;> nextstate(main 560 (eval 15):1) v:%
+# 1 <;> nextstate(main 560 (eval 15):1) v
# 2 <0> pushmark s
# 3 <0> pushmark s
# 4 <$> gv(*array) s
@@ -342,7 +342,7 @@ checkOptree(note => q{},
bcopts => q{-exec},
code => q{%hash = map { lc($_), 1 } @array; },
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-# 1 <;> nextstate(main 476 (eval 10):1) v:%
+# 1 <;> nextstate(main 476 (eval 10):1) v
# 2 <0> pushmark s
# 3 <0> pushmark s
# 4 <#> gv[*array] s
@@ -362,7 +362,7 @@ checkOptree(note => q{},
# g <2> aassign[t9] KS/COMMON
# h <1> leavesub[1 ref] K/REFC,1
EOT_EOT
-# 1 <;> nextstate(main 589 (eval 26):1) v:%
+# 1 <;> nextstate(main 589 (eval 26):1) v
# 2 <0> pushmark s
# 3 <0> pushmark s
# 4 <$> gv(*array) s
@@ -394,7 +394,7 @@ checkOptree(note => q{},
bcopts => q{-exec},
code => q{%hash = map +( lc($_), 1 ), @array; },
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-# 1 <;> nextstate(main 475 (eval 10):1) v:%
+# 1 <;> nextstate(main 475 (eval 10):1) v
# 2 <0> pushmark s
# 3 <0> pushmark s
# 4 <#> gv[*array] s
@@ -413,7 +413,7 @@ checkOptree(note => q{},
# g <2> aassign[t8] KS/COMMON
# h <1> leavesub[1 ref] K/REFC,1
EOT_EOT
-# 1 <;> nextstate(main 593 (eval 28):1) v:%
+# 1 <;> nextstate(main 593 (eval 28):1) v
# 2 <0> pushmark s
# 3 <0> pushmark s
# 4 <$> gv(*array) s
@@ -444,7 +444,7 @@ checkOptree(note => q{},
bcopts => q{-exec},
code => q{%hash = map ( lc($_), 1 ), @array; },
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-# 1 <;> nextstate(main 475 (eval 10):1) v:%
+# 1 <;> nextstate(main 475 (eval 10):1) v
# 2 <0> pushmark s
# 3 <0> pushmark s
# 4 <0> pushmark s
@@ -463,7 +463,7 @@ checkOptree(note => q{},
# g <@> list K
# h <1> leavesub[1 ref] K/REFC,1
EOT_EOT
-# 1 <;> nextstate(main 597 (eval 30):1) v:%
+# 1 <;> nextstate(main 597 (eval 30):1) v
# 2 <0> pushmark s
# 3 <0> pushmark s
# 4 <0> pushmark s
@@ -494,7 +494,7 @@ checkOptree(note => q{},
bcopts => q{-exec},
code => q{@hashes = map +{ lc($_), 1 }, @array },
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-# 1 <;> nextstate(main 475 (eval 10):1) v:%
+# 1 <;> nextstate(main 475 (eval 10):1) v
# 2 <0> pushmark s
# 3 <0> pushmark s
# 4 <#> gv[*array] s
@@ -513,7 +513,7 @@ checkOptree(note => q{},
# g <2> aassign[t8] KS/COMMON
# h <1> leavesub[1 ref] K/REFC,1
EOT_EOT
-# 1 <;> nextstate(main 601 (eval 32):1) v:%
+# 1 <;> nextstate(main 601 (eval 32):1) v
# 2 <0> pushmark s
# 3 <0> pushmark s
# 4 <$> gv(*array) s
diff --git a/ext/B/t/f_sort.t b/ext/B/t/f_sort.t
index 108f23c5a3..58a8cf2eed 100644
--- a/ext/B/t/f_sort.t
+++ b/ext/B/t/f_sort.t
@@ -51,7 +51,7 @@ checkOptree(note => q{},
bcopts => q{-exec},
code => q{@articles = sort @files; },
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-# 1 <;> nextstate(main 545 (eval 15):1) v:%
+# 1 <;> nextstate(main 545 (eval 15):1) v
# 2 <0> pushmark s
# 3 <0> pushmark s
# 4 <#> gv[*files] s
@@ -63,7 +63,7 @@ checkOptree(note => q{},
# a <2> aassign[t5] KS/COMMON
# b <1> leavesub[1 ref] K/REFC,1
EOT_EOT
-# 1 <;> nextstate(main 545 (eval 15):1) v:%
+# 1 <;> nextstate(main 545 (eval 15):1) v
# 2 <0> pushmark s
# 3 <0> pushmark s
# 4 <$> gv(*files) s
@@ -88,7 +88,7 @@ checkOptree(note => q{},
bcopts => q{-exec},
code => q{@articles = sort {$a cmp $b} @files; },
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-# 1 <;> nextstate(main 546 (eval 15):1) v:%
+# 1 <;> nextstate(main 546 (eval 15):1) v
# 2 <0> pushmark s
# 3 <0> pushmark s
# 4 <#> gv[*files] s
@@ -100,7 +100,7 @@ checkOptree(note => q{},
# a <2> aassign[t3] KS/COMMON
# b <1> leavesub[1 ref] K/REFC,1
EOT_EOT
-# 1 <;> nextstate(main 546 (eval 15):1) v:%
+# 1 <;> nextstate(main 546 (eval 15):1) v
# 2 <0> pushmark s
# 3 <0> pushmark s
# 4 <$> gv(*files) s
@@ -125,7 +125,7 @@ checkOptree(note => q{},
bcopts => q{-exec},
code => q{@articles = sort {uc($a) cmp uc($b)} @files; },
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-# 1 <;> nextstate(main 546 (eval 15):1) v:%
+# 1 <;> nextstate(main 546 (eval 15):1) v
# 2 <0> pushmark s
# 3 <0> pushmark s
# 4 <#> gv[*files] s
@@ -137,7 +137,7 @@ checkOptree(note => q{},
# a <2> aassign[t10] KS/COMMON
# b <1> leavesub[1 ref] K/REFC,1
EOT_EOT
-# 1 <;> nextstate(main 546 (eval 15):1) v:%
+# 1 <;> nextstate(main 546 (eval 15):1) v
# 2 <0> pushmark s
# 3 <0> pushmark s
# 4 <$> gv(*files) s
@@ -162,7 +162,7 @@ checkOptree(note => q{},
bcopts => q{-exec},
code => q{@articles = sort {$b cmp $a} @files; },
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-# 1 <;> nextstate(main 546 (eval 15):1) v:%
+# 1 <;> nextstate(main 546 (eval 15):1) v
# 2 <0> pushmark s
# 3 <0> pushmark s
# 4 <#> gv[*files] s
@@ -174,7 +174,7 @@ checkOptree(note => q{},
# a <2> aassign[t3] KS/COMMON
# b <1> leavesub[1 ref] K/REFC,1
EOT_EOT
-# 1 <;> nextstate(main 546 (eval 15):1) v:%
+# 1 <;> nextstate(main 546 (eval 15):1) v
# 2 <0> pushmark s
# 3 <0> pushmark s
# 4 <$> gv(*files) s
@@ -199,7 +199,7 @@ checkOptree(note => q{},
bcopts => q{-exec},
code => q{@articles = sort {$a <=> $b} @files; },
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-# 1 <;> nextstate(main 546 (eval 15):1) v:%
+# 1 <;> nextstate(main 546 (eval 15):1) v
# 2 <0> pushmark s
# 3 <0> pushmark s
# 4 <#> gv[*files] s
@@ -211,7 +211,7 @@ checkOptree(note => q{},
# a <2> aassign[t3] KS/COMMON
# b <1> leavesub[1 ref] K/REFC,1
EOT_EOT
-# 1 <;> nextstate(main 546 (eval 15):1) v:%
+# 1 <;> nextstate(main 546 (eval 15):1) v
# 2 <0> pushmark s
# 3 <0> pushmark s
# 4 <$> gv(*files) s
@@ -236,7 +236,7 @@ checkOptree(note => q{},
bcopts => q{-exec},
code => q{@articles = sort {$b <=> $a} @files; },
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-# 1 <;> nextstate(main 587 (eval 26):1) v:%
+# 1 <;> nextstate(main 587 (eval 26):1) v
# 2 <0> pushmark s
# 3 <0> pushmark s
# 4 <#> gv[*files] s
@@ -248,7 +248,7 @@ checkOptree(note => q{},
# a <2> aassign[t3] KS/COMMON
# b <1> leavesub[1 ref] K/REFC,1
EOT_EOT
-# 1 <;> nextstate(main 546 (eval 15):1) v:%
+# 1 <;> nextstate(main 546 (eval 15):1) v
# 2 <0> pushmark s
# 3 <0> pushmark s
# 4 <$> gv(*files) s
@@ -274,7 +274,7 @@ checkOptree(note => q{},
bcopts => q{-exec},
code => q{@eldest = sort { $age{$b} <=> $age{$a} } keys %age; },
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-# 1 <;> nextstate(main 592 (eval 28):1) v:%
+# 1 <;> nextstate(main 592 (eval 28):1) v
# 2 <0> pushmark s
# 3 <0> pushmark s
# 4 <#> gv[*age] s
@@ -287,7 +287,7 @@ checkOptree(note => q{},
# b <2> aassign[t11] KS/COMMON
# c <1> leavesub[1 ref] K/REFC,1
EOT_EOT
-# 1 <;> nextstate(main 546 (eval 15):1) v:%
+# 1 <;> nextstate(main 546 (eval 15):1) v
# 2 <0> pushmark s
# 3 <0> pushmark s
# 4 <$> gv(*age) s
@@ -316,7 +316,7 @@ checkOptree(note => q{},
bcopts => q{-exec},
code => q{sub byage { $age{$a} <=> $age{$b}; } @sortedclass = sort byage @class; },
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-# 1 <;> nextstate(main 597 (eval 30):1) v:%
+# 1 <;> nextstate(main 597 (eval 30):1) v
# 2 <0> pushmark s
# 3 <0> pushmark s
# 4 <$> const[PV "byage"] s/BARE
@@ -329,7 +329,7 @@ checkOptree(note => q{},
# b <2> aassign[t5] KS/COMMON
# c <1> leavesub[1 ref] K/REFC,1
EOT_EOT
-# 1 <;> nextstate(main 546 (eval 15):1) v:%
+# 1 <;> nextstate(main 546 (eval 15):1) v
# 2 <0> pushmark s
# 3 <0> pushmark s
# 4 <$> const(PV "byage") s/BARE
@@ -366,7 +366,7 @@ checkOptree(name => q{sort USERSUB LIST },
print sort @harry; print sort backwards @harry;
print sort @george, 'to', @harry; },
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-# 1 <;> nextstate(main 602 (eval 32):2) v:%
+# 1 <;> nextstate(main 602 (eval 32):2) v
# 2 <0> pushmark s
# 3 <$> const[PV "dog"] s
# 4 <$> const[PV "cat"] s
@@ -377,7 +377,7 @@ checkOptree(name => q{sort USERSUB LIST },
# 9 <#> gv[*harry] s
# a <1> rv2av[t2] lKRM*/1
# b <2> aassign[t3] vKS
-# c <;> nextstate(main 602 (eval 32):3) v:%
+# c <;> nextstate(main 602 (eval 32):3) v
# d <0> pushmark s
# e <$> const[PV "gone"] s
# f <$> const[PV "chased"] s
@@ -388,14 +388,14 @@ checkOptree(name => q{sort USERSUB LIST },
# k <#> gv[*george] s
# l <1> rv2av[t5] lKRM*/1
# m <2> aassign[t6] vKS
-# n <;> nextstate(main 602 (eval 32):4) v:%,{
+# n <;> nextstate(main 602 (eval 32):4) v:{
# o <0> pushmark s
# p <0> pushmark s
# q <#> gv[*harry] s
# r <1> rv2av[t8] lK/1
# s <@> sort lK
# t <@> print vK
-# u <;> nextstate(main 602 (eval 32):4) v:%,{
+# u <;> nextstate(main 602 (eval 32):4) v:{
# v <0> pushmark s
# w <0> pushmark s
# x <$> const[PV "backwards"] s/BARE
@@ -403,7 +403,7 @@ checkOptree(name => q{sort USERSUB LIST },
# z <1> rv2av[t10] lK/1
# 10 <@> sort lKS
# 11 <@> print vK
-# 12 <;> nextstate(main 602 (eval 32):5) v:%,{
+# 12 <;> nextstate(main 602 (eval 32):5) v:{
# 13 <0> pushmark s
# 14 <0> pushmark s
# 15 <#> gv[*george] s
@@ -415,7 +415,7 @@ checkOptree(name => q{sort USERSUB LIST },
# 1b <@> print sK
# 1c <1> leavesub[1 ref] K/REFC,1
EOT_EOT
-# 1 <;> nextstate(main 602 (eval 32):2) v:%
+# 1 <;> nextstate(main 602 (eval 32):2) v
# 2 <0> pushmark s
# 3 <$> const(PV "dog") s
# 4 <$> const(PV "cat") s
@@ -426,7 +426,7 @@ EOT_EOT
# 9 <$> gv(*harry) s
# a <1> rv2av[t1] lKRM*/1
# b <2> aassign[t2] vKS
-# c <;> nextstate(main 602 (eval 32):3) v:%
+# c <;> nextstate(main 602 (eval 32):3) v
# d <0> pushmark s
# e <$> const(PV "gone") s
# f <$> const(PV "chased") s
@@ -437,14 +437,14 @@ EOT_EOT
# k <$> gv(*george) s
# l <1> rv2av[t3] lKRM*/1
# m <2> aassign[t4] vKS
-# n <;> nextstate(main 602 (eval 32):4) v:%,{
+# n <;> nextstate(main 602 (eval 32):4) v:{
# o <0> pushmark s
# p <0> pushmark s
# q <$> gv(*harry) s
# r <1> rv2av[t5] lK/1
# s <@> sort lK
# t <@> print vK
-# u <;> nextstate(main 602 (eval 32):4) v:%,{
+# u <;> nextstate(main 602 (eval 32):4) v:{
# v <0> pushmark s
# w <0> pushmark s
# x <$> const(PV "backwards") s/BARE
@@ -452,7 +452,7 @@ EOT_EOT
# z <1> rv2av[t6] lK/1
# 10 <@> sort lKS
# 11 <@> print vK
-# 12 <;> nextstate(main 602 (eval 32):5) v:%,{
+# 12 <;> nextstate(main 602 (eval 32):5) v:{
# 13 <0> pushmark s
# 14 <0> pushmark s
# 15 <$> gv(*george) s
@@ -493,7 +493,7 @@ checkOptree(name => q{Compound sort/map Expression },
sort { $b->[1] <=> $a->[1] || $a->[2] cmp $b->[2] }
map { [$_, /=(\d+)/, uc($_)] } @old; },
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-# 1 <;> nextstate(main 609 (eval 34):3) v:%,{
+# 1 <;> nextstate(main 609 (eval 34):3) v:{
# 2 <0> pushmark s
# 3 <0> pushmark s
# 4 <0> pushmark s
@@ -503,7 +503,7 @@ checkOptree(name => q{Compound sort/map Expression },
# 8 <@> mapstart lK*
# 9 <|> mapwhile(other->a)[t20] lK
# a <0> enter l
-# b <;> nextstate(main 608 (eval 34):2) v:%,{
+# b <;> nextstate(main 608 (eval 34):2) v:{
# c <0> pushmark s
# d <#> gvsv[*_] s
# e </> match(/"=(\\d+)"/) l/RTIME
@@ -528,7 +528,7 @@ checkOptree(name => q{Compound sort/map Expression },
# u <2> aassign[t27] KS/COMMON
# v <1> leavesub[1 ref] K/REFC,1
EOT_EOT
-# 1 <;> nextstate(main 609 (eval 34):3) v:%,{
+# 1 <;> nextstate(main 609 (eval 34):3) v:{
# 2 <0> pushmark s
# 3 <0> pushmark s
# 4 <0> pushmark s
@@ -538,7 +538,7 @@ EOT_EOT
# 8 <@> mapstart lK*
# 9 <|> mapwhile(other->a)[t11] lK
# a <0> enter l
-# b <;> nextstate(main 608 (eval 34):2) v:%,{
+# b <;> nextstate(main 608 (eval 34):2) v:{
# c <0> pushmark s
# d <$> gvsv(*_) s
# e </> match(/"=(\\d+)"/) l/RTIME
@@ -581,7 +581,7 @@ checkOptree(name => q{sort other::sub LIST },
code => q{package other; sub backwards ($$) { $_[1] cmp $_[0]; }
package main; @new = sort other::backwards @old; },
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-# 1 <;> nextstate(main 614 (eval 36):2) v:%,{
+# 1 <;> nextstate(main 614 (eval 36):2) v:{
# 2 <0> pushmark s
# 3 <0> pushmark s
# 4 <$> const[PV "other::backwards"] s/BARE
@@ -594,7 +594,7 @@ checkOptree(name => q{sort other::sub LIST },
# b <2> aassign[t5] KS/COMMON
# c <1> leavesub[1 ref] K/REFC,1
EOT_EOT
-# 1 <;> nextstate(main 614 (eval 36):2) v:%,{
+# 1 <;> nextstate(main 614 (eval 36):2) v:{
# 2 <0> pushmark s
# 3 <0> pushmark s
# 4 <$> const(PV "other::backwards") s/BARE
@@ -621,7 +621,7 @@ checkOptree(note => q{},
bcopts => q{-exec},
code => q{sub other::backwards ($$) { $_[1] cmp $_[0]; } @new = sort other::backwards @old; },
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-# 1 <;> nextstate(main 619 (eval 38):1) v:%
+# 1 <;> nextstate(main 619 (eval 38):1) v
# 2 <0> pushmark s
# 3 <0> pushmark s
# 4 <$> const[PV "other::backwards"] s/BARE
@@ -634,7 +634,7 @@ checkOptree(note => q{},
# b <2> aassign[t5] KS/COMMON
# c <1> leavesub[1 ref] K/REFC,1
EOT_EOT
-# 1 <;> nextstate(main 546 (eval 15):1) v:%
+# 1 <;> nextstate(main 546 (eval 15):1) v
# 2 <0> pushmark s
# 3 <0> pushmark s
# 4 <$> const(PV "other::backwards") s/BARE
@@ -742,7 +742,7 @@ checkOptree(note => q{},
bcopts => q{-exec},
code => q{@articles = sort {$FooPack::b <=> $FooPack::a} @files; },
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-# 1 <;> nextstate(main 667 (eval 44):1) v:%
+# 1 <;> nextstate(main 667 (eval 44):1) v
# 2 <0> pushmark s
# 3 <0> pushmark s
# 4 <#> gv[*files] s
@@ -754,7 +754,7 @@ checkOptree(note => q{},
# a <2> aassign[t8] KS/COMMON
# b <1> leavesub[1 ref] K/REFC,1
EOT_EOT
-# 1 <;> nextstate(main 546 (eval 15):1) v:%
+# 1 <;> nextstate(main 546 (eval 15):1) v
# 2 <0> pushmark s
# 3 <0> pushmark s
# 4 <$> gv(*files) s
@@ -779,7 +779,7 @@ checkOptree(note => q{},
bcopts => q{-exec},
code => q{@result = sort { $a <=> $b } grep { $_ == $_ } @input; },
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-# 1 <;> nextstate(main 673 (eval 46):1) v:%
+# 1 <;> nextstate(main 673 (eval 46):1) v
# 2 <0> pushmark s
# 3 <0> pushmark s
# 4 <0> pushmark s
@@ -799,7 +799,7 @@ checkOptree(note => q{},
# g <2> aassign[t3] KS/COMMON
# h <1> leavesub[1 ref] K/REFC,1
EOT_EOT
-# 1 <;> nextstate(main 547 (eval 15):1) v:%
+# 1 <;> nextstate(main 547 (eval 15):1) v
# 2 <0> pushmark s
# 3 <0> pushmark s
# 4 <0> pushmark s
@@ -832,14 +832,14 @@ checkOptree(note => q{},
bcopts => q{-exec},
code => q{sort { $a <=> $b } @input; },
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-# 1 <;> nextstate(main 678 (eval 48):1) v:%
+# 1 <;> nextstate(main 678 (eval 48):1) v
# 2 <0> pushmark s
# 3 <#> gv[*input] s
# 4 <1> rv2av[t5] lK/1
# 5 <@> sort K/NUM
# 6 <1> leavesub[1 ref] K/REFC,1
EOT_EOT
-# 1 <;> nextstate(main 546 (eval 15):1) v:%
+# 1 <;> nextstate(main 546 (eval 15):1) v
# 2 <0> pushmark s
# 3 <$> gv(*input) s
# 4 <1> rv2av[t2] lK/1
@@ -859,7 +859,7 @@ checkOptree(note => q{},
bcopts => q{-exec},
code => q{sort { $a <=> $b } grep { $_ == $_ } @input; },
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-# 1 <;> nextstate(main 684 (eval 50):1) v:%
+# 1 <;> nextstate(main 684 (eval 50):1) v
# 2 <0> pushmark s
# 3 <0> pushmark s
# 4 <#> gv[*input] s
@@ -874,7 +874,7 @@ checkOptree(note => q{},
# b <@> sort K/NUM
# c <1> leavesub[1 ref] K/REFC,1
EOT_EOT
-# 1 <;> nextstate(main 547 (eval 15):1) v:%
+# 1 <;> nextstate(main 547 (eval 15):1) v
# 2 <0> pushmark s
# 3 <0> pushmark s
# 4 <$> gv(*input) s
@@ -902,7 +902,7 @@ checkOptree(note => q{},
bcopts => q{-exec},
code => q{$s = sort { $a <=> $b } @input; },
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-# 1 <;> nextstate(main 689 (eval 52):1) v:%,{
+# 1 <;> nextstate(main 689 (eval 52):1) v:{
# 2 <0> pushmark s
# 3 <#> gv[*input] s
# 4 <1> rv2av[t6] lK/1
@@ -911,7 +911,7 @@ checkOptree(note => q{},
# 7 <2> sassign sKS/2
# 8 <1> leavesub[1 ref] K/REFC,1
EOT_EOT
-# 1 <;> nextstate(main 546 (eval 15):1) v:%,{
+# 1 <;> nextstate(main 546 (eval 15):1) v:{
# 2 <0> pushmark s
# 3 <$> gv(*input) s
# 4 <1> rv2av[t2] lK/1
@@ -932,7 +932,7 @@ checkOptree(note => q{},
bcopts => q{-exec},
code => q{$s = sort { $a <=> $b } grep { $_ == $_ } @input; },
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-# 1 <;> nextstate(main 695 (eval 54):1) v:%,{
+# 1 <;> nextstate(main 695 (eval 54):1) v:{
# 2 <0> pushmark s
# 3 <0> pushmark s
# 4 <#> gv[*input] s
@@ -949,7 +949,7 @@ checkOptree(note => q{},
# d <2> sassign sKS/2
# e <1> leavesub[1 ref] K/REFC,1
EOT_EOT
-# 1 <;> nextstate(main 547 (eval 15):1) v:%,{
+# 1 <;> nextstate(main 547 (eval 15):1) v:{
# 2 <0> pushmark s
# 3 <0> pushmark s
# 4 <$> gv(*input) s
diff --git a/ext/B/t/optree_check.t b/ext/B/t/optree_check.t
index c84e2f9564..bcbb5549ec 100644
--- a/ext/B/t/optree_check.t
+++ b/ext/B/t/optree_check.t
@@ -202,7 +202,7 @@ EONT_EONT
checkOptree ( code => '$a=$b+42',
bcopts => '-exec',
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-# 1 <;> nextstate(main 837 (eval 24):1) v:%,{
+# 1 <;> nextstate(main 837 (eval 24):1) v:{
# 2 <#> gvsv[*b] s
# 3 <$> const[IV 42] s
# 4 <2> add[t3] sK/2
@@ -210,7 +210,7 @@ checkOptree ( code => '$a=$b+42',
# 6 <2> sassign sKS/2
# 7 <1> leavesub[1 ref] K/REFC,1
EOT_EOT
-# 1 <;> nextstate(main 837 (eval 24):1) v:%,{
+# 1 <;> nextstate(main 837 (eval 24):1) v:{
# 2 <$> gvsv(*b) s
# 3 <$> const(IV 42) s
# 4 <2> add[t1] sK/2
diff --git a/ext/B/t/optree_constants.t b/ext/B/t/optree_constants.t
index 7c109f0d85..7c04b22f26 100644
--- a/ext/B/t/optree_constants.t
+++ b/ext/B/t/optree_constants.t
@@ -109,12 +109,12 @@ for $func (sort keys %$want) {
expect => <<EOT_EOT, expect_nt => <<EONT_EONT);
3 <1> leavesub[2 refs] K/REFC,1 ->(end)
- <\@> lineseq KP ->3
-1 <;> dbstate(main 833 (eval 44):1) v:% ->2
+1 <;> dbstate(main 833 (eval 44):1) v ->2
2 <\$> const[$want->{$func}[0] $want->{$func}[1]] s* ->3
EOT_EOT
3 <1> leavesub[2 refs] K/REFC,1 ->(end)
- <\@> lineseq KP ->3
-1 <;> dbstate(main 833 (eval 44):1) v:% ->2
+1 <;> dbstate(main 833 (eval 44):1) v ->2
2 <\$> const($want->{$func}[0] $want->{$func}[1]) s* ->3
EONT_EONT
@@ -181,12 +181,12 @@ EONT_EONT
my ($expect, $expect_nt) = (<<'EOT_EOT', <<'EONT_EONT');
# 3 <1> leavesub[2 refs] K/REFC,1 ->(end)
# - <@> lineseq K ->3
-# 1 <;> nextstate(constant 61 constant.pm:118) v:%,*,& ->2
+# 1 <;> nextstate(constant 61 constant.pm:118) v:x*,x&,x$,*,& ->2
# 2 <0> padav[@list:FAKE:m:96] ->3
EOT_EOT
# 3 <1> leavesub[2 refs] K/REFC,1 ->(end)
# - <@> lineseq K ->3
-# 1 <;> nextstate(constant 61 constant.pm:118) v:%,*,& ->2
+# 1 <;> nextstate(constant 61 constant.pm:118) v:x*,x&,x$,*,& ->2
# 2 <0> padav[@list:FAKE:m:71] ->3
EONT_EONT
@@ -254,14 +254,14 @@ checkOptree ( name => 'arithmetic constant folding in print',
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
# 5 <1> leavesub[1 ref] K/REFC,1 ->(end)
# - <@> lineseq KP ->5
-# 1 <;> nextstate(main 937 (eval 53):1) v:% ->2
+# 1 <;> nextstate(main 937 (eval 53):1) v ->2
# 4 <@> print sK ->5
# 2 <0> pushmark s ->3
# 3 <$> const[IV 6] s ->4
EOT_EOT
# 5 <1> leavesub[1 ref] K/REFC,1 ->(end)
# - <@> lineseq KP ->5
-# 1 <;> nextstate(main 937 (eval 53):1) v:% ->2
+# 1 <;> nextstate(main 937 (eval 53):1) v ->2
# 4 <@> print sK ->5
# 2 <0> pushmark s ->3
# 3 <$> const(IV 6) s ->4
@@ -273,14 +273,14 @@ checkOptree ( name => 'string constant folding in print',
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
# 5 <1> leavesub[1 ref] K/REFC,1 ->(end)
# - <@> lineseq KP ->5
-# 1 <;> nextstate(main 942 (eval 55):1) v:% ->2
+# 1 <;> nextstate(main 942 (eval 55):1) v ->2
# 4 <@> print sK ->5
# 2 <0> pushmark s ->3
# 3 <$> const[PV "foobar"] s ->4
EOT_EOT
# 5 <1> leavesub[1 ref] K/REFC,1 ->(end)
# - <@> lineseq KP ->5
-# 1 <;> nextstate(main 942 (eval 55):1) v:% ->2
+# 1 <;> nextstate(main 942 (eval 55):1) v ->2
# 4 <@> print sK ->5
# 2 <0> pushmark s ->3
# 3 <$> const(PV "foobar") s ->4
@@ -292,14 +292,14 @@ checkOptree ( name => 'boolean or folding',
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
# 5 <1> leavesub[1 ref] K/REFC,1 ->(end)
# - <@> lineseq KP ->5
-# 1 <;> nextstate(main 942 (eval 55):1) v:% ->2
+# 1 <;> nextstate(main 942 (eval 55):1) v ->2
# 4 <@> print sK ->5
# 2 <0> pushmark s ->3
# 3 <$> const[PV "foobar"] s ->4
EOT_EOT
# 5 <1> leavesub[1 ref] K/REFC,1 ->(end)
# - <@> lineseq KP ->5
-# 1 <;> nextstate(main 942 (eval 55):1) v:% ->2
+# 1 <;> nextstate(main 942 (eval 55):1) v ->2
# 4 <@> print sK ->5
# 2 <0> pushmark s ->3
# 3 <$> const(PV "foobar") s ->4
@@ -384,14 +384,14 @@ checkOptree ( name => 'mixed constant folding, with explicit braces',
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
# 5 <1> leavesub[1 ref] K/REFC,1 ->(end)
# - <@> lineseq KP ->5
-# 1 <;> nextstate(main 977 (eval 28):1) v:% ->2
+# 1 <;> nextstate(main 977 (eval 28):1) v ->2
# 4 <@> print sK ->5
# 2 <0> pushmark s ->3
# 3 <$> const[PV "foobar5"] s ->4
EOT_EOT
# 5 <1> leavesub[1 ref] K/REFC,1 ->(end)
# - <@> lineseq KP ->5
-# 1 <;> nextstate(main 977 (eval 28):1) v:% ->2
+# 1 <;> nextstate(main 977 (eval 28):1) v ->2
# 4 <@> print sK ->5
# 2 <0> pushmark s ->3
# 3 <$> const(PV "foobar5") s ->4
diff --git a/ext/B/t/optree_samples.t b/ext/B/t/optree_samples.t
index a8f608f3aa..3e0b7f8997 100644
--- a/ext/B/t/optree_samples.t
+++ b/ext/B/t/optree_samples.t
@@ -424,7 +424,7 @@ checkOptree ( name => '@foo = grep(!/^\#/, @bar)',
code => '@foo = grep(!/^\#/, @bar)',
bcopts => '-exec',
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-# 1 <;> nextstate(main 496 (eval 20):1) v:%,{
+# 1 <;> nextstate(main 496 (eval 20):1) v:{
# 2 <0> pushmark s
# 3 <0> pushmark s
# 4 <#> gv[*bar] s
@@ -440,7 +440,7 @@ checkOptree ( name => '@foo = grep(!/^\#/, @bar)',
# d <2> aassign[t6] KS/COMMON
# e <1> leavesub[1 ref] K/REFC,1
EOT_EOT
-# 1 <;> nextstate(main 496 (eval 20):1) v:%,{
+# 1 <;> nextstate(main 496 (eval 20):1) v:{
# 2 <0> pushmark s
# 3 <0> pushmark s
# 4 <$> gv(*bar) s
@@ -464,7 +464,7 @@ checkOptree ( name => '%h = map { getkey($_) => $_ } @a',
code => '%h = map { getkey($_) => $_ } @a',
bcopts => '-exec',
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-# 1 <;> nextstate(main 501 (eval 22):1) v:%,{
+# 1 <;> nextstate(main 501 (eval 22):1) v:{
# 2 <0> pushmark s
# 3 <0> pushmark s
# 4 <#> gv[*a] s
@@ -472,7 +472,7 @@ checkOptree ( name => '%h = map { getkey($_) => $_ } @a',
# 6 <@> mapstart lK*
# 7 <|> mapwhile(other->8)[t9] lK
# 8 <0> enter l
-# 9 <;> nextstate(main 500 (eval 22):1) v:%,{
+# 9 <;> nextstate(main 500 (eval 22):1) v:{
# a <0> pushmark s
# b <0> pushmark s
# c <#> gvsv[*_] s
@@ -488,7 +488,7 @@ checkOptree ( name => '%h = map { getkey($_) => $_ } @a',
# l <2> aassign[t10] KS/COMMON
# m <1> leavesub[1 ref] K/REFC,1
EOT_EOT
-# 1 <;> nextstate(main 501 (eval 22):1) v:%,{
+# 1 <;> nextstate(main 501 (eval 22):1) v:{
# 2 <0> pushmark s
# 3 <0> pushmark s
# 4 <$> gv(*a) s
@@ -496,7 +496,7 @@ EOT_EOT
# 6 <@> mapstart lK*
# 7 <|> mapwhile(other->8)[t4] lK
# 8 <0> enter l
-# 9 <;> nextstate(main 500 (eval 22):1) v:%,{
+# 9 <;> nextstate(main 500 (eval 22):1) v:{
# a <0> pushmark s
# b <0> pushmark s
# c <$> gvsv(*_) s
@@ -517,13 +517,13 @@ checkOptree ( name => '%h=(); for $_(@a){$h{getkey($_)} = $_}',
code => '%h=(); for $_(@a){$h{getkey($_)} = $_}',
bcopts => '-exec',
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-# 1 <;> nextstate(main 505 (eval 24):1) v:%
+# 1 <;> nextstate(main 505 (eval 24):1) v
# 2 <0> pushmark s
# 3 <0> pushmark s
# 4 <#> gv[*h] s
# 5 <1> rv2hv[t2] lKRM*/1
# 6 <2> aassign[t3] vKS
-# 7 <;> nextstate(main 506 (eval 24):1) v:%,{
+# 7 <;> nextstate(main 506 (eval 24):1) v:{
# 8 <0> pushmark sM
# 9 <#> gv[*a] s
# a <1> rv2av[t6] sKRM/1
@@ -532,7 +532,7 @@ checkOptree ( name => '%h=(); for $_(@a){$h{getkey($_)} = $_}',
# d <{> enteriter(next->o last->r redo->e) lKS/8
# p <0> iter s
# q <|> and(other->e) K/1
-# e <;> nextstate(main 505 (eval 24):1) v:%,{
+# e <;> nextstate(main 505 (eval 24):1) v:{
# f <#> gvsv[*_] s
# g <#> gv[*h] s
# h <1> rv2hv sKR/1
@@ -547,13 +547,13 @@ checkOptree ( name => '%h=(); for $_(@a){$h{getkey($_)} = $_}',
# r <2> leaveloop KP/2
# s <1> leavesub[1 ref] K/REFC,1
EOT_EOT
-# 1 <;> nextstate(main 505 (eval 24):1) v:%
+# 1 <;> nextstate(main 505 (eval 24):1) v
# 2 <0> pushmark s
# 3 <0> pushmark s
# 4 <$> gv(*h) s
# 5 <1> rv2hv[t1] lKRM*/1
# 6 <2> aassign[t2] vKS
-# 7 <;> nextstate(main 506 (eval 24):1) v:%,{
+# 7 <;> nextstate(main 506 (eval 24):1) v:{
# 8 <0> pushmark sM
# 9 <$> gv(*a) s
# a <1> rv2av[t3] sKRM/1
@@ -562,7 +562,7 @@ EOT_EOT
# d <{> enteriter(next->o last->r redo->e) lKS/8
# p <0> iter s
# q <|> and(other->e) K/1
-# e <;> nextstate(main 505 (eval 24):1) v:%,{
+# e <;> nextstate(main 505 (eval 24):1) v:{
# f <$> gvsv(*_) s
# g <$> gv(*h) s
# h <1> rv2hv sKR/1
@@ -582,7 +582,7 @@ checkOptree ( name => 'map $_+42, 10..20',
code => 'map $_+42, 10..20',
bcopts => '-exec',
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-# 1 <;> nextstate(main 497 (eval 20):1) v:%
+# 1 <;> nextstate(main 497 (eval 20):1) v
# 2 <0> pushmark s
# 3 <$> const[AV ] s
# 4 <1> rv2av lKPM/1
@@ -594,7 +594,7 @@ checkOptree ( name => 'map $_+42, 10..20',
# goto 6
# a <1> leavesub[1 ref] K/REFC,1
EOT_EOT
-# 1 <;> nextstate(main 511 (eval 26):1) v:%
+# 1 <;> nextstate(main 511 (eval 26):1) v
# 2 <0> pushmark s
# 3 <$> const(AV ) s
# 4 <1> rv2av lKPM/1
diff --git a/ext/B/t/optree_specials.t b/ext/B/t/optree_specials.t
index c6e41995d0..5af6bd2501 100644
--- a/ext/B/t/optree_specials.t
+++ b/ext/B/t/optree_specials.t
@@ -49,10 +49,10 @@ checkOptree ( name => 'BEGIN',
# BEGIN 1:
# a <1> leavesub[1 ref] K/REFC,1 ->(end)
# - <@> lineseq KP ->a
-# 1 <;> nextstate(B::Concise -275 Concise.pm:356) v:%,*,&,{,$ ->2
+# 1 <;> nextstate(B::Concise -275 Concise.pm:356) v:x*,x&,x$,*,&,{,$ ->2
# 3 <1> require sK/1 ->4
# 2 <$> const[PV "strict.pm"] s/BARE ->3
-# 4 <;> nextstate(B::Concise -275 Concise.pm:356) v:%,*,&,{,$ ->5
+# 4 <;> nextstate(B::Concise -275 Concise.pm:356) v:x*,x&,x$,*,&,{,$ ->5
# - <@> lineseq K ->-
# - <0> null ->5
# 9 <1> entersub[t1] KS*/TARG,2 ->a
@@ -63,10 +63,10 @@ checkOptree ( name => 'BEGIN',
# BEGIN 2:
# k <1> leavesub[1 ref] K/REFC,1 ->(end)
# - <@> lineseq K ->k
-# b <;> nextstate(B::Concise -265 Concise.pm:367) v:%,*,&,$ ->c
+# b <;> nextstate(B::Concise -265 Concise.pm:367) v:x*,x&,x$,*,&,$ ->c
# d <1> require sK/1 ->e
# c <$> const[PV "strict.pm"] s/BARE ->d
-# e <;> nextstate(B::Concise -265 Concise.pm:367) v:%,*,&,$ ->f
+# e <;> nextstate(B::Concise -265 Concise.pm:367) v:x*,x&,x$,*,&,$ ->f
# - <@> lineseq K ->-
# - <0> null ->f
# j <1> entersub[t1] KS*/TARG,2 ->k
@@ -77,10 +77,10 @@ checkOptree ( name => 'BEGIN',
# BEGIN 3:
# u <1> leavesub[1 ref] K/REFC,1 ->(end)
# - <@> lineseq KP ->u
-# l <;> nextstate(B::Concise -254 Concise.pm:386) v:%,*,&,{,$ ->m
+# l <;> nextstate(B::Concise -254 Concise.pm:386) v:x*,x&,x$,*,&,{,$ ->m
# n <1> require sK/1 ->o
# m <$> const[PV "warnings.pm"] s/BARE ->n
-# o <;> nextstate(B::Concise -254 Concise.pm:386) v:%,*,&,{,$ ->p
+# o <;> nextstate(B::Concise -254 Concise.pm:386) v:x*,x&,x$,*,&,{,$ ->p
# - <@> lineseq K ->-
# - <0> null ->p
# t <1> entersub[t1] KS*/TARG,2 ->u
@@ -99,10 +99,10 @@ EOT_EOT
# BEGIN 1:
# a <1> leavesub[1 ref] K/REFC,1 ->(end)
# - <@> lineseq KP ->a
-# 1 <;> nextstate(B::Concise -275 Concise.pm:356) v:%,*,&,{,$ ->2
+# 1 <;> nextstate(B::Concise -275 Concise.pm:356) v:x*,x&,x$,*,&,{,$ ->2
# 3 <1> require sK/1 ->4
# 2 <$> const(PV "strict.pm") s/BARE ->3
-# 4 <;> nextstate(B::Concise -275 Concise.pm:356) v:%,*,&,{,$ ->5
+# 4 <;> nextstate(B::Concise -275 Concise.pm:356) v:x*,x&,x$,*,&,{,$ ->5
# - <@> lineseq K ->-
# - <0> null ->5
# 9 <1> entersub[t1] KS*/TARG,2 ->a
@@ -113,10 +113,10 @@ EOT_EOT
# BEGIN 2:
# k <1> leavesub[1 ref] K/REFC,1 ->(end)
# - <@> lineseq K ->k
-# b <;> nextstate(B::Concise -265 Concise.pm:367) v:%,*,&,$ ->c
+# b <;> nextstate(B::Concise -265 Concise.pm:367) v:x*,x&,x$,*,&,$ ->c
# d <1> require sK/1 ->e
# c <$> const(PV "strict.pm") s/BARE ->d
-# e <;> nextstate(B::Concise -265 Concise.pm:367) v:%,*,&,$ ->f
+# e <;> nextstate(B::Concise -265 Concise.pm:367) v:x*,x&,x$,*,&,$ ->f
# - <@> lineseq K ->-
# - <0> null ->f
# j <1> entersub[t1] KS*/TARG,2 ->k
@@ -127,10 +127,10 @@ EOT_EOT
# BEGIN 3:
# u <1> leavesub[1 ref] K/REFC,1 ->(end)
# - <@> lineseq KP ->u
-# l <;> nextstate(B::Concise -254 Concise.pm:386) v:%,*,&,{,$ ->m
+# l <;> nextstate(B::Concise -254 Concise.pm:386) v:x*,x&,x$,*,&,{,$ ->m
# n <1> require sK/1 ->o
# m <$> const(PV "warnings.pm") s/BARE ->n
-# o <;> nextstate(B::Concise -254 Concise.pm:386) v:%,*,&,{,$ ->p
+# o <;> nextstate(B::Concise -254 Concise.pm:386) v:x*,x&,x$,*,&,{,$ ->p
# - <@> lineseq K ->-
# - <0> null ->p
# t <1> entersub[t1] KS*/TARG,2 ->u
@@ -248,10 +248,10 @@ checkOptree ( name => 'all of BEGIN END INIT CHECK UNITCHECK -exec',
strip_open_hints => 1,
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
# BEGIN 1:
-# 1 <;> nextstate(B::Concise -275 Concise.pm:356) v:%,*,&,{,$
+# 1 <;> nextstate(B::Concise -275 Concise.pm:356) v:x*,x&,x$,*,&,{,$
# 2 <$> const[PV "strict.pm"] s/BARE
# 3 <1> require sK/1
-# 4 <;> nextstate(B::Concise -275 Concise.pm:356) v:%,*,&,{,$
+# 4 <;> nextstate(B::Concise -275 Concise.pm:356) v:x*,x&,x$,*,&,{,$
# 5 <0> pushmark s
# 6 <$> const[PV "strict"] sM
# 7 <$> const[PV "refs"] sM
@@ -259,10 +259,10 @@ checkOptree ( name => 'all of BEGIN END INIT CHECK UNITCHECK -exec',
# 9 <1> entersub[t1] KS*/TARG,2
# a <1> leavesub[1 ref] K/REFC,1
# BEGIN 2:
-# b <;> nextstate(B::Concise -265 Concise.pm:367) v:%,*,&,$
+# b <;> nextstate(B::Concise -265 Concise.pm:367) v:x*,x&,x$,*,&,$
# c <$> const[PV "strict.pm"] s/BARE
# d <1> require sK/1
-# e <;> nextstate(B::Concise -265 Concise.pm:367) v:%,*,&,$
+# e <;> nextstate(B::Concise -265 Concise.pm:367) v:x*,x&,x$,*,&,$
# f <0> pushmark s
# g <$> const[PV "strict"] sM
# h <$> const[PV "refs"] sM
@@ -270,10 +270,10 @@ checkOptree ( name => 'all of BEGIN END INIT CHECK UNITCHECK -exec',
# j <1> entersub[t1] KS*/TARG,2
# k <1> leavesub[1 ref] K/REFC,1
# BEGIN 3:
-# l <;> nextstate(B::Concise -254 Concise.pm:386) v:%,*,&,{,$
+# l <;> nextstate(B::Concise -254 Concise.pm:386) v:x*,x&,x$,*,&,{,$
# m <$> const[PV "warnings.pm"] s/BARE
# n <1> require sK/1
-# o <;> nextstate(B::Concise -254 Concise.pm:386) v:%,*,&,{,$
+# o <;> nextstate(B::Concise -254 Concise.pm:386) v:x*,x&,x$,*,&,{,$
# p <0> pushmark s
# q <$> const[PV "warnings"] sM
# r <$> const[PV "qw"] sM
@@ -307,10 +307,10 @@ checkOptree ( name => 'all of BEGIN END INIT CHECK UNITCHECK -exec',
# 1e <1> leavesub[1 ref] K/REFC,1
EOT_EOT
# BEGIN 1:
-# 1 <;> nextstate(B::Concise -275 Concise.pm:356) v:%,*,&,{,$
+# 1 <;> nextstate(B::Concise -275 Concise.pm:356) v:x*,x&,x$,*,&,{,$
# 2 <$> const(PV "strict.pm") s/BARE
# 3 <1> require sK/1
-# 4 <;> nextstate(B::Concise -275 Concise.pm:356) v:%,*,&,{,$
+# 4 <;> nextstate(B::Concise -275 Concise.pm:356) v:x*,x&,x$,*,&,{,$
# 5 <0> pushmark s
# 6 <$> const(PV "strict") sM
# 7 <$> const(PV "refs") sM
@@ -318,10 +318,10 @@ EOT_EOT
# 9 <1> entersub[t1] KS*/TARG,2
# a <1> leavesub[1 ref] K/REFC,1
# BEGIN 2:
-# b <;> nextstate(B::Concise -265 Concise.pm:367) v:%,*,&,$
+# b <;> nextstate(B::Concise -265 Concise.pm:367) v:x*,x&,x$,*,&,$
# c <$> const(PV "strict.pm") s/BARE
# d <1> require sK/1
-# e <;> nextstate(B::Concise -265 Concise.pm:367) v:%,*,&,$
+# e <;> nextstate(B::Concise -265 Concise.pm:367) v:x*,x&,x$,*,&,$
# f <0> pushmark s
# g <$> const(PV "strict") sM
# h <$> const(PV "refs") sM
@@ -329,10 +329,10 @@ EOT_EOT
# j <1> entersub[t1] KS*/TARG,2
# k <1> leavesub[1 ref] K/REFC,1
# BEGIN 3:
-# l <;> nextstate(B::Concise -254 Concise.pm:386) v:%,*,&,{,$
+# l <;> nextstate(B::Concise -254 Concise.pm:386) v:x*,x&,x$,*,&,{,$
# m <$> const(PV "warnings.pm") s/BARE
# n <1> require sK/1
-# o <;> nextstate(B::Concise -254 Concise.pm:386) v:%,*,&,{,$
+# o <;> nextstate(B::Concise -254 Concise.pm:386) v:x*,x&,x$,*,&,{,$
# p <0> pushmark s
# q <$> const(PV "warnings") sM
# r <$> const(PV "qw") sM
@@ -377,10 +377,10 @@ checkOptree ( name => 'regression test for patch 25352',
@warnings_todo,
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
# BEGIN 1:
-# 1 <;> nextstate(B::Concise -275 Concise.pm:356) v:%,*,&,{,$
+# 1 <;> nextstate(B::Concise -275 Concise.pm:356) v:x*,x&,x$,*,&,{,$
# 2 <$> const[PV "strict.pm"] s/BARE
# 3 <1> require sK/1
-# 4 <;> nextstate(B::Concise -275 Concise.pm:356) v:%,*,&,{,$
+# 4 <;> nextstate(B::Concise -275 Concise.pm:356) v:x*,x&,x$,*,&,{,$
# 5 <0> pushmark s
# 6 <$> const[PV "strict"] sM
# 7 <$> const[PV "refs"] sM
@@ -388,10 +388,10 @@ checkOptree ( name => 'regression test for patch 25352',
# 9 <1> entersub[t1] KS*/TARG,2
# a <1> leavesub[1 ref] K/REFC,1
# BEGIN 2:
-# b <;> nextstate(B::Concise -265 Concise.pm:367) v:%,*,&,$
+# b <;> nextstate(B::Concise -265 Concise.pm:367) v:x*,x&,x$,*,&,$
# c <$> const[PV "strict.pm"] s/BARE
# d <1> require sK/1
-# e <;> nextstate(B::Concise -265 Concise.pm:367) v:%,*,&,$
+# e <;> nextstate(B::Concise -265 Concise.pm:367) v:x*,x&,x$,*,&,$
# f <0> pushmark s
# g <$> const[PV "strict"] sM
# h <$> const[PV "refs"] sM
@@ -399,10 +399,10 @@ checkOptree ( name => 'regression test for patch 25352',
# j <1> entersub[t1] KS*/TARG,2
# k <1> leavesub[1 ref] K/REFC,1
# BEGIN 3:
-# l <;> nextstate(B::Concise -254 Concise.pm:386) v:%,*,&,{,$
+# l <;> nextstate(B::Concise -254 Concise.pm:386) v:x*,x&,x$,*,&,{,$
# m <$> const[PV "warnings.pm"] s/BARE
# n <1> require sK/1
-# o <;> nextstate(B::Concise -254 Concise.pm:386) v:%,*,&,{,$
+# o <;> nextstate(B::Concise -254 Concise.pm:386) v:x*,x&,x$,*,&,{,$
# p <0> pushmark s
# q <$> const[PV "warnings"] sM
# r <$> const[PV "qw"] sM
@@ -411,10 +411,10 @@ checkOptree ( name => 'regression test for patch 25352',
# u <1> leavesub[1 ref] K/REFC,1
EOT_EOT
# BEGIN 1:
-# 1 <;> nextstate(B::Concise -275 Concise.pm:356) v:%,*,&,{,$
+# 1 <;> nextstate(B::Concise -275 Concise.pm:356) v:x*,x&,x$,*,&,{,$
# 2 <$> const(PV "strict.pm") s/BARE
# 3 <1> require sK/1
-# 4 <;> nextstate(B::Concise -275 Concise.pm:356) v:%,*,&,{,$
+# 4 <;> nextstate(B::Concise -275 Concise.pm:356) v:x*,x&,x$,*,&,{,$
# 5 <0> pushmark s
# 6 <$> const(PV "strict") sM
# 7 <$> const(PV "refs") sM
@@ -422,10 +422,10 @@ EOT_EOT
# 9 <1> entersub[t1] KS*/TARG,2
# a <1> leavesub[1 ref] K/REFC,1
# BEGIN 2:
-# b <;> nextstate(B::Concise -265 Concise.pm:367) v:%,*,&,$
+# b <;> nextstate(B::Concise -265 Concise.pm:367) v:x*,x&,x$,*,&,$
# c <$> const(PV "strict.pm") s/BARE
# d <1> require sK/1
-# e <;> nextstate(B::Concise -265 Concise.pm:367) v:%,*,&,$
+# e <;> nextstate(B::Concise -265 Concise.pm:367) v:x*,x&,x$,*,&,$
# f <0> pushmark s
# g <$> const(PV "strict") sM
# h <$> const(PV "refs") sM
@@ -433,10 +433,10 @@ EOT_EOT
# j <1> entersub[t1] KS*/TARG,2
# k <1> leavesub[1 ref] K/REFC,1
# BEGIN 3:
-# l <;> nextstate(B::Concise -254 Concise.pm:386) v:%,*,&,{,$
+# l <;> nextstate(B::Concise -254 Concise.pm:386) v:x*,x&,x$,*,&,{,$
# m <$> const(PV "warnings.pm") s/BARE
# n <1> require sK/1
-# o <;> nextstate(B::Concise -254 Concise.pm:386) v:%,*,&,{,$
+# o <;> nextstate(B::Concise -254 Concise.pm:386) v:x*,x&,x$,*,&,{,$
# p <0> pushmark s
# q <$> const(PV "warnings") sM
# r <$> const(PV "qw") sM