6 @INC = ('.', '../lib', '../ext/B/t');
12 if (($Config::Config{'extensions'} !~ /\bB\b/) ){
13 print "1..0 # Skip -- Perl configured without B module\n";
22 skip "no perlio in this build", 1 unless $Config::Config{useperlio};
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.
30 checkOptree ( name => 'OP_AELEMFAST opclass',
31 code => sub { my @x; our @y; $x[0] + $y[0]},
32 strip_open_hints => 1,
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
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 ->-
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
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 ->-
73 # 8 <@> leave[1 ref] vKP/REFC ->(end)
75 # 2 <;> nextstate(main 1 -e:1) v:>,<,%,{ ->3
76 # 7 <2> sassign vKS/2 ->8
77 # 5 <@> index[t2] sK/2 ->6
78 # - <0> ex-pushmark s ->3
79 # 3 <$> const[PV "foo"] s ->4
80 # 4 <$> const[GV "foo"] s ->5
81 # - <1> ex-rv2sv sKRM*/1 ->7
82 # 6 <#> gvsv[*_] s ->7
84 my $nt = <<'EONT_EONT';
85 # 8 <@> leave[1 ref] vKP/REFC ->(end)
87 # 2 <;> nextstate(main 1 -e:1) v:>,<,%,{ ->3
88 # 7 <2> sassign vKS/2 ->8
89 # 5 <@> index[t1] sK/2 ->6
90 # - <0> ex-pushmark s ->3
91 # 3 <$> const(PV "foo") s ->4
92 # 4 <$> const(GV "foo") s ->5
93 # - <1> ex-rv2sv sKRM*/1 ->7
94 # 6 <$> gvsv(*_) s ->7
102 checkOptree ( name => 'index and PVBM',
103 prog => '$_ = index q(foo), q(foo)',
104 strip_open_hints => 1,
105 expect => $t, expect_nt => $nt);