This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Move all the cut&paste open TODO logic into OptreeCheck.pm, where it
[perl5.git] / ext / B / t / optree_misc.t
1 #!perl
2
3 BEGIN {
4     if ($ENV{PERL_CORE}){
5         chdir('t') if -d 't';
6         @INC = ('.', '../lib', '../ext/B/t');
7     } else {
8         unshift @INC, 't';
9         push @INC, "../../t";
10     }
11     require Config;
12     if (($Config::Config{'extensions'} !~ /\bB\b/) ){
13         print "1..0 # Skip -- Perl configured without B module\n";
14         exit 0;
15     }
16 }
17 use OptreeCheck;
18 use Config;
19 plan tests => 1;
20
21 SKIP: {
22 skip "no perlio in this build", 1 unless $Config::Config{useperlio};
23
24 # The regression this is testing is that the first aelemfast, derived
25 # from a lexical array, is supposed to be a BASEOP "<0>", while the
26 # second, from a global, is an SVOP "<$>" or a PADOP "<#>" depending
27 # on threading. In buggy versions, both showed up as SVOPs/PADOPs. See
28 # B.xs:cc_opclass() for the relevant code.
29
30 checkOptree ( name      => 'OP_AELEMFAST opclass',
31               code      => sub { my @x; our @y; $x[0] + $y[0]},
32               @open_todo,
33               expect    => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
34 # a  <1> leavesub[1 ref] K/REFC,1 ->(end)
35 # -     <@> lineseq KP ->a
36 # 1        <;> nextstate(main 634 optree_misc.t:25) v ->2
37 # 2        <0> padav[@x:634,636] vM/LVINTRO ->3
38 # 3        <;> nextstate(main 635 optree_misc.t:25) v ->4
39 # 5        <1> rv2av[t4] vK/OURINTR,1 ->6
40 # 4           <#> gv[*y] s ->5
41 # 6        <;> nextstate(main 636 optree_misc.t:25) v:{ ->7
42 # 9        <2> add[t6] sK/2 ->a
43 # -           <1> ex-aelem sK/2 ->8
44 # 7              <0> aelemfast[@x:634,636] sR* ->8
45 # -              <0> ex-const s ->-
46 # -           <1> ex-aelem sK/2 ->9
47 # -              <1> ex-rv2av sKR/1 ->-
48 # 8                 <#> aelemfast[*y] s ->9
49 # -              <0> ex-const s ->-
50 EOT_EOT
51 # a  <1> leavesub[1 ref] K/REFC,1 ->(end)
52 # -     <@> lineseq KP ->a
53 # 1        <;> nextstate(main 634 optree_misc.t:27) v ->2
54 # 2        <0> padav[@x:634,636] vM/LVINTRO ->3
55 # 3        <;> nextstate(main 635 optree_misc.t:27) v ->4
56 # 5        <1> rv2av[t3] vK/OURINTR,1 ->6
57 # 4           <$> gv(*y) s ->5
58 # 6        <;> nextstate(main 636 optree_misc.t:27) v:{ ->7
59 # 9        <2> add[t4] sK/2 ->a
60 # -           <1> ex-aelem sK/2 ->8
61 # 7              <0> aelemfast[@x:634,636] sR* ->8
62 # -              <0> ex-const s ->-
63 # -           <1> ex-aelem sK/2 ->9
64 # -              <1> ex-rv2av sKR/1 ->-
65 # 8                 <$> aelemfast(*y) s ->9
66 # -              <0> ex-const s ->-
67 EONT_EONT
68
69
70 } #skip
71
72 __END__
73