X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=ext%2FB%2Ft%2Ff_map.t;h=420e6490691a3e9da8ef4b1ca3e32e40fd481590;hb=ce5d06123ae0253bf2e33033ffbfba16ce3bb79e;hp=478cee8e4697fc61ff9461677b90fb746118cee2;hpb=9cd8f8571248133e4de95e0188070c0cef2693b6;p=p5sagit%2Fp5-mst-13.2.git diff --git a/ext/B/t/f_map.t b/ext/B/t/f_map.t index 478cee8..420e649 100644 --- a/ext/B/t/f_map.t +++ b/ext/B/t/f_map.t @@ -1,19 +1,40 @@ #!perl BEGIN { - chdir q(t); - @INC = qw(../lib ../ext/B/t); + 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 q(./test.pl); + if (!$Config::Config{useperlio}) { + print "1..0 # Skip -- need perlio to walk the optree\n"; + exit 0; + } + # require q(test.pl); # now done by OptreeCheck } use OptreeCheck; plan tests => 9; +=head1 f_map.t + +Code test snippets here are adapted from `perldoc -f map` + +Due to a bleadperl optimization (Dave Mitchell, circa may 04), the +(map|grep)(start|while) opcodes have different flags in 5.9, their +private flags /1, /2 are gone in blead (for the cases covered) + +When the optree stuff was integrated into 5.8.6, these tests failed, +and were todo'd. Theyre now done, by version-specific tweaking in +mkCheckRex(), therefore the skip is removed too. + =for gentest # chunk: #!perl @@ -76,7 +97,7 @@ checkOptree(note => q{}, bcopts => q{-exec}, code => q{%hash = map { getkey($_) => $_ } @array; }, expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); -# 1 <;> nextstate(main 476 (eval 10):1) v +# 1 <;> nextstate(main 476 (eval 10):1) v:{ # 2 <0> pushmark s # 3 <0> pushmark s # 4 <#> gv[*array] s @@ -84,7 +105,7 @@ checkOptree(note => q{}, # 6 <@> mapstart lK* # 7 <|> mapwhile(other->8)[t9] lK # 8 <0> enter l -# 9 <;> nextstate(main 475 (eval 10):1) v +# 9 <;> nextstate(main 475 (eval 10):1) v:{ # a <0> pushmark s # b <0> pushmark s # c <#> gvsv[*_] s @@ -100,7 +121,7 @@ checkOptree(note => q{}, # l <2> aassign[t10] KS/COMMON # m <1> leavesub[1 ref] K/REFC,1 EOT_EOT -# 1 <;> nextstate(main 560 (eval 15):1) v +# 1 <;> nextstate(main 560 (eval 15):1) v:{ # 2 <0> pushmark s # 3 <0> pushmark s # 4 <$> gv(*array) s @@ -108,7 +129,7 @@ EOT_EOT # 6 <@> mapstart lK* # 7 <|> mapwhile(other->8)[t4] lK # 8 <0> enter l -# 9 <;> nextstate(main 559 (eval 15):1) v +# 9 <;> nextstate(main 559 (eval 15):1) v:{ # a <0> pushmark s # b <0> pushmark s # c <$> gvsv(*_) s @@ -141,7 +162,7 @@ checkOptree(note => q{}, bcopts => q{-exec}, code => q{{ %hash = (); foreach $_ (@array) { $hash{getkey($_)} = $_; } } }, expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); -# 1 <;> nextstate(main 478 (eval 10):1) v +# 1 <;> nextstate(main 478 (eval 10):1) v:{ # 2 <{> enterloop(next->u last->u redo->3) # 3 <;> nextstate(main 475 (eval 10):1) v # 4 <0> pushmark s @@ -149,16 +170,16 @@ checkOptree(note => q{}, # 6 <#> gv[*hash] s # 7 <1> rv2hv[t2] lKRM*/1 # 8 <2> aassign[t3] vKS -# 9 <;> nextstate(main 476 (eval 10):1) v +# 9 <;> nextstate(main 476 (eval 10):1) v:{ # a <0> pushmark sM # b <#> gv[*array] s # c <1> rv2av[t6] sKRM/1 # d <#> gv[*_] s # e <1> rv2gv sKRM/1 -# f <{> enteriter(next->q last->t redo->g) lKS +# f <{> enteriter(next->q last->t redo->g) lKS/8 # r <0> iter s # s <|> and(other->g) K/1 -# g <;> nextstate(main 475 (eval 10):1) v +# g <;> nextstate(main 475 (eval 10):1) v:{ # h <#> gvsv[*_] s # i <#> gv[*hash] s # j <1> rv2hv sKR/1 @@ -174,7 +195,7 @@ checkOptree(note => q{}, # u <2> leaveloop K/2 # v <1> leavesub[1 ref] K/REFC,1 EOT_EOT -# 1 <;> nextstate(main 562 (eval 15):1) v +# 1 <;> nextstate(main 562 (eval 15):1) v:{ # 2 <{> enterloop(next->u last->u redo->3) # 3 <;> nextstate(main 559 (eval 15):1) v # 4 <0> pushmark s @@ -182,16 +203,16 @@ EOT_EOT # 6 <$> gv(*hash) s # 7 <1> rv2hv[t1] lKRM*/1 # 8 <2> aassign[t2] vKS -# 9 <;> nextstate(main 560 (eval 15):1) v +# 9 <;> nextstate(main 560 (eval 15):1) v:{ # a <0> pushmark sM # b <$> gv(*array) s # c <1> rv2av[t3] sKRM/1 # d <$> gv(*_) s # e <1> rv2gv sKRM/1 -# f <{> enteriter(next->q last->t redo->g) lKS +# f <{> enteriter(next->q last->t redo->g) lKS/8 # r <0> iter s # s <|> and(other->g) K/1 -# g <;> nextstate(main 559 (eval 15):1) v +# g <;> nextstate(main 559 (eval 15):1) v:{ # h <$> gvsv(*_) s # i <$> gv(*hash) s # j <1> rv2hv sKR/1 @@ -491,14 +512,13 @@ checkOptree(note => q{}, # 9 <#> gvsv[*_] s # a <1> lc[t4] sK/1 # b <$> const[IV 1] s -# c <@> anonhash sKRM/1 -# d <1> srefgen sK/1 +# c <@> anonhash sK*/1 # goto 7 -# e <0> pushmark s -# f <#> gv[*hashes] s -# g <1> rv2av[t2] lKRM*/1 -# h <2> aassign[t8] KS/COMMON -# i <1> leavesub[1 ref] K/REFC,1 +# d <0> pushmark s +# e <#> gv[*hashes] s +# f <1> rv2av[t2] lKRM*/1 +# g <2> aassign[t8] KS/COMMON +# h <1> leavesub[1 ref] K/REFC,1 EOT_EOT # 1 <;> nextstate(main 601 (eval 32):1) v # 2 <0> pushmark s @@ -511,12 +531,11 @@ EOT_EOT # 9 <$> gvsv(*_) s # a <1> lc[t2] sK/1 # b <$> const(IV 1) s -# c <@> anonhash sKRM/1 -# d <1> srefgen sK/1 +# c <@> anonhash sK*/1 # goto 7 -# e <0> pushmark s -# f <$> gv(*hashes) s -# g <1> rv2av[t1] lKRM*/1 -# h <2> aassign[t5] KS/COMMON -# i <1> leavesub[1 ref] K/REFC,1 +# d <0> pushmark s +# e <$> gv(*hashes) s +# f <1> rv2av[t1] lKRM*/1 +# g <2> aassign[t5] KS/COMMON +# h <1> leavesub[1 ref] K/REFC,1 EONT_EONT