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