📄 optree_specials.t
字号:
#!./perl# This tests the B:: module(s) with CHECK, BEGIN, END and INIT blocks. The# text excerpts below marked with "# " in front are the expected output. They# are there twice, EOT for threading, and EONT for a non-threading Perl. The# output is matched losely. If the match fails even though the "got" and# "expected" output look exactly the same, then watch for trailing, invisible# spaces.BEGIN { if ($ENV{PERL_CORE}){ chdir('t') if -d 't'; @INC = ('.', '../lib', '../ext/B/t'); } else { unshift @INC, 't'; push @INC, "../../t"; } require Config; if (($Config::Config{'extensions'} !~ /\bB\b/) ){ print "1..0 # Skip -- Perl configured without B module\n"; exit 0; } # require 'test.pl'; # now done by OptreeCheck}# import checkOptree(), and %gOpts (containing test state)use OptreeCheck; # ALSO DOES @ARGV HANDLING !!!!!!use Config;plan tests => 7 + ($] > 5.009 ? 1 : 0);require_ok("B::Concise");my $out = runperl( switches => ["-MO=Concise,BEGIN,CHECK,INIT,END,-exec"], prog => q{$a=$b && print q/foo/}, stderr => 1 );#print "out:$out\n";my $src = q[our ($beg, $chk, $init, $end, $uc) = qq{'foo'}; BEGIN { $beg++ } CHECK { $chk++ } INIT { $init++ } END { $end++ } UNITCHECK {$uc++}];my @warnings_todo;@warnings_todo = (todo => "Change 23768 (Remove Carp from warnings.pm) alters expected output, not" . "propagated to 5.8.x") if $] < 5.009;checkOptree ( name => 'BEGIN', bcopts => 'BEGIN', prog => $src, @warnings_todo, strip_open_hints => 1, 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 -275 Concise.pm:356) v:*,&,{,$ ->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# - <@> lineseq K ->-# 5 <;> nextstate(B::Concise -275 Concise.pm:356) :*,&,{,$ ->6# a <1> entersub[t1] KS*/TARG,2 ->b# 6 <0> pushmark s ->7# 7 <$> const[PV "strict"] sM ->8# 8 <$> const[PV "refs"] sM ->9# 9 <$> method_named[PV "unimport"] ->a# BEGIN 2:# m <1> leavesub[1 ref] K/REFC,1 ->(end)# - <@> lineseq K ->m# c <;> nextstate(B::Concise -265 Concise.pm:367) v:*,&,$ ->d# e <1> require sK/1 ->f# d <$> const[PV "strict.pm"] s/BARE ->e# f <;> nextstate(B::Concise -265 Concise.pm:367) v:*,&,$ ->g# - <@> lineseq K ->-# g <;> nextstate(B::Concise -265 Concise.pm:367) :*,&,$ ->h# l <1> entersub[t1] KS*/TARG,2 ->m# h <0> pushmark s ->i# i <$> const[PV "strict"] sM ->j# j <$> const[PV "refs"] sM ->k# k <$> method_named[PV "unimport"] ->l# BEGIN 3:# x <1> leavesub[1 ref] K/REFC,1 ->(end)# - <@> lineseq KP ->x# n <;> nextstate(B::Concise -254 Concise.pm:386) v:*,&,{,$ ->o# p <1> require sK/1 ->q# o <$> const[PV "warnings.pm"] s/BARE ->p# q <;> nextstate(B::Concise -254 Concise.pm:386) v:*,&,{,$ ->r# - <@> lineseq K ->-# r <;> nextstate(B::Concise -254 Concise.pm:386) :*,&,{,$ ->s# w <1> entersub[t1] KS*/TARG,2 ->x# s <0> pushmark s ->t# t <$> const[PV "warnings"] sM ->u# u <$> const[PV "qw"] sM ->v# v <$> method_named[PV "unimport"] ->w# BEGIN 4:# 11 <1> leavesub[1 ref] K/REFC,1 ->(end)# - <@> lineseq KP ->11# y <;> nextstate(main 2 -e:1) v:>,<,%,{ ->z# 10 <1> postinc[t3] sK/1 ->11# - <1> ex-rv2sv sKRM/1 ->10# z <#> gvsv[*beg] s ->10EOT_EOT# BEGIN 1:# b <1> leavesub[1 ref] K/REFC,1 ->(end)# - <@> lineseq KP ->b# 1 <;> nextstate(B::Concise -275 Concise.pm:356) v:*,&,{,$ ->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# - <@> lineseq K ->-# 5 <;> nextstate(B::Concise -275 Concise.pm:356) :*,&,{,$ ->6# a <1> entersub[t1] KS*/TARG,2 ->b# 6 <0> pushmark s ->7# 7 <$> const(PV "strict") sM ->8# 8 <$> const(PV "refs") sM ->9# 9 <$> method_named(PV "unimport") ->a# BEGIN 2:# m <1> leavesub[1 ref] K/REFC,1 ->(end)# - <@> lineseq K ->m# c <;> nextstate(B::Concise -265 Concise.pm:367) v:*,&,$ ->d# e <1> require sK/1 ->f# d <$> const(PV "strict.pm") s/BARE ->e# f <;> nextstate(B::Concise -265 Concise.pm:367) v:*,&,$ ->g# - <@> lineseq K ->-# g <;> nextstate(B::Concise -265 Concise.pm:367) :*,&,$ ->h# l <1> entersub[t1] KS*/TARG,2 ->m# h <0> pushmark s ->i# i <$> const(PV "strict") sM ->j# j <$> const(PV "refs") sM ->k# k <$> method_named(PV "unimport") ->l# BEGIN 3:# x <1> leavesub[1 ref] K/REFC,1 ->(end)# - <@> lineseq KP ->x# n <;> nextstate(B::Concise -254 Concise.pm:386) v:*,&,{,$ ->o# p <1> require sK/1 ->q# o <$> const(PV "warnings.pm") s/BARE ->p# q <;> nextstate(B::Concise -254 Concise.pm:386) v:*,&,{,$ ->r# - <@> lineseq K ->-# r <;> nextstate(B::Concise -254 Concise.pm:386) :*,&,{,$ ->s# w <1> entersub[t1] KS*/TARG,2 ->x# s <0> pushmark s ->t# t <$> const(PV "warnings") sM ->u# u <$> const(PV "qw") sM ->v# v <$> method_named(PV "unimport") ->w# BEGIN 4:# 11 <1> leavesub[1 ref] K/REFC,1 ->(end)# - <@> lineseq KP ->11# y <;> nextstate(main 2 -e:1) v:>,<,%,{ ->z# 10 <1> postinc[t2] sK/1 ->11# - <1> ex-rv2sv sKRM/1 ->10# z <$> gvsv(*beg) s ->10EONT_EONTcheckOptree ( name => 'END', bcopts => 'END', prog => $src, strip_open_hints => 1, 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# 3 <1> postinc[t3] sK/1 ->4# - <1> ex-rv2sv sKRM/1 ->3# 2 <#> gvsv[*end] s ->3EOT_EOT# END 1:# 4 <1> leavesub[1 ref] K/REFC,1 ->(end)# - <@> lineseq KP ->4# 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 ->3EONT_EONTcheckOptree ( name => 'CHECK', bcopts => 'CHECK', prog => $src, strip_open_hints => 1, 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# 3 <1> postinc[t3] sK/1 ->4# - <1> ex-rv2sv sKRM/1 ->3# 2 <#> gvsv[*chk] s ->3EOT_EOT# CHECK 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(*chk) s ->3EONT_EONTif ($] >= 5.009) { checkOptree ( name => 'UNITCHECK', bcopts=> 'UNITCHECK', prog => $src, strip_open_hints => 1, 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 ->3EOT_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 ->3EONT_EONT}checkOptree ( name => 'INIT', bcopts => 'INIT', #todo => 'get working', prog => $src, strip_open_hints => 1, expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');# INIT 1:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -