This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Correct change 23437 - as Config isn't imported, need to use a fully
[perl5.git] / ext / B / t / optree_specials.t
1 #!./perl
2
3 BEGIN {
4     chdir 't';
5     @INC = ('../lib', '../ext/B/t');
6     require Config;
7     if (($Config::Config{'extensions'} !~ /\bB\b/) ){
8         print "1..0 # Skip -- Perl configured without B module\n";
9         exit 0;
10     }
11     if ($Config::Config{'extensions'} !~ /\bData\/Dumper\b/) {
12         print
13             "1..0 # Skip: Data::Dumper was not built, needed by OptreeCheck\n";
14         exit 0;
15     }
16     require './test.pl';
17 }
18
19 # import checkOptree(), and %gOpts (containing test state)
20 use OptreeCheck;        # ALSO DOES @ARGV HANDLING !!!!!!
21 use Config;
22
23 plan tests => 6;
24
25 require_ok("B::Concise");
26
27 my $out = runperl(
28     switches => ["-MO=Concise,BEGIN,CHECK,INIT,END,-exec"],
29     prog => q{$a=$b && print q/foo/},
30     stderr => 1 );
31
32 #print "out:$out\n";
33
34 my $src = q[our ($beg, $chk, $init, $end) = qq{'foo'}; BEGIN { $beg++ } CHECK { $chk++ } INIT { $init++ } END { $end++ }];
35
36
37
38 checkOptree ( name      => 'BEGIN',
39               bcopts    => 'BEGIN',
40               prog      => $src,
41               expect    => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
42 # BEGIN 1:
43 # b  <1> leavesub[1 ref] K/REFC,1 ->(end)
44 # -     <@> lineseq KP ->b
45 # 1        <;> nextstate(B::Concise -242 Concise.pm:304) v/2 ->2
46 # 3        <1> require sK/1 ->4
47 # 2           <$> const[PV "strict.pm"] s/BARE ->3
48 # 4        <;> nextstate(B::Concise -242 Concise.pm:304) v/2 ->5
49 # -        <@> lineseq K ->-
50 # 5           <;> nextstate(B::Concise -242 Concise.pm:304) /2 ->6
51 # a           <1> entersub[t1] KS*/TARG,2 ->b
52 # 6              <0> pushmark s ->7
53 # 7              <$> const[PV "strict"] sM ->8
54 # 8              <$> const[PV "refs"] sM ->9
55 # 9              <$> method_named[PVIV 1520340202] ->a
56 # BEGIN 2:
57 # m  <1> leavesub[1 ref] K/REFC,1 ->(end)
58 # -     <@> lineseq KP ->m
59 # c        <;> nextstate(B::Concise -227 Concise.pm:327) v/2 ->d
60 # e        <1> require sK/1 ->f
61 # d           <$> const[PV "warnings.pm"] s/BARE ->e
62 # f        <;> nextstate(B::Concise -227 Concise.pm:327) v/2 ->g
63 # -        <@> lineseq K ->-
64 # g           <;> nextstate(B::Concise -227 Concise.pm:327) /2 ->h
65 # l           <1> entersub[t1] KS*/TARG,2 ->m
66 # h              <0> pushmark s ->i
67 # i              <$> const[PV "warnings"] sM ->j
68 # j              <$> const[PV "qw"] sM ->k
69 # k              <$> method_named[PVIV 1520340202] ->l
70 # BEGIN 3:
71 # q  <1> leavesub[1 ref] K/REFC,1 ->(end)
72 # -     <@> lineseq KP ->q
73 # n        <;> nextstate(main 2 -e:3) v ->o
74 # p        <1> postinc[t3] sK/1 ->q
75 # -           <1> ex-rv2sv sKRM/1 ->p
76 # o              <#> gvsv[*beg] s ->p
77 EOT_EOT
78 # BEGIN 1:
79 # b  <1> leavesub[1 ref] K/REFC,1 ->(end)
80 # -     <@> lineseq KP ->b
81 # 1        <;> nextstate(B::Concise -242 Concise.pm:304) v/2 ->2
82 # 3        <1> require sK/1 ->4
83 # 2           <$> const(PV "strict.pm") s/BARE ->3
84 # 4        <;> nextstate(B::Concise -242 Concise.pm:304) v/2 ->5
85 # -        <@> lineseq K ->-
86 # 5           <;> nextstate(B::Concise -242 Concise.pm:304) /2 ->6
87 # a           <1> entersub[t1] KS*/TARG,2 ->b
88 # 6              <0> pushmark s ->7
89 # 7              <$> const(PV "strict") sM ->8
90 # 8              <$> const(PV "refs") sM ->9
91 # 9              <$> method_named(PVIV 1520340202) ->a
92 # BEGIN 2:
93 # m  <1> leavesub[1 ref] K/REFC,1 ->(end)
94 # -     <@> lineseq KP ->m
95 # c        <;> nextstate(B::Concise -227 Concise.pm:327) v/2 ->d
96 # e        <1> require sK/1 ->f
97 # d           <$> const(PV "warnings.pm") s/BARE ->e
98 # f        <;> nextstate(B::Concise -227 Concise.pm:327) v/2 ->g
99 # -        <@> lineseq K ->-
100 # g           <;> nextstate(B::Concise -227 Concise.pm:327) /2 ->h
101 # l           <1> entersub[t1] KS*/TARG,2 ->m
102 # h              <0> pushmark s ->i
103 # i              <$> const(PV "warnings") sM ->j
104 # j              <$> const(PV "qw") sM ->k
105 # k              <$> method_named(PVIV 1520340202) ->l
106 # BEGIN 3:
107 # q  <1> leavesub[1 ref] K/REFC,1 ->(end)
108 # -     <@> lineseq KP ->q
109 # n        <;> nextstate(main 2 -e:3) v ->o
110 # p        <1> postinc[t2] sK/1 ->q
111 # -           <1> ex-rv2sv sKRM/1 ->p
112 # o              <$> gvsv(*beg) s ->p
113 EONT_EONT
114
115
116 checkOptree ( name      => 'END',
117               bcopts    => 'END',
118               prog      => $src,
119               expect    => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
120 # END 1:
121 # 4  <1> leavesub[1 ref] K/REFC,1 ->(end)
122 # -     <@> lineseq KP ->4
123 # 1        <;> nextstate(main 5 -e:6) v ->2
124 # 3        <1> postinc[t3] sK/1 ->4
125 # -           <1> ex-rv2sv sKRM/1 ->3
126 # 2              <#> gvsv[*end] s ->3
127 EOT_EOT
128 # END 1:
129 # 4  <1> leavesub[1 ref] K/REFC,1 ->(end)
130 # -     <@> lineseq KP ->4
131 # 1        <;> nextstate(main 5 -e:6) v ->2
132 # 3        <1> postinc[t2] sK/1 ->4
133 # -           <1> ex-rv2sv sKRM/1 ->3
134 # 2              <$> gvsv(*end) s ->3
135 EONT_EONT
136
137
138 checkOptree ( name      => 'CHECK',
139               bcopts    => 'CHECK',
140               prog      => $src,
141               expect    => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
142 # CHECK 1:
143 # 4  <1> leavesub[1 ref] K/REFC,1 ->(end)
144 # -     <@> lineseq KP ->4
145 # 1        <;> nextstate(main 3 -e:4) v ->2
146 # 3        <1> postinc[t3] sK/1 ->4
147 # -           <1> ex-rv2sv sKRM/1 ->3
148 # 2              <#> gvsv[*chk] s ->3
149 EOT_EOT
150 # CHECK 1:
151 # 4  <1> leavesub[1 ref] K/REFC,1 ->(end)
152 # -     <@> lineseq KP ->4
153 # 1        <;> nextstate(main 3 -e:4) v ->2
154 # 3        <1> postinc[t2] sK/1 ->4
155 # -           <1> ex-rv2sv sKRM/1 ->3
156 # 2              <$> gvsv(*chk) s ->3
157 EONT_EONT
158
159
160 checkOptree ( name      => 'INIT',
161               bcopts    => 'INIT',
162               #todo     => 'get working',
163               prog      => $src,
164               expect    => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
165 # INIT 1:
166 # 4  <1> leavesub[1 ref] K/REFC,1 ->(end)
167 # -     <@> lineseq KP ->4
168 # 1        <;> nextstate(main 4 -e:5) v ->2
169 # 3        <1> postinc[t3] sK/1 ->4
170 # -           <1> ex-rv2sv sKRM/1 ->3
171 # 2              <#> gvsv[*init] s ->3
172 EOT_EOT
173 # INIT 1:
174 # 4  <1> leavesub[1 ref] K/REFC,1 ->(end)
175 # -     <@> lineseq KP ->4
176 # 1        <;> nextstate(main 4 -e:5) v ->2
177 # 3        <1> postinc[t2] sK/1 ->4
178 # -           <1> ex-rv2sv sKRM/1 ->3
179 # 2              <$> gvsv(*init) s ->3
180 EONT_EONT
181
182
183 checkOptree ( name      => 'all of BEGIN END INIT CHECK -exec',
184               bcopts    => [qw/ BEGIN END INIT CHECK -exec /],
185               #todo     => 'get working',
186               prog      => $src,
187               expect    => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
188 # BEGIN 1:
189 # 1  <;> nextstate(B::Concise -242 Concise.pm:304) v/2
190 # 2  <$> const[PV "strict.pm"] s/BARE
191 # 3  <1> require sK/1
192 # 4  <;> nextstate(B::Concise -242 Concise.pm:304) v/2
193 # 5  <;> nextstate(B::Concise -242 Concise.pm:304) /2
194 # 6  <0> pushmark s
195 # 7  <$> const[PV "strict"] sM
196 # 8  <$> const[PV "refs"] sM
197 # 9  <$> method_named[PVIV 1520340202] 
198 # a  <1> entersub[t1] KS*/TARG,2
199 # b  <1> leavesub[1 ref] K/REFC,1
200 # BEGIN 2:
201 # c  <;> nextstate(B::Concise -227 Concise.pm:327) v/2
202 # d  <$> const[PV "warnings.pm"] s/BARE
203 # e  <1> require sK/1
204 # f  <;> nextstate(B::Concise -227 Concise.pm:327) v/2
205 # g  <;> nextstate(B::Concise -227 Concise.pm:327) /2
206 # h  <0> pushmark s
207 # i  <$> const[PV "warnings"] sM
208 # j  <$> const[PV "qw"] sM
209 # k  <$> method_named[PVIV 1520340202] 
210 # l  <1> entersub[t1] KS*/TARG,2
211 # m  <1> leavesub[1 ref] K/REFC,1
212 # BEGIN 3:
213 # n  <;> nextstate(main 2 -e:3) v
214 # o  <#> gvsv[*beg] s
215 # p  <1> postinc[t3] sK/1
216 # q  <1> leavesub[1 ref] K/REFC,1
217 # END 1:
218 # r  <;> nextstate(main 5 -e:6) v
219 # s  <#> gvsv[*end] s
220 # t  <1> postinc[t3] sK/1
221 # u  <1> leavesub[1 ref] K/REFC,1
222 # INIT 1:
223 # v  <;> nextstate(main 4 -e:5) v
224 # w  <#> gvsv[*init] s
225 # x  <1> postinc[t3] sK/1
226 # y  <1> leavesub[1 ref] K/REFC,1
227 # CHECK 1:
228 # z  <;> nextstate(main 3 -e:4) v
229 # 10 <#> gvsv[*chk] s
230 # 11 <1> postinc[t3] sK/1
231 # 12 <1> leavesub[1 ref] K/REFC,1
232 EOT_EOT
233 # BEGIN 1:
234 # 1  <;> nextstate(B::Concise -242 Concise.pm:304) v/2
235 # 2  <$> const(PV "strict.pm") s/BARE
236 # 3  <1> require sK/1
237 # 4  <;> nextstate(B::Concise -242 Concise.pm:304) v/2
238 # 5  <;> nextstate(B::Concise -242 Concise.pm:304) /2
239 # 6  <0> pushmark s
240 # 7  <$> const(PV "strict") sM
241 # 8  <$> const(PV "refs") sM
242 # 9  <$> method_named(PVIV 1520340202) 
243 # a  <1> entersub[t1] KS*/TARG,2
244 # b  <1> leavesub[1 ref] K/REFC,1
245 # BEGIN 2:
246 # c  <;> nextstate(B::Concise -227 Concise.pm:327) v/2
247 # d  <$> const(PV "warnings.pm") s/BARE
248 # e  <1> require sK/1
249 # f  <;> nextstate(B::Concise -227 Concise.pm:327) v/2
250 # g  <;> nextstate(B::Concise -227 Concise.pm:327) /2
251 # h  <0> pushmark s
252 # i  <$> const(PV "warnings") sM
253 # j  <$> const(PV "qw") sM
254 # k  <$> method_named(PVIV 1520340202) 
255 # l  <1> entersub[t1] KS*/TARG,2
256 # m  <1> leavesub[1 ref] K/REFC,1
257 # BEGIN 3:
258 # n  <;> nextstate(main 2 -e:3) v
259 # o  <$> gvsv(*beg) s
260 # p  <1> postinc[t2] sK/1
261 # q  <1> leavesub[1 ref] K/REFC,1
262 # END 1:
263 # r  <;> nextstate(main 5 -e:6) v
264 # s  <$> gvsv(*end) s
265 # t  <1> postinc[t2] sK/1
266 # u  <1> leavesub[1 ref] K/REFC,1
267 # INIT 1:
268 # v  <;> nextstate(main 4 -e:5) v
269 # w  <$> gvsv(*init) s
270 # x  <1> postinc[t2] sK/1
271 # y  <1> leavesub[1 ref] K/REFC,1
272 # CHECK 1:
273 # z  <;> nextstate(main 3 -e:4) v
274 # 10 <$> gvsv(*chk) s
275 # 11 <1> postinc[t2] sK/1
276 # 12 <1> leavesub[1 ref] K/REFC,1
277 EONT_EONT