HV * cop_stash; /* package line was compiled in */
GV * cop_filegv; /* file the following line # is from */
#endif
+ U32 cop_hints; /* hints bits from pragmata */
U32 cop_seq; /* parse sequence number */
line_t cop_line; /* line # of this command */
/* Beware. mg.c and warnings.pl assume the type of this is STRLEN *: */
"$[", 2, 0, 0)) \
: 0)
#define CopARYBASE_set(c, b) STMT_START { \
- if (b || ((c)->op_private & HINT_ARYBASE)) { \
- (c)->op_private |= HINT_ARYBASE; \
+ if (b || ((c)->cop_hints & HINT_ARYBASE)) { \
+ (c)->cop_hints |= HINT_ARYBASE; \
if ((c) == &PL_compiling) \
PL_hints |= HINT_LOCALIZE_HH | HINT_ARYBASE; \
(c)->cop_hints_hash \
} STMT_END
/* FIXME NATIVE_HINTS if this is changed from op_private (see perl.h) */
-#define CopHINTS_get(c) ((c)->op_private + 0)
+#define CopHINTS_get(c) ((c)->cop_hints + 0)
#define CopHINTS_set(c, h) STMT_START { \
- (c)->op_private \
- = (U8)((h) & HINT_PRIVATE_MASK); \
+ (c)->cop_hints = (h); \
} STMT_END
/*
#
package B;
-our $VERSION = '1.10';
+our $VERSION = '1.11';
use XSLoader ();
require Exporter;
=item io
+=item hints
+
=back
#define COP_arybase(o) CopARYBASE_get(o)
#define COP_line(o) CopLINE(o)
#define COP_io(o) o->cop_io
+#define COP_hints(o) CopHINTS_get(o)
MODULE = B PACKAGE = B::COP PREFIX = COP_
COP_io(o)
B::COP o
+U32
+COP_hints(o)
+ B::COP o
+
MODULE = B PACKAGE = B::SV
U32
use Exporter (); # use #5
-our $VERSION = "0.68";
+our $VERSION = "0.69";
our @ISA = qw(Exporter);
our @EXPORT_OK = qw( set_style set_style_standard add_callback
concise_subref concise_cv concise_main
"(*( )*)goto #class (#addr)\n",
"#class pp_#name"],
"concise" =>
- ["#hyphseq2 (*( (x( ;)x))*)<#classsym> "
- . "#exname#arg(?([#targarglife])?)~#flags(?(/#private)?)(x(;~->#next)x)\n"
+ ["#hyphseq2 (*( (x( ;)x))*)<#classsym> #exname#arg(?([#targarglife])?)"
+ . "~#flags(?(/#private)?)(?(:#hints)?)(x(;~->#next)x)\n"
, " (*( )*) goto #seq\n",
"(?(<#seq>)?)#exname#arg(?([#targarglife])?)"],
"linenoise" =>
["#class (#addr)\n\top_next\t\t#nextaddr\n\top_sibling\t#sibaddr\n\t"
. "op_ppaddr\tPL_ppaddr[OP_#NAME]\n\top_type\t\t#typenum\n" .
($] > 5.009 ? '' : "\top_seq\t\t#seqnum\n")
- . "\top_flags\t#flagval\n\top_private\t#privval\n"
+ . "\top_flags\t#flagval\n\top_private\t#privval\t#hintsval\n"
. "(?(\top_first\t#firstaddr\n)?)(?(\top_last\t\t#lastaddr\n)?)"
. "(?(\top_sv\t\t#svaddr\n)?)",
" GOTO #addr\n",
for ("mapwhile", "mapstart", "grepwhile", "grepstart");
}
-sub private_flags {
- my($name, $x) = @_;
+our %hints; # used to display each COP's op_hints values
+
+# strict refs, subs, vars
+@hints{2,512,1024} = ('$', '&', '*');
+# integers, locale, bytes, arybase
+@hints{1,4,8,16,32} = ('i', 'l', 'b', '[');
+# block scope, localise %^H
+@hints{256,131072} = ('{','%');
+# overload new integer, float, binary, string, re
+@hints{4096,8192,16384,32768,65536} = ('I', 'F', 'B', 'S', 'R');
+# taint and eval
+@hints{1048576,2097152} = ('T', 'E');
+# filetest access, UTF-8, assertions, assertions seen
+@hints{4194304,8388608,16777216,33554432} = ('X', 'U', 'A', 'a');
+
+sub _flags {
+ my($hash, $x) = @_;
my @s;
- for my $flag (128, 96, 64, 32, 16, 8, 4, 2, 1) {
- if ($priv{$name}{$flag} and $x & $flag and $x >= $flag) {
+ for my $flag (sort {$b <=> $a} keys %$hash) {
+ if ($hash->{$flag} and $x & $flag and $x >= $flag) {
$x -= $flag;
- push @s, $priv{$name}{$flag};
+ push @s, $hash->{$flag};
}
}
push @s, $x if $x;
return join(",", @s);
}
+sub private_flags {
+ my($name, $x) = @_;
+ _flags($priv{$name}, $x);
+}
+
+sub hints_flags {
+ my($x) = @_;
+ _flags(\%hints, $x);
+}
+
sub concise_sv {
my($sv, $hr, $preferpv) = @_;
$hr->{svclass} = class($sv);
$h{flags} = op_flags($op->flags);
$h{privval} = $op->private;
$h{private} = private_flags($h{name}, $op->private);
+ if ($op->can("hints")) {
+ $h{hintsval} = $op->hints;
+ $h{hints} = hints_flags($h{hintsval});
+ } else {
+ $h{hintsval} = $h{hints} = '';
+ }
$h{addr} = sprintf("%#x", $$op);
$h{typenum} = $op->type;
$h{noise} = $linenoise[$op->type];
The numeric value of the OP's flags.
+=item B<#hints>
+
+The COP's hint flags, rendered with abbreviated names if possible. An empty
+string if this is not a COP.
+
+=item B<#hintsval>
+
+The numeric value of the COP's hint flags, or an empty string if this is not
+a COP.
+
=item B<#hyphseq>
The sequence number of the OP, or a hyphen if it doesn't have one.
CVf_METHOD CVf_LOCKED CVf_LVALUE CVf_ASSERTION
PMf_KEEP PMf_GLOBAL PMf_CONTINUE PMf_EVAL PMf_ONCE PMf_SKIPWHITE
PMf_MULTILINE PMf_SINGLELINE PMf_FOLD PMf_EXTENDED);
-$VERSION = 0.75;
+$VERSION = 0.76;
use strict;
use vars qw/$AUTOLOAD/;
use warnings ();
$self->{'warnings'} = defined ($self->{'ambient_warnings'})
? $self->{'ambient_warnings'} & WARN_MASK
: undef;
- $self->{'hints'} = $self->{'ambient_hints'} & 0xFF;
+ $self->{'hints'} = $self->{'ambient_hints'};
# also a convenient place to clear out subs_declared
delete $self->{'subs_declared'};
$self->{'warnings'} = $warning_bits;
}
- if ($self->{'hints'} != $op->private) {
- push @text, declare_hints($self->{'hints'}, $op->private);
- $self->{'hints'} = $op->private;
+ if ($self->{'hints'} != $op->hints) {
+ push @text, declare_hints($self->{'hints'}, $op->hints);
+ $self->{'hints'} = $op->hints;
}
# This should go after of any branches that add statements, to
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
# 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
# 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
# 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
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
# 4 <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
# 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
# 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
# 4 <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
# 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
# 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
# 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
# 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
# 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
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
# 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
# v <2> aassign[t27] KS/COMMON
# w <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
# 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
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
# 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
bcopts => q{-exec},
code => q{use sort 'stable'; @new = sort { substr($a, 3, 5) cmp substr($b, 3, 5) } @old; },
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-# 1 <;> nextstate(main 656 (eval 40):1) v
+# 1 <;> nextstate(main 656 (eval 40):1) v:%,{
# 2 <0> pushmark s
# 3 <0> pushmark s
# 4 <#> gv[*old] s
# a <2> aassign[t14] KS/COMMON
# b <1> leavesub[1 ref] K/REFC,1
EOT_EOT
-# 1 <;> nextstate(main 578 (eval 15):1) v
+# 1 <;> nextstate(main 578 (eval 15):1) v:%,{
# 2 <0> pushmark s
# 3 <0> pushmark s
# 4 <$> gv(*old) s
bcopts => q{-exec},
code => q{use sort '_mergesort'; @new = sort { substr($a, 3, 5) cmp substr($b, 3, 5) } @old; },
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-# 1 <;> nextstate(main 662 (eval 42):1) v
+# 1 <;> nextstate(main 662 (eval 42):1) v:%,{
# 2 <0> pushmark s
# 3 <0> pushmark s
# 4 <#> gv[*old] s
# a <2> aassign[t14] KS/COMMON
# b <1> leavesub[1 ref] K/REFC,1
EOT_EOT
-# 1 <;> nextstate(main 578 (eval 15):1) v
+# 1 <;> nextstate(main 578 (eval 15):1) v:%,{
# 2 <0> pushmark s
# 3 <0> pushmark s
# 4 <$> gv(*old) s
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
# 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
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
# 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
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
# 7 <1> leavesub[1 ref] K/REFC,1 ->(end)
# - <@> lineseq KP ->7
-# 1 <;> nextstate(main 380 optree_selftest.t:139) v ->2
+# 1 <;> nextstate(main 380 optree_selftest.t:139) v:{ ->2
# 6 <2> sassign sKS/2 ->7
# 4 <2> add[t3] sK/2 ->5
# - <1> ex-rv2sv sK/1 ->3
EOT_EOT
# 7 <1> leavesub[1 ref] K/REFC,1 ->(end)
# - <@> lineseq KP ->7
-# 1 <;> nextstate(main 60 optree_concise.t:122) v ->2
+# 1 <;> nextstate(main 60 optree_concise.t:122) v:{ ->2
# 6 <2> sassign sKS/2 ->7
# 4 <2> add[t1] sK/2 ->5
# - <1> ex-rv2sv sK/1 ->3
checkOptree ( code => '$a=$b+42',
bcopts => '-exec',
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-# 1 <;> nextstate(main 61 optree_concise.t:139) v
+# 1 <;> nextstate(main 61 optree_concise.t:139) v:{
# 2 <#> gvsv[*b] s
# 3 <$> const[IV 42] s
# 4 <2> add[t3] sK/2
# 6 <2> sassign sKS/2
# 7 <1> leavesub[1 ref] K/REFC,1
EOT_EOT
-# 1 <;> nextstate(main 61 optree_concise.t:139) v
+# 1 <;> nextstate(main 61 optree_concise.t:139) v:{
# 2 <$> gvsv(*b) s
# 3 <$> const(IV 42) s
# 4 <2> add[t1] sK/2
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
# 7 <1> leavesub[1 ref] K/REFC,1 ->(end)
# - <@> lineseq KP ->7
-# 1 <;> nextstate(foo bar) v ->2
+# 1 <;> nextstate(foo bar) v:{ ->2
# 6 <2> sassign sKS/2 ->7
# 4 <2> add[t3] sK/2 ->5
# - <1> ex-rv2sv sK/1 ->3
EOT_EOT
# 7 <1> leavesub[1 ref] K/REFC,1 ->(end)
# - <@> lineseq KP ->7
-# 1 <;> nextstate(main 60 optree_concise.t:122) v ->2
+# 1 <;> nextstate(main 60 optree_concise.t:122) v:{ ->2
# 6 <2> sassign sKS/2 ->7
# 4 <2> add[t1] sK/2 ->5
# - <1> ex-rv2sv sK/1 ->3
bcopts => '-exec',
code => sub{$a=$b+42},
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-# 1 <;> nextstate(main 61 optree_concise.t:139) v
+# 1 <;> nextstate(main 61 optree_concise.t:139) v:{
# 2 <#> gvsv[*b] s
# 3 <$> const[IV 42] s
# 4 <2> add[t3] sK/2
# 6 <2> sassign sKS/2
# 7 <1> leavesub[1 ref] K/REFC,1
EOT_EOT
-# 1 <;> nextstate(main 61 optree_concise.t:139) v
+# 1 <;> nextstate(main 61 optree_concise.t:139) v:{
# 2 <$> gvsv(*b) s
# 3 <$> const(IV 42) s
# 4 <2> add[t1] sK/2
bcopts => '-base3',
code => sub{$a=$b+42},
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-1 <;> dbstate(main 24 optree_concise.t:132) v
+1 <;> dbstate(main 24 optree_concise.t:132) v:{
2 <#> gvsv[*b] s
10 <$> const[IV 42] s
11 <2> add[t3] sK/2
20 <2> sassign sKS/2
21 <1> leavesub[1 ref] K/REFC,1
EOT_EOT
-# 1 <;> nextstate(main 62 optree_concise.t:161) v
+# 1 <;> nextstate(main 62 optree_concise.t:161) v:{
# 2 <$> gvsv(*b) s
# 10 <$> const(IV 42) s
# 11 <2> add[t1] sK/2
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
21 <1> leavesub[1 ref] K/REFC,1 ->(end)
- <@> lineseq KP ->21
-1 <;> nextstate(main 32 optree_concise.t:164) v ->2
+1 <;> nextstate(main 32 optree_concise.t:164) v:{ ->2
20 <2> sassign sKS/2 ->21
11 <2> add[t3] sK/2 ->12
- <1> ex-rv2sv sK/1 ->10
EOT_EOT
# 21 <1> leavesub[1 ref] K/REFC,1 ->(end)
# - <@> lineseq KP ->21
-# 1 <;> nextstate(main 63 optree_concise.t:186) v ->2
+# 1 <;> nextstate(main 63 optree_concise.t:186) v:{ ->2
# 20 <2> sassign sKS/2 ->21
# 11 <2> add[t1] sK/2 ->12
# - <1> ex-rv2sv sK/1 ->10
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
13 <1> leavesub[1 ref] K/REFC,1 ->(end)
- <@> lineseq KP ->13
-1 <;> nextstate(main 26 optree_concise.t:145) v ->2
+1 <;> nextstate(main 26 optree_concise.t:145) v:{ ->2
12 <2> sassign sKS/2 ->13
10 <2> add[t3] sK/2 ->11
- <1> ex-rv2sv sK/1 ->3
EOT_EOT
# 13 <1> leavesub[1 ref] K/REFC,1 ->(end)
# - <@> lineseq KP ->13
-# 1 <;> nextstate(main 64 optree_concise.t:193) v ->2
+# 1 <;> nextstate(main 64 optree_concise.t:193) v:{ ->2
# 12 <2> sassign sKS/2 ->13
# 10 <2> add[t1] sK/2 ->11
# - <1> ex-rv2sv sK/1 ->3
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
# 7 <@> leave[1 ref] vKP/REFC ->(end)
# 1 <0> enter ->2
-# 2 <;> nextstate(main 1 -e:1) v ->3
+# 2 <;> nextstate(main 1 -e:1) v:{ ->3
# 6 <@> sort vK ->7
# 3 <0> pushmark s ->4
# 5 <1> rv2av[t2] lK/1 ->6
EOT_EOT
# 7 <@> leave[1 ref] vKP/REFC ->(end)
# 1 <0> enter ->2
-# 2 <;> nextstate(main 1 -e:1) v ->3
+# 2 <;> nextstate(main 1 -e:1) v:{ ->3
# 6 <@> sort vK ->7
# 3 <0> pushmark s ->4
# 5 <1> rv2av[t1] lK/1 ->6
bcopts => '-exec',
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1 <0> enter
-2 <;> nextstate(main 1 -e:1) v
+2 <;> nextstate(main 1 -e:1) v:{
3 <0> pushmark s
4 <#> gv[*a] s
5 <1> rv2av[t2] lK/1
7 <@> leave[1 ref] vKP/REFC
EOT_EOT
# 1 <0> enter
-# 2 <;> nextstate(main 1 -e:1) v
+# 2 <;> nextstate(main 1 -e:1) v:{
# 3 <0> pushmark s
# 4 <$> gv(*a) s
# 5 <1> rv2av[t1] lK/1
errs => ['Useless use of sort in void context at -e line 1.'],
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
# 1 <0> enter
-# 2 <;> nextstate(main 1 -e:1) v
+# 2 <;> nextstate(main 1 -e:1) v:{
# 3 <#> gv[*a] s
# 4 <1> rv2av[t3] vK/OURINTR,1
-# 5 <;> nextstate(main 2 -e:1) v
+# 5 <;> nextstate(main 2 -e:1) v:{
# 6 <0> pushmark s
# 7 <#> gv[*a] s
# 8 <1> rv2av[t5] lK/1
# a <@> leave[1 ref] vKP/REFC
EOT_EOT
# 1 <0> enter
-# 2 <;> nextstate(main 1 -e:1) v
+# 2 <;> nextstate(main 1 -e:1) v:{
# 3 <$> gv(*a) s
# 4 <1> rv2av[t2] vK/OURINTR,1
-# 5 <;> nextstate(main 2 -e:1) v
+# 5 <;> nextstate(main 2 -e:1) v:{
# 6 <0> pushmark s
# 7 <$> gv(*a) s
# 8 <1> rv2av[t3] lK/1
bcopts => [qw/ -concise -exec /],
code => sub{$a=$b+42},
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-1 <;> nextstate(main 76 optree_concise.t:337) v
+1 <;> nextstate(main 76 optree_concise.t:337) v:{
2 <#> gvsv[*b] s
3 <$> const[IV 42] CALLBACK s
4 <2> add[t3] sK/2
6 <2> sassign sKS/2
7 <1> leavesub[1 ref] K/REFC,1
EOT_EOT
-# 1 <;> nextstate(main 455 optree_concise.t:328) v
+# 1 <;> nextstate(main 455 optree_concise.t:328) v:{
# 2 <$> gvsv(*b) s
# 3 <$> const(IV 42) CALLBACK s
# 4 <2> add[t1] sK/2
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
# 3 <1> leavesub[2 refs] K/REFC,1 ->(end)
# - <@> lineseq K ->3
-# 1 <;> nextstate(constant 685 constant.pm:121) v ->2
+# 1 <;> nextstate(constant 685 constant.pm:121) v:*,& ->2
# 2 <0> padav[@list:FAKE:m:102] ->3
EOT_EOT
# 3 <1> leavesub[2 refs] K/REFC,1 ->(end)
# - <@> lineseq K ->3
-# 1 <;> nextstate(constant 685 constant.pm:121) v ->2
+# 1 <;> nextstate(constant 685 constant.pm:121) v:*,& ->2
# 2 <0> padav[@list:FAKE:m:76] ->3
EONT_EONT
# 3 <;> nextstate(main 635 optree_misc.t:25) v ->4
# 5 <1> rv2av[t4] vK/OURINTR,1 ->6
# 4 <#> gv[*y] s ->5
-# 6 <;> nextstate(main 636 optree_misc.t:25) v ->7
+# 6 <;> nextstate(main 636 optree_misc.t:25) v:{ ->7
# 9 <2> add[t6] sK/2 ->a
# - <1> ex-aelem sK/2 ->8
# 7 <0> aelemfast[@x:634,636] sR* ->8
# 3 <;> nextstate(main 635 optree_misc.t:27) v ->4
# 5 <1> rv2av[t3] vK/OURINTR,1 ->6
# 4 <$> gv(*y) s ->5
-# 6 <;> nextstate(main 636 optree_misc.t:27) v ->7
+# 6 <;> nextstate(main 636 optree_misc.t:27) v:{ ->7
# 9 <2> add[t4] sK/2 ->a
# - <1> ex-aelem sK/2 ->8
# 7 <0> aelemfast[@x:634,636] sR* ->8
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
# 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
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
# 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
# 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
# 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
# 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
# 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
# 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
# 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
bcopts => '-exec',
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
# 1 <0> enter
-# 2 <;> nextstate(main 71 -e:1) v
+# 2 <;> nextstate(main 71 -e:1) v:{
# 3 <0> pushmark s
# 4 <$> const[PV "junk"] s
# 5 <@> print vK
# 6 <@> leave[1 ref] vKP/REFC
EOT_EOT
# 1 <0> enter
-# 2 <;> nextstate(main 71 -e:1) v
+# 2 <;> nextstate(main 71 -e:1) v:{
# 3 <0> pushmark s
# 4 <$> const(PV "junk") s
# 5 <@> print vK
bcopts => '-exec',
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1 <0> enter
-2 <;> nextstate(main 1 -e:1) v
+2 <;> nextstate(main 1 -e:1) v:{
3 <0> pushmark s
4 <#> gv[*a] s
5 <1> rv2av[t2] lK/1
7 <@> leave[1 ref] vKP/REFC
EOT_EOT
# 1 <0> enter
-# 2 <;> nextstate(main 1 -e:1) v
+# 2 <;> nextstate(main 1 -e:1) v:{
# 3 <0> pushmark s
# 4 <$> gv(*a) s
# 5 <1> rv2av[t1] lK/1
bcopts => '-exec',
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1 <0> enter
-2 <;> nextstate(main 1 -e:1) v
+2 <;> nextstate(main 1 -e:1) v:{
3 <0> pushmark s
4 <0> pushmark s
5 <#> gv[*a] s
8 <@> leave[1 ref] vKP/REFC
EOT_EOT
# 1 <0> enter
-# 2 <;> nextstate(main 1 -e:1) v
+# 2 <;> nextstate(main 1 -e:1) v:{
# 3 <0> pushmark s
# 4 <0> pushmark s
# 5 <$> gv(*a) s
bcopts => '-exec',
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1 <0> enter
-2 <;> nextstate(main 1 -e:1) v
+2 <;> nextstate(main 1 -e:1) v:{
3 <0> pushmark s
4 <0> pushmark s
5 <#> gv[*a] s
6 <1> rv2av[t4] lKRM*/1
7 <@> sort lK/INPLACE
-8 <;> nextstate(main 1 -e:1) v
+8 <;> nextstate(main 1 -e:1) v:{
9 <0> pushmark s
a <#> gv[*a] s
b <1> rv2av[t7] lK/1
d <@> leave[1 ref] vKP/REFC
EOT_EOT
# 1 <0> enter
-# 2 <;> nextstate(main 1 -e:1) v
+# 2 <;> nextstate(main 1 -e:1) v:{
# 3 <0> pushmark s
# 4 <0> pushmark s
# 5 <$> gv(*a) s
# 6 <1> rv2av[t2] lKRM*/1
# 7 <@> sort lK/INPLACE
-# 8 <;> nextstate(main 1 -e:1) v
+# 8 <;> nextstate(main 1 -e:1) v:{
# 9 <0> pushmark s
# a <$> gv(*a) s
# b <1> rv2av[t4] lK/1
bcopts => '-exec',
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1 <0> enter
-2 <;> nextstate(main 1 -e:1) v
+2 <;> nextstate(main 1 -e:1) v:{
3 <0> padav[@a:1,2] vM/LVINTRO
-4 <;> nextstate(main 2 -e:1) v
+4 <;> nextstate(main 2 -e:1) v:{
5 <0> pushmark s
6 <0> pushmark s
7 <0> padav[@a:1,2] lRM*
9 <@> leave[1 ref] vKP/REFC
EOT_EOT
# 1 <0> enter
-# 2 <;> nextstate(main 1 -e:1) v
+# 2 <;> nextstate(main 1 -e:1) v:{
# 3 <0> padav[@a:1,2] vM/LVINTRO
-# 4 <;> nextstate(main 2 -e:1) v
+# 4 <;> nextstate(main 2 -e:1) v:{
# 5 <0> pushmark s
# 6 <0> pushmark s
# 7 <0> padav[@a:1,2] lRM*
5 <0> pushmark s
6 <0> padav[@a:-437,-436] lRM*
7 <@> sort lK/INPLACE
-8 <;> nextstate(main -436 optree.t:325) v
+8 <;> nextstate(main -436 optree.t:325) v:{
9 <0> pushmark s
a <0> padav[@a:-437,-436] lRM
b <$> const[IV 1] s
# 5 <0> pushmark s
# 6 <0> padav[@a:429,430] lRM*
# 7 <@> sort lK/INPLACE
-# 8 <;> nextstate(main 430 optree_sort.t:220) v
+# 8 <;> nextstate(main 430 optree_sort.t:220) v:{
# 9 <0> pushmark s
# a <0> padav[@a:429,430] lRM
# b <$> const(IV 1) s
5 <0> pushmark s
6 <0> padav[@a:-437,-436] lRM*
7 <@> sort lK/INPLACE
-8 <;> nextstate(main -436 optree.t:346) v
+8 <;> nextstate(main -436 optree.t:346) v:{
9 <$> const[IV 1] s
a <1> leavesub[1 ref] K/REFC,1
EOT_EOT
# 5 <0> pushmark s
# 6 <0> padav[@a:431,432] lRM*
# 7 <@> sort lK/INPLACE
-# 8 <;> nextstate(main 432 optree_sort.t:251) v
+# 8 <;> nextstate(main 432 optree_sort.t:251) v:{
# 9 <$> const(IV 1) s
# a <1> leavesub[1 ref] K/REFC,1
EONT_EONT
# BEGIN 1:
# b <1> leavesub[1 ref] K/REFC,1 ->(end)
# - <@> lineseq KP ->b
-# 1 <;> nextstate(B::Concise -234 Concise.pm:328) v/2 ->2
+# 1 <;> nextstate(B::Concise -234 Concise.pm:328) v:*,&,{,$ ->2
# 3 <1> require sK/1 ->4
# 2 <$> const[PV "warnings.pm"] s/BARE ->3
-# 4 <;> nextstate(B::Concise -234 Concise.pm:328) v/2 ->5
+# 4 <;> nextstate(B::Concise -234 Concise.pm:328) v:*,&,{,$ ->5
# - <@> lineseq K ->-
-# 5 <;> nextstate(B::Concise -234 Concise.pm:328) /2 ->6
+# 5 <;> nextstate(B::Concise -234 Concise.pm:328) :*,&,{,$ ->6
# a <1> entersub[t1] KS*/TARG,2 ->b
# 6 <0> pushmark s ->7
# 7 <$> const[PV "warnings"] sM ->8
# BEGIN 2:
# f <1> leavesub[1 ref] K/REFC,1 ->(end)
# - <@> lineseq KP ->f
-# c <;> nextstate(main 2 -e:1) v ->d
+# c <;> nextstate(main 2 -e:1) v:{ ->d
# e <1> postinc[t3] sK/1 ->f
# - <1> ex-rv2sv sKRM/1 ->e
# d <#> gvsv[*beg] s ->e
# BEGIN 1:
# b <1> leavesub[1 ref] K/REFC,1 ->(end)
# - <@> lineseq KP ->b
-# 1 <;> nextstate(B::Concise -234 Concise.pm:328) v/2 ->2
+# 1 <;> nextstate(B::Concise -234 Concise.pm:328) v:*,&,{,$ ->2
# 3 <1> require sK/1 ->4
# 2 <$> const(PV "warnings.pm") s/BARE ->3
-# 4 <;> nextstate(B::Concise -234 Concise.pm:328) v/2 ->5
+# 4 <;> nextstate(B::Concise -234 Concise.pm:328) v:*,&,{,$ ->5
# - <@> lineseq K ->-
-# 5 <;> nextstate(B::Concise -234 Concise.pm:328) /2 ->6
+# 5 <;> nextstate(B::Concise -234 Concise.pm:328) :*,&,{,$ ->6
# a <1> entersub[t1] KS*/TARG,2 ->b
# 6 <0> pushmark s ->7
# 7 <$> const(PV "warnings") sM ->8
# BEGIN 2:
# f <1> leavesub[1 ref] K/REFC,1 ->(end)
# - <@> lineseq KP ->f
-# c <;> nextstate(main 2 -e:1) v ->d
+# c <;> nextstate(main 2 -e:1) v:{ ->d
# e <1> postinc[t2] sK/1 ->f
# - <1> ex-rv2sv sKRM/1 ->e
# d <$> gvsv(*beg) s ->e
# END 1:
# 4 <1> leavesub[1 ref] K/REFC,1 ->(end)
# - <@> lineseq KP ->4
-# 1 <;> nextstate(main 5 -e:6) v ->2
+# 1 <;> nextstate(main 5 -e:6) v:{ ->2
# 3 <1> postinc[t3] sK/1 ->4
# - <1> ex-rv2sv sKRM/1 ->3
# 2 <#> gvsv[*end] s ->3
# END 1:
# 4 <1> leavesub[1 ref] K/REFC,1 ->(end)
# - <@> lineseq KP ->4
-# 1 <;> nextstate(main 5 -e:6) v ->2
+# 1 <;> nextstate(main 5 -e:6) v:{ ->2
# 3 <1> postinc[t2] sK/1 ->4
# - <1> ex-rv2sv sKRM/1 ->3
# 2 <$> gvsv(*end) s ->3
# CHECK 1:
# 4 <1> leavesub[1 ref] K/REFC,1 ->(end)
# - <@> lineseq KP ->4
-# 1 <;> nextstate(main 3 -e:4) v ->2
+# 1 <;> nextstate(main 3 -e:4) v:{ ->2
# 3 <1> postinc[t3] sK/1 ->4
# - <1> ex-rv2sv sKRM/1 ->3
# 2 <#> gvsv[*chk] s ->3
# CHECK 1:
# 4 <1> leavesub[1 ref] K/REFC,1 ->(end)
# - <@> lineseq KP ->4
-# 1 <;> nextstate(main 3 -e:4) v ->2
+# 1 <;> nextstate(main 3 -e:4) v:{ ->2
# 3 <1> postinc[t2] sK/1 ->4
# - <1> ex-rv2sv sKRM/1 ->3
# 2 <$> gvsv(*chk) s ->3
# INIT 1:
# 4 <1> leavesub[1 ref] K/REFC,1 ->(end)
# - <@> lineseq KP ->4
-# 1 <;> nextstate(main 4 -e:5) v ->2
+# 1 <;> nextstate(main 4 -e:5) v:{ ->2
# 3 <1> postinc[t3] sK/1 ->4
# - <1> ex-rv2sv sKRM/1 ->3
# 2 <#> gvsv[*init] s ->3
# INIT 1:
# 4 <1> leavesub[1 ref] K/REFC,1 ->(end)
# - <@> lineseq KP ->4
-# 1 <;> nextstate(main 4 -e:5) v ->2
+# 1 <;> nextstate(main 4 -e:5) v:{ ->2
# 3 <1> postinc[t2] sK/1 ->4
# - <1> ex-rv2sv sKRM/1 ->3
# 2 <$> gvsv(*init) s ->3
@warnings_todo,
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
# BEGIN 1:
-# 1 <;> nextstate(B::Concise -234 Concise.pm:328) v/2
+# 1 <;> nextstate(B::Concise -234 Concise.pm:328) v:*,&,{,$
# 2 <$> const[PV "warnings.pm"] s/BARE
# 3 <1> require sK/1
-# 4 <;> nextstate(B::Concise -234 Concise.pm:328) v/2
-# 5 <;> nextstate(B::Concise -234 Concise.pm:328) /2
+# 4 <;> nextstate(B::Concise -234 Concise.pm:328) v:*,&,{,$
+# 5 <;> nextstate(B::Concise -234 Concise.pm:328) :*,&,{,$
# 6 <0> pushmark s
# 7 <$> const[PV "warnings"] sM
# 8 <$> const[PV "qw"] sM
# a <1> entersub[t1] KS*/TARG,2
# b <1> leavesub[1 ref] K/REFC,1
# BEGIN 2:
-# c <;> nextstate(main 2 -e:1) v
+# c <;> nextstate(main 2 -e:1) v:{
# d <#> gvsv[*beg] s
# e <1> postinc[t3] sK/1
# f <1> leavesub[1 ref] K/REFC,1
# END 1:
-# g <;> nextstate(main 5 -e:1) v
+# g <;> nextstate(main 5 -e:1) v:{
# h <#> gvsv[*end] s
# i <1> postinc[t3] sK/1
# j <1> leavesub[1 ref] K/REFC,1
# INIT 1:
-# k <;> nextstate(main 4 -e:1) v
+# k <;> nextstate(main 4 -e:1) v:{
# l <#> gvsv[*init] s
# m <1> postinc[t3] sK/1
# n <1> leavesub[1 ref] K/REFC,1
# CHECK 1:
-# o <;> nextstate(main 3 -e:1) v
+# o <;> nextstate(main 3 -e:1) v:{
# p <#> gvsv[*chk] s
# q <1> postinc[t3] sK/1
# r <1> leavesub[1 ref] K/REFC,1
EOT_EOT
# BEGIN 1:
-# 1 <;> nextstate(B::Concise -234 Concise.pm:328) v/2
+# 1 <;> nextstate(B::Concise -234 Concise.pm:328) v:*,&,{,$
# 2 <$> const(PV "warnings.pm") s/BARE
# 3 <1> require sK/1
-# 4 <;> nextstate(B::Concise -234 Concise.pm:328) v/2
-# 5 <;> nextstate(B::Concise -234 Concise.pm:328) /2
+# 4 <;> nextstate(B::Concise -234 Concise.pm:328) v:*,&,{,$
+# 5 <;> nextstate(B::Concise -234 Concise.pm:328) :*,&,{,$
# 6 <0> pushmark s
# 7 <$> const(PV "warnings") sM
# 8 <$> const(PV "qw") sM
# a <1> entersub[t1] KS*/TARG,2
# b <1> leavesub[1 ref] K/REFC,1
# BEGIN 2:
-# c <;> nextstate(main 2 -e:1) v
+# c <;> nextstate(main 2 -e:1) v:{
# d <$> gvsv(*beg) s
# e <1> postinc[t2] sK/1
# f <1> leavesub[1 ref] K/REFC,1
# END 1:
-# g <;> nextstate(main 5 -e:1) v
+# g <;> nextstate(main 5 -e:1) v:{
# h <$> gvsv(*end) s
# i <1> postinc[t2] sK/1
# j <1> leavesub[1 ref] K/REFC,1
# INIT 1:
-# k <;> nextstate(main 4 -e:1) v
+# k <;> nextstate(main 4 -e:1) v:{
# l <$> gvsv(*init) s
# m <1> postinc[t2] sK/1
# n <1> leavesub[1 ref] K/REFC,1
# CHECK 1:
-# o <;> nextstate(main 3 -e:1) v
+# o <;> nextstate(main 3 -e:1) v:{
# p <$> gvsv(*chk) s
# q <1> postinc[t2] sK/1
# r <1> leavesub[1 ref] K/REFC,1
@warnings_todo,
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
# BEGIN 1:
-# 1 <;> nextstate(B::Concise -234 Concise.pm:359) v/2
+# 1 <;> nextstate(B::Concise -234 Concise.pm:359) v:*,&,{,$
# 2 <$> const[PV "warnings.pm"] s/BARE
# 3 <1> require sK/1
-# 4 <;> nextstate(B::Concise -234 Concise.pm:359) v/2
-# 5 <;> nextstate(B::Concise -234 Concise.pm:359) /2
+# 4 <;> nextstate(B::Concise -234 Concise.pm:359) v:*,&,{,$
+# 5 <;> nextstate(B::Concise -234 Concise.pm:359) :*,&,{,$
# 6 <0> pushmark s
# 7 <$> const[PV "warnings"] sM
# 8 <$> const[PV "qw"] sM
# b <1> leavesub[1 ref] K/REFC,1
EOT_EOT
# BEGIN 1:
-# 1 <;> nextstate(B::Concise -234 Concise.pm:359) v/2
+# 1 <;> nextstate(B::Concise -234 Concise.pm:359) v:*,&,{,$
# 2 <$> const(PV "warnings.pm") s/BARE
# 3 <1> require sK/1
-# 4 <;> nextstate(B::Concise -234 Concise.pm:359) v/2
-# 5 <;> nextstate(B::Concise -234 Concise.pm:359) /2
+# 4 <;> nextstate(B::Concise -234 Concise.pm:359) v:*,&,{,$
+# 5 <;> nextstate(B::Concise -234 Concise.pm:359) :*,&,{,$
# 6 <0> pushmark s
# 7 <$> const(PV "warnings") sM
# 8 <$> const(PV "qw") sM
bcopts => '-exec',
code => sub {local $a},
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-1 <;> nextstate(main 23 optree.t:57) v
+1 <;> nextstate(main 23 optree.t:57) v:{
2 <#> gvsv[*a] s/LVINTRO
3 <1> leavesub[1 ref] K/REFC,1
EOT_EOT
-# 1 <;> nextstate(main 53 optree.t:67) v
+# 1 <;> nextstate(main 53 optree.t:67) v:{
# 2 <$> gvsv(*a) s/LVINTRO
# 3 <1> leavesub[1 ref] K/REFC,1
EONT_EONT
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
# 4 <@> leave[1 ref] vKP/REFC ->(end)
# 1 <0> enter ->2
-# 2 <;> nextstate(main 1 -e:1) v ->3
+# 2 <;> nextstate(main 1 -e:1) v:{ ->3
# 3 <0> padsv[$a:1,2] vM/LVINTRO ->4
EOT_EOT
# 4 <@> leave[1 ref] vKP/REFC ->(end)
# 1 <0> enter ->2
-# 2 <;> nextstate(main 1 -e:1) v ->3
+# 2 <;> nextstate(main 1 -e:1) v:{ ->3
# 3 <0> padsv[$a:1,2] vM/LVINTRO ->4
EONT_EONT
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
4 <@> leave[1 ref] vKP/REFC ->(end)
1 <0> enter ->2
-2 <;> nextstate(main 1 -e:1) v ->3
+2 <;> nextstate(main 1 -e:1) v:{ ->3
- <1> ex-rv2sv vK/17 ->4
3 <#> gvsv[*a] s/OURINTR ->4
EOT_EOT
# 4 <@> leave[1 ref] vKP/REFC ->(end)
# 1 <0> enter ->2
-# 2 <;> nextstate(main 1 -e:1) v ->3
+# 2 <;> nextstate(main 1 -e:1) v:{ ->3
# - <1> ex-rv2sv vK/17 ->4
# 3 <$> gvsv(*a) s/OURINTR ->4
EONT_EONT
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
4 <@> leave[1 ref] vKP/REFC ->(end)
1 <0> enter ->2
-2 <;> nextstate(main 1 -e:1) v ->3
+2 <;> nextstate(main 1 -e:1) v:{ ->3
- <1> ex-rv2sv vKM/129 ->4
3 <#> gvsv[*a] s/LVINTRO ->4
EOT_EOT
# 4 <@> leave[1 ref] vKP/REFC ->(end)
# 1 <0> enter ->2
-# 2 <;> nextstate(main 1 -e:1) v ->3
+# 2 <;> nextstate(main 1 -e:1) v:{ ->3
# - <1> ex-rv2sv vKM/129 ->4
# 3 <$> gvsv(*a) s/LVINTRO ->4
EONT_EONT
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
5 <1> leavesub[1 ref] K/REFC,1 ->(end)
- <@> lineseq KP ->5
-1 <;> nextstate(main 26 optree.t:109) v ->2
+1 <;> nextstate(main 26 optree.t:109) v:{ ->2
4 <2> sassign sKS/2 ->5
2 <0> undef s ->3
- <1> ex-rv2sv sKRM*/17 ->4
EOT_EOT
# 5 <1> leavesub[1 ref] K/REFC,1 ->(end)
# - <@> lineseq KP ->5
-# 1 <;> nextstate(main 446 optree_varinit.t:137) v ->2
+# 1 <;> nextstate(main 446 optree_varinit.t:137) v:{ ->2
# 4 <2> sassign sKS/2 ->5
# 2 <0> undef s ->3
# - <1> ex-rv2sv sKRM*/17 ->4
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
5 <1> leavesub[1 ref] K/REFC,1 ->(end)
- <@> lineseq KP ->5
-1 <;> nextstate(main 28 optree.t:122) v ->2
+1 <;> nextstate(main 28 optree.t:122) v:{ ->2
4 <2> sassign sKS/2 ->5
2 <0> undef s ->3
- <1> ex-rv2sv sKRM*/129 ->4
EOT_EOT
# 5 <1> leavesub[1 ref] K/REFC,1 ->(end)
# - <@> lineseq KP ->5
-# 1 <;> nextstate(main 58 optree.t:141) v ->2
+# 1 <;> nextstate(main 58 optree.t:141) v:{ ->2
# 4 <2> sassign sKS/2 ->5
# 2 <0> undef s ->3
# - <1> ex-rv2sv sKRM*/129 ->4
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
6 <@> leave[1 ref] vKP/REFC ->(end)
1 <0> enter ->2
-2 <;> nextstate(main 1 -e:1) v ->3
+2 <;> nextstate(main 1 -e:1) v:{ ->3
5 <2> sassign vKS/2 ->6
3 <0> undef s ->4
4 <0> padsv[$a:1,2] sRM*/LVINTRO ->5
EOT_EOT
# 6 <@> leave[1 ref] vKP/REFC ->(end)
# 1 <0> enter ->2
-# 2 <;> nextstate(main 1 -e:1) v ->3
+# 2 <;> nextstate(main 1 -e:1) v:{ ->3
# 5 <2> sassign vKS/2 ->6
# 3 <0> undef s ->4
# 4 <0> padsv[$a:1,2] sRM*/LVINTRO ->5
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
6 <@> leave[1 ref] vKP/REFC ->(end)
1 <0> enter ->2
-2 <;> nextstate(main 1 -e:1) v ->3
+2 <;> nextstate(main 1 -e:1) v:{ ->3
5 <2> sassign vKS/2 ->6
3 <0> undef s ->4
- <1> ex-rv2sv sKRM*/17 ->5
EOT_EOT
# 6 <@> leave[1 ref] vKP/REFC ->(end)
# 1 <0> enter ->2
-# 2 <;> nextstate(main 1 -e:1) v ->3
+# 2 <;> nextstate(main 1 -e:1) v:{ ->3
# 5 <2> sassign vKS/2 ->6
# 3 <0> undef s ->4
# - <1> ex-rv2sv sKRM*/17 ->5
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
6 <@> leave[1 ref] vKP/REFC ->(end)
1 <0> enter ->2
-2 <;> nextstate(main 1 -e:1) v ->3
+2 <;> nextstate(main 1 -e:1) v:{ ->3
5 <2> sassign vKS/2 ->6
3 <0> undef s ->4
- <1> ex-rv2sv sKRM*/129 ->5
EOT_EOT
# 6 <@> leave[1 ref] vKP/REFC ->(end)
# 1 <0> enter ->2
-# 2 <;> nextstate(main 1 -e:1) v ->3
+# 2 <;> nextstate(main 1 -e:1) v:{ ->3
# 5 <2> sassign vKS/2 ->6
# 3 <0> undef s ->4
# - <1> ex-rv2sv sKRM*/129 ->5
#todo => 'probly not worth doing',
bcopts => '-exec',
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-1 <;> nextstate(main 31 optree.t:177) v
+1 <;> nextstate(main 31 optree.t:177) v:{
2 <0> stub sP
3 <#> gvsv[*a] s/OURINTR
4 <2> sassign sKS/2
5 <1> leavesub[1 ref] K/REFC,1
EOT_EOT
-# 1 <;> nextstate(main 440 optree_varinit.t:262) v
+# 1 <;> nextstate(main 440 optree_varinit.t:262) v:{
# 2 <0> stub sP
# 3 <$> gvsv(*a) s/OURINTR
# 4 <2> sassign sKS/2
#todo => 'probly not worth doing',
bcopts => '-exec',
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-1 <;> nextstate(main 33 optree.t:190) v
+1 <;> nextstate(main 33 optree.t:190) v:{
2 <0> stub sP
3 <#> gvsv[*a] s/LVINTRO
4 <2> sassign sKS/2
5 <1> leavesub[1 ref] K/REFC,1
EOT_EOT
-# 1 <;> nextstate(main 63 optree.t:225) v
+# 1 <;> nextstate(main 63 optree.t:225) v:{
# 2 <0> stub sP
# 3 <$> gvsv(*a) s/LVINTRO
# 4 <2> sassign sKS/2
bcopts => '-exec',
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1 <0> enter
-2 <;> nextstate(main 1 -e:1) v
+2 <;> nextstate(main 1 -e:1) v:{
3 <0> stub sP
4 <0> padsv[$a:1,2] sRM*/LVINTRO
5 <2> sassign vKS/2
6 <@> leave[1 ref] vKP/REFC
EOT_EOT
# 1 <0> enter
-# 2 <;> nextstate(main 1 -e:1) v
+# 2 <;> nextstate(main 1 -e:1) v:{
# 3 <0> stub sP
# 4 <0> padsv[$a:1,2] sRM*/LVINTRO
# 5 <2> sassign vKS/2
bcopts => '-exec',
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1 <0> enter
-2 <;> nextstate(main 1 -e:1) v
+2 <;> nextstate(main 1 -e:1) v:{
3 <0> stub sP
4 <#> gvsv[*a] s/OURINTR
5 <2> sassign vKS/2
6 <@> leave[1 ref] vKP/REFC
EOT_EOT
# 1 <0> enter
-# 2 <;> nextstate(main 1 -e:1) v
+# 2 <;> nextstate(main 1 -e:1) v:{
# 3 <0> stub sP
# 4 <$> gvsv(*a) s/OURINTR
# 5 <2> sassign vKS/2
bcopts => '-exec',
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1 <0> enter
-2 <;> nextstate(main 1 -e:1) v
+2 <;> nextstate(main 1 -e:1) v:{
3 <0> stub sP
4 <#> gvsv[*a] s/LVINTRO
5 <2> sassign vKS/2
6 <@> leave[1 ref] vKP/REFC
EOT_EOT
# 1 <0> enter
-# 2 <;> nextstate(main 1 -e:1) v
+# 2 <;> nextstate(main 1 -e:1) v:{
# 3 <0> stub sP
# 4 <$> gvsv(*a) s/LVINTRO
# 5 <2> sassign vKS/2
bcopts => '-exec',
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
# 1 <0> enter
-# 2 <;> nextstate(main 1 -e:1) v
+# 2 <;> nextstate(main 1 -e:1) v:{
# 3 <0> pushmark s
# 4 <0> pushmark sRM*/128
# 5 <0> padsv[$a:1,2] lRM*/LVINTRO
# 8 <@> leave[1 ref] vKP/REFC
EOT_EOT
# 1 <0> enter
-# 2 <;> nextstate(main 1 -e:1) v
+# 2 <;> nextstate(main 1 -e:1) v:{
# 3 <0> pushmark s
# 4 <0> pushmark sRM*/128
# 5 <0> padsv[$a:1,2] lRM*/LVINTRO
GvCV(CvGV(cv)) = 0; /* cv has been hijacked */\
call_list(oldscope, PL_beginav); \
PL_curcop = &PL_compiling; \
- PL_compiling.op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);\
+ CopHINTS_set(&PL_compiling, PL_hints); \
LEAVE; \
} STMT_END
#define BSET_push_init(ary,cv) \
(op) == OP_EQ || (op) == OP_I_EQ || \
(op) == OP_NE || (op) == OP_I_NE || \
(op) == OP_NCMP || (op) == OP_I_NCMP)
- o->op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
+ o->op_private = (U8)(PL_hints & HINT_INTEGER);
if (!(o->op_flags & OPf_STACKED) /* Not an assignment */
&& (o->op_type == OP_BIT_OR
|| o->op_type == OP_BIT_AND
want_vtbl_hintselem
};
- /* Note: the lowest 8 bits are reserved for
- stuffing into op->op_private */
-#define HINT_PRIVATE_MASK 0x000000ff
+
+/* Hints are now stored in a dedicated U32, so the bottom 8 bits are no longer
+ special and there is no need for HINT_PRIVATE_MASK for COPs
+ However, bitops store HINT_INTEGER in their op_private. */
#define HINT_INTEGER 0x00000001 /* integer pragma */
#define HINT_STRICT_REFS 0x00000002 /* strict pragma */
#define HINT_LOCALE 0x00000004 /* locale pragma */