use OptreeCheck; # ALSO DOES @ARGV HANDLING !!!!!!
use Config;
-plan tests => 7;
+plan tests => 8;
require_ok("B::Concise");
#print "out:$out\n";
-my $src = q[our ($beg, $chk, $init, $end) = qq{'foo'}; BEGIN { $beg++ } CHECK { $chk++ } INIT { $init++ } END { $end++ }];
+my $src = q[our ($beg, $chk, $init, $end, $uc) = qq{'foo'}; BEGIN { $beg++ } CHECK { $chk++ } INIT { $init++ } END { $end++ } UNITCHECK {$uc++}];
my @warnings_todo;
. "propagated to 5.8.x")
if $] < 5.009;
-
checkOptree ( name => 'BEGIN',
bcopts => 'BEGIN',
prog => $src,
@warnings_todo,
+ @open_todo,
expect => <<'EOT_EOT', expect_nt => <<'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
checkOptree ( name => 'END',
bcopts => 'END',
prog => $src,
+ @open_todo,
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
# 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
checkOptree ( name => 'CHECK',
bcopts => 'CHECK',
prog => $src,
+ @open_todo,
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
# 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
EONT_EONT
+checkOptree ( name => 'UNITCHECK',
+ bcopts => 'UNITCHECK',
+ prog => $src,
+ @open_todo,
+ expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
+# UNITCHECK 1:
+# 4 <1> leavesub[1 ref] K/REFC,1 ->(end)
+# - <@> lineseq KP ->4
+# 1 <;> nextstate(main 3 -e:4) v:{ ->2
+# 3 <1> postinc[t3] sK/1 ->4
+# - <1> ex-rv2sv sKRM/1 ->3
+# 2 <#> gvsv[*uc] s ->3
+EOT_EOT
+# UNITCHECK 1:
+# 4 <1> leavesub[1 ref] K/REFC,1 ->(end)
+# - <@> lineseq KP ->4
+# 1 <;> nextstate(main 3 -e:4) v:{ ->2
+# 3 <1> postinc[t2] sK/1 ->4
+# - <1> ex-rv2sv sKRM/1 ->3
+# 2 <$> gvsv(*uc) s ->3
+EONT_EONT
+
checkOptree ( name => 'INIT',
bcopts => 'INIT',
#todo => 'get working',
prog => $src,
+ @open_todo,
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
# 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
EONT_EONT
-checkOptree ( name => 'all of BEGIN END INIT CHECK -exec',
- bcopts => [qw/ BEGIN END INIT CHECK -exec /],
+checkOptree ( name => 'all of BEGIN END INIT CHECK UNITCHECK -exec',
+ bcopts => [qw/ BEGIN END INIT CHECK UNITCHECK -exec /],
prog => $src,
@warnings_todo,
+ @open_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
+# UNITCHECK 1:
+# s <;> nextstate(main 6 -e:1) v:{
+# t <#> gvsv[*uc] s
+# u <1> postinc[t3] sK/1
+# v <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
+# UNITCHECK 1:
+# s <;> nextstate(main 6 -e:1) v:{
+# t <$> gvsv(*uc) s
+# u <1> postinc[t2] sK/1
+# v <1> leavesub[1 ref] K/REFC,1
EONT_EONT
@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