In perl.git, the branch blead has been updated <https://perl5.git.perl.org/perl.git/commitdiff/645a04a443d51be04bd2b42bdeb6f4d609eba522?hp=6f1b38bf953ca99a594fc10a4c30a302f2017c93>
- Log ----------------------------------------------------------------- commit 645a04a443d51be04bd2b42bdeb6f4d609eba522 Merge: 6f1b38bf95 06c80a59fc Author: Todd Rinaldo <[email protected]> Date: Wed Nov 8 16:39:12 2017 -0600 Merge branch 'BO' into blead Make it simpler to divine if modules are there because of loading B/O or because the actual program used them. NPD commit 06c80a59fc8f550b6c69d04e2fc00578b4e80d59 Author: Todd Rinaldo <[email protected]> Date: Wed Sep 13 14:35:39 2017 -0500 ext/B/t/strict.t: Assure B.pm and O.pm pass strict and warnings checks. We need to test these in unit tests since they do not load these modules to prevent pollution of the stash in compilers. commit 288fb12fea899ab55b00d9f867f6343e251f8da8 Author: Todd Rinaldo <[email protected]> Date: Wed Sep 13 14:35:35 2017 -0500 Fix warnings (used once) for O.pm commit 602bd5cc21cee62bf3bb18f2a159b57e13476009 Author: Todd Rinaldo <[email protected]> Date: Wed Sep 13 14:35:30 2017 -0500 Fix warnings (used once) for B.pm commit 95d444af8eeefcf058bb763df9a51ae1ba3d8942 Author: Todd Rinaldo <[email protected]> Date: Wed Sep 13 14:35:21 2017 -0500 Remove unnecessary module loads from B and O This commit removes multiple unnecessary modules so that perl -MO= can hand back to compile as cleanly as possible. This change caused significant jitter in tests for B::Concise. While updating the test to the new reality, OptreeCheck.pm was corrected to stop stripping regexes off $got when it started failing so it would be easier to see where the failure happened. ----------------------------------------------------------------------- Summary of changes: MANIFEST | 1 + ext/B/B.pm | 21 +- ext/B/O.pm | 20 +- ext/B/t/OptreeCheck.pm | 3 +- ext/B/t/optree_specials.t | 694 +++++++++++++++++++++++++++++----------------- ext/B/t/strict.t | 30 ++ 6 files changed, 501 insertions(+), 268 deletions(-) create mode 100644 ext/B/t/strict.t diff --git a/MANIFEST b/MANIFEST index cfa1ecdf93..465df5d250 100644 --- a/MANIFEST +++ b/MANIFEST @@ -3962,6 +3962,7 @@ ext/B/t/optree_varinit.t my,our,local var init optimization ext/B/t/OptreeCheck.pm optree comparison tool ext/B/t/pragma.t See if user pragmas work. ext/B/t/showlex.t See if B::ShowLex works +ext/B/t/strict.t See if B works with strict and warnings. ext/B/t/sv_stash.t See if SvSTASH() works ext/B/t/terse.t See if B::Terse works ext/B/t/walkoptree.t See if B::walkoptree (and friends) work diff --git a/ext/B/B.pm b/ext/B/B.pm index 389f8cdc42..8ceb9fff15 100644 --- a/ext/B/B.pm +++ b/ext/B/B.pm @@ -6,11 +6,16 @@ # License or the Artistic License, as specified in the README file. # package B; -use strict; -require Exporter; @B::ISA = qw(Exporter); +# If B is loaded without imports, we do not want to unnecessarily pollute the stash with Exporter. +sub import { + return unless scalar @_ > 1; # Called as a method call. + require Exporter; + B->export_to_level(1, @_); +} + # walkoptree_slow comes from B.pm (you are there), # walkoptree comes from B.xs @@ -74,12 +79,12 @@ push @B::EXPORT_OK, (qw(minus_c ppname save_BEGINs @B::SPECIAL::ISA = 'B::OBJECT'; -@B::optype = qw(OP UNOP BINOP LOGOP LISTOP PMOP SVOP PADOP PVOP LOOP COP +our @optype = qw(OP UNOP BINOP LOGOP LISTOP PMOP SVOP PADOP PVOP LOOP COP METHOP UNOP_AUX); # bytecode.pl contained the following comment: # Nullsv *must* come first in the following so that the condition # ($$sv == 0) can continue to be used to test (sv == Nullsv). -@B::specialsv_name = qw(Nullsv &PL_sv_undef &PL_sv_yes &PL_sv_no +our @specialsv_name = qw(Nullsv &PL_sv_undef &PL_sv_yes &PL_sv_no (SV*)pWARN_ALL (SV*)pWARN_NONE (SV*)pWARN_STD &PL_sv_zero); @@ -115,15 +120,17 @@ sub B::IV::int_value { } sub B::NULL::as_string() {""} -*B::IV::as_string = \*B::IV::int_value; -*B::PV::as_string = \*B::PV::PV; +*B::IV::as_string = *B::IV::as_string = \*B::IV::int_value; +*B::PV::as_string = *B::PV::as_string = \*B::PV::PV; # The input typemap checking makes no distinction between different SV types, # so the XS body will generate the same C code, despite the different XS # "types". So there is no change in behaviour from doing "newXS" like this, # compared with the old approach of having a (near) duplicate XS body. # We should fix the typemap checking. -*B::IV::RV = \*B::PV::RV if $] > 5.012; + +# Since perl 5.12.0 +*B::IV::RV = *B::IV::RV = \*B::PV::RV; my $debug; my $op_count = 0; diff --git a/ext/B/O.pm b/ext/B/O.pm index 94ee754293..09a905eaee 100644 --- a/ext/B/O.pm +++ b/ext/B/O.pm @@ -2,15 +2,17 @@ package O; our $VERSION = '1.02'; -use B qw(minus_c save_BEGINs); -use Carp; +use B (); + +our $BEGIN_output; +our $saveout_fh; sub import { my ($class, @options) = @_; my ($quiet, $veryquiet) = (0, 0); if ($options[0] eq '-q' || $options[0] eq '-qq') { $quiet = 1; - open (SAVEOUT, ">&STDOUT"); + open ($saveout_fh, ">&", STDOUT); close STDOUT; open (STDOUT, ">", \$O::BEGIN_output); if ($options[0] eq '-qq') { @@ -21,15 +23,15 @@ sub import { my $backend = shift (@options); eval q[ BEGIN { - minus_c; - save_BEGINs; + B::minus_c; + B::save_BEGINs; } CHECK { if ($quiet) { close STDOUT; - open (STDOUT, ">&SAVEOUT"); - close SAVEOUT; + open (STDOUT, ">&", $saveout_fh); + close $saveout_fh; } # Note: if you change the code after this 'use', please @@ -51,7 +53,9 @@ sub import { } ]; if ($@) { - croak "Loading compiler backend 'B::$backend' failed: $@"; + my $msg = "$@"; + require Carp; + Carp::croak("Loading compiler backend 'B::$backend' failed: $msg"); } } diff --git a/ext/B/t/OptreeCheck.pm b/ext/B/t/OptreeCheck.pm index e7af99ece1..34d01e1532 100644 --- a/ext/B/t/OptreeCheck.pm +++ b/ext/B/t/OptreeCheck.pm @@ -781,8 +781,9 @@ sub reduceDiffs { my $exp = shift @want; my $line = shift @got; # remove matches, and report - unless ($got =~ s/($rex\n)//msg) { + unless ($got =~ s/^($rex\n)//ms) { _diag("got:\t\t'$line'\nwant:\t $rex\n"); + last; } } _diag("remainder:\n$got"); diff --git a/ext/B/t/optree_specials.t b/ext/B/t/optree_specials.t index 83ea44e52d..3f575d51bb 100644 --- a/ext/B/t/optree_specials.t +++ b/ext/B/t/optree_specials.t @@ -39,108 +39,183 @@ checkOptree ( name => 'BEGIN', prog => $src, strip_open_hints => 1, expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); -# BEGIN 1: -# a <1> leavesub[1 ref] K/REFC,1 ->(end) -# - <@> lineseq KP ->a -# 1 <;> nextstate(B::Concise -275 Concise.pm:356) v:*,&,{,x*,x&,x$,$ ->2 -# 3 <1> require sK/1 ->4 -# 2 <$> const[PV "strict.pm"] s/BARE ->3 -# - <;> ex-nextstate(B::Concise -837 Concise.pm:366) v:*,&,{,x*,x&,x$,$ ->4 -# - <@> lineseq K ->- -# 4 <;> nextstate(B::Concise -275 Concise.pm:356) :*,&,{,x*,x&,x$,$ ->5 -# 9 <1> entersub[t1] KRS*/TARG,STRICT ->a -# 5 <0> pushmark s ->6 -# 6 <$> const[PV "strict"] sM ->7 -# 7 <$> const[PV "refs"] sM ->8 -# 8 <.> method_named[PV "unimport"] ->9 +# - <@> lineseq KP ->7 +# 1 <;> nextstate(B::Concise -1151 Concise.pm:116) v:*,&,{,x*,x&,x$,$ ->2 +# 6 <2> sassign sKS/2 ->7 +# 4 <1> srefgen sK/1 ->5 +# - <1> ex-list lKRM ->4 +# 3 <1> rv2gv sKRM/STRICT,1 ->4 +# 2 <#> gv[*STDOUT] s ->3 +# - <1> ex-rv2sv sKRM*/STRICT,1 ->6 +# 5 <#> gvsv[*B::Concise::walkHandle] s ->6 # BEGIN 2: -# k <1> leavesub[1 ref] K/REFC,1 ->(end) -# - <@> lineseq K ->k -# b <;> nextstate(B::Concise -265 Concise.pm:367) v:*,&,x*,x&,x$,$ ->c -# d <1> require sK/1 ->e -# c <$> const[PV "strict.pm"] s/BARE ->d -# - <;> ex-nextstate(B::Concise -812 Concise.pm:386) v:*,&,x*,x&,x$,$ ->e +# h <1> leavesub[1 ref] K/REFC,1 ->(end) +# - <@> lineseq K ->h +# 8 <;> nextstate(B::Concise -1113 Concise.pm:181) v:*,&,x*,x&,x$,$ ->9 +# a <1> require sK/1 ->b +# 9 <$> const[PV "strict.pm"] s/BARE ->a +# - <;> ex-nextstate(B::Concise -1113 Concise.pm:181) v:*,&,x*,x&,x$,$ ->b # - <@> lineseq K ->- -# e <;> nextstate(B::Concise -265 Concise.pm:367) :*,&,x*,x&,x$,$ ->f -# j <1> entersub[t1] KRS*/TARG,STRICT ->k -# f <0> pushmark s ->g -# g <$> const[PV "strict"] sM ->h -# h <$> const[PV "refs"] sM ->i -# i <.> method_named[PV "unimport"] ->j +# b <;> nextstate(B::Concise -1113 Concise.pm:181) :*,&,x*,x&,x$,$ ->c +# g <1> entersub[t1] KRS*/TARG,STRICT ->h +# c <0> pushmark s ->d +# d <$> const[PV "strict"] sM ->e +# e <$> const[PV "refs"] sM ->f +# f <.> method_named[PV "unimport"] ->g # BEGIN 3: -# u <1> leavesub[1 ref] K/REFC,1 ->(end) -# - <@> lineseq KP ->u -# l <;> nextstate(B::Concise -254 Concise.pm:386) v:*,&,{,x*,x&,x$,$ ->m -# n <1> require sK/1 ->o -# m <$> const[PV "warnings.pm"] s/BARE ->n -# - <;> ex-nextstate(B::Concise -798 Concise.pm:406) v:*,&,{,x*,x&,x$,$ ->o +# r <1> leavesub[1 ref] K/REFC,1 ->(end) +# - <@> lineseq K ->r +# i <;> nextstate(B::Concise -1010 Concise.pm:303) v:*,&,x*,x&,x$,$ ->j +# k <1> require sK/1 ->l +# j <$> const[PV "strict.pm"] s/BARE ->k +# - <;> ex-nextstate(B::Concise -1010 Concise.pm:303) v:*,&,x*,x&,x$,$ ->l # - <@> lineseq K ->- -# o <;> nextstate(B::Concise -254 Concise.pm:386) :*,&,{,x*,x&,x$,$ ->p -# t <1> entersub[t1] KRS*/TARG,STRICT ->u -# p <0> pushmark s ->q -# q <$> const[PV "warnings"] sM ->r -# r <$> const[PV "qw"] sM ->s -# s <.> method_named[PV "unimport"] ->t +# l <;> nextstate(B::Concise -1010 Concise.pm:303) :*,&,x*,x&,x$,$ ->m +# q <1> entersub[t1] KRS*/TARG,STRICT ->r +# m <0> pushmark s ->n +# n <$> const[PV "strict"] sM ->o +# o <$> const[PV "refs"] sM ->p +# p <.> method_named[PV "unimport"] ->q # BEGIN 4: -# y <1> leavesub[1 ref] K/REFC,1 ->(end) -# - <@> lineseq KP ->y -# v <;> nextstate(main 2 -e:1) v:>,<,%,{ ->w -# x <1> postinc[t3] sK/1 ->y -# - <1> ex-rv2sv sKRM/1 ->x -# w <#> gvsv[*beg] s ->x +# 11 <1> leavesub[1 ref] K/REFC,1 ->(end) +# - <@> lineseq KP ->11 +# s <;> nextstate(B::Concise -963 Concise.pm:368) v:*,&,{,x*,x&,x$,$ ->t +# u <1> require sK/1 ->v +# t <$> const[PV "strict.pm"] s/BARE ->u +# - <;> ex-nextstate(B::Concise -963 Concise.pm:368) v:*,&,{,x*,x&,x$,$ ->v +# - <@> lineseq K ->- +# v <;> nextstate(B::Concise -963 Concise.pm:368) :*,&,{,x*,x&,x$,$ ->w +# 10 <1> entersub[t1] KRS*/TARG,STRICT ->11 +# w <0> pushmark s ->x +# x <$> const[PV "strict"] sM ->y +# y <$> const[PV "refs"] sM ->z +# z <.> method_named[PV "unimport"] ->10 +# BEGIN 5: +# 1b <1> leavesub[1 ref] K/REFC,1 ->(end) +# - <@> lineseq K ->1b +# 12 <;> nextstate(B::Concise -938 Concise.pm:388) v:*,&,x*,x&,x$,$ ->13 +# 14 <1> require sK/1 ->15 +# 13 <$> const[PV "strict.pm"] s/BARE ->14 +# - <;> ex-nextstate(B::Concise -938 Concise.pm:388) v:*,&,x*,x&,x$,$ ->15 +# - <@> lineseq K ->- +# 15 <;> nextstate(B::Concise -938 Concise.pm:388) :*,&,x*,x&,x$,$ ->16 +# 1a <1> entersub[t1] KRS*/TARG,STRICT ->1b +# 16 <0> pushmark s ->17 +# 17 <$> const[PV "strict"] sM ->18 +# 18 <$> const[PV "refs"] sM ->19 +# 19 <.> method_named[PV "unimport"] ->1a +# BEGIN 6: +# 1l <1> leavesub[1 ref] K/REFC,1 ->(end) +# - <@> lineseq KP ->1l +# 1c <;> nextstate(B::Concise -924 Concise.pm:408) v:*,&,{,x*,x&,x$,$ ->1d +# 1e <1> require sK/1 ->1f +# 1d <$> const[PV "warnings.pm"] s/BARE ->1e +# - <;> ex-nextstate(B::Concise -924 Concise.pm:408) v:*,&,{,x*,x&,x$,$ ->1f +# - <@> lineseq K ->- +# 1f <;> nextstate(B::Concise -924 Concise.pm:408) :*,&,{,x*,x&,x$,$ ->1g +# 1k <1> entersub[t1] KRS*/TARG,STRICT ->1l +# 1g <0> pushmark s ->1h +# 1h <$> const[PV "warnings"] sM ->1i +# 1i <$> const[PV "qw"] sM ->1j +# 1j <.> method_named[PV "unimport"] ->1k +# BEGIN 7: +# 1p <1> leavesub[1 ref] K/REFC,1 ->(end) +# - <@> lineseq KP ->1p +# 1m <;> nextstate(main 3 -e:1) v:{ ->1n +# 1o <1> postinc[t3] sK/1 ->1p +# - <1> ex-rv2sv sKRM/1 ->1o +# 1n <#> gvsv[*beg] s ->1o EOT_EOT # BEGIN 1: -# a <1> leavesub[1 ref] K/REFC,1 ->(end) -# - <@> lineseq KP ->a -# 1 <;> nextstate(B::Concise -275 Concise.pm:356) v:*,&,{,x*,x&,x$,$ ->2 -# 3 <1> require sK/1 ->4 -# 2 <$> const(PV "strict.pm") s/BARE ->3 -# - <;> ex-nextstate(B::Concise -837 Concise.pm:366) v:*,&,{,x*,x&,x$,$ ->4 -# - <@> lineseq K ->- -# 4 <;> nextstate(B::Concise -275 Concise.pm:356) :*,&,{,x*,x&,x$,$ ->5 -# 9 <1> entersub[t1] KRS*/TARG,STRICT ->a -# 5 <0> pushmark s ->6 -# 6 <$> const(PV "strict") sM ->7 -# 7 <$> const(PV "refs") sM ->8 -# 8 <.> method_named(PV "unimport") ->9 +# 7 <1> leavesub[1 ref] K/REFC,1 ->(end) +# - <@> lineseq KP ->7 +# 1 <;> nextstate(B::Concise -1151 Concise.pm:116) v:*,&,{,x*,x&,x$,$ ->2 +# 6 <2> sassign sKS/2 ->7 +# 4 <1> srefgen sK/1 ->5 +# - <1> ex-list lKRM ->4 +# 3 <1> rv2gv sKRM/STRICT,1 ->4 +# 2 <$> gv(*STDOUT) s ->3 +# - <1> ex-rv2sv sKRM*/STRICT,1 ->6 +# 5 <$> gvsv(*B::Concise::walkHandle) s ->6 # BEGIN 2: -# k <1> leavesub[1 ref] K/REFC,1 ->(end) -# - <@> lineseq K ->k -# b <;> nextstate(B::Concise -265 Concise.pm:367) v:*,&,x*,x&,x$,$ ->c -# d <1> require sK/1 ->e -# c <$> const(PV "strict.pm") s/BARE ->d -# - <;> ex-nextstate(B::Concise -812 Concise.pm:386) v:*,&,x*,x&,x$,$ ->e +# h <1> leavesub[1 ref] K/REFC,1 ->(end) +# - <@> lineseq K ->h +# 8 <;> nextstate(B::Concise -1113 Concise.pm:181) v:*,&,x*,x&,x$,$ ->9 +# a <1> require sK/1 ->b +# 9 <$> const(PV "strict.pm") s/BARE ->a +# - <;> ex-nextstate(B::Concise -1113 Concise.pm:181) v:*,&,x*,x&,x$,$ ->b # - <@> lineseq K ->- -# e <;> nextstate(B::Concise -265 Concise.pm:367) :*,&,x*,x&,x$,$ ->f -# j <1> entersub[t1] KRS*/TARG,STRICT ->k -# f <0> pushmark s ->g -# g <$> const(PV "strict") sM ->h -# h <$> const(PV "refs") sM ->i -# i <.> method_named(PV "unimport") ->j +# b <;> nextstate(B::Concise -1113 Concise.pm:181) :*,&,x*,x&,x$,$ ->c +# g <1> entersub[t1] KRS*/TARG,STRICT ->h +# c <0> pushmark s ->d +# d <$> const(PV "strict") sM ->e +# e <$> const(PV "refs") sM ->f +# f <.> method_named(PV "unimport") ->g # BEGIN 3: -# u <1> leavesub[1 ref] K/REFC,1 ->(end) -# - <@> lineseq KP ->u -# l <;> nextstate(B::Concise -254 Concise.pm:386) v:*,&,{,x*,x&,x$,$ ->m -# n <1> require sK/1 ->o -# m <$> const(PV "warnings.pm") s/BARE ->n -# - <;> ex-nextstate(B::Concise -798 Concise.pm:406) v:*,&,{,x*,x&,x$,$ ->o +# r <1> leavesub[1 ref] K/REFC,1 ->(end) +# - <@> lineseq K ->r +# i <;> nextstate(B::Concise -1010 Concise.pm:303) v:*,&,x*,x&,x$,$ ->j +# k <1> require sK/1 ->l +# j <$> const(PV "strict.pm") s/BARE ->k +# - <;> ex-nextstate(B::Concise -1010 Concise.pm:303) v:*,&,x*,x&,x$,$ ->l # - <@> lineseq K ->- -# o <;> nextstate(B::Concise -254 Concise.pm:386) :*,&,{,x*,x&,x$,$ ->p -# t <1> entersub[t1] KRS*/TARG,STRICT ->u -# p <0> pushmark s ->q -# q <$> const(PV "warnings") sM ->r -# r <$> const(PV "qw") sM ->s -# s <.> method_named(PV "unimport") ->t +# l <;> nextstate(B::Concise -1010 Concise.pm:303) :*,&,x*,x&,x$,$ ->m +# q <1> entersub[t1] KRS*/TARG,STRICT ->r +# m <0> pushmark s ->n +# n <$> const(PV "strict") sM ->o +# o <$> const(PV "refs") sM ->p +# p <.> method_named(PV "unimport") ->q # BEGIN 4: -# y <1> leavesub[1 ref] K/REFC,1 ->(end) -# - <@> lineseq KP ->y -# v <;> nextstate(main 2 -e:1) v:>,<,%,{ ->w -# x <1> postinc[t2] sK/1 ->y -# - <1> ex-rv2sv sKRM/1 ->x -# w <$> gvsv(*beg) s ->x +# 11 <1> leavesub[1 ref] K/REFC,1 ->(end) +# - <@> lineseq KP ->11 +# s <;> nextstate(B::Concise -963 Concise.pm:368) v:*,&,{,x*,x&,x$,$ ->t +# u <1> require sK/1 ->v +# t <$> const(PV "strict.pm") s/BARE ->u +# - <;> ex-nextstate(B::Concise -963 Concise.pm:368) v:*,&,{,x*,x&,x$,$ ->v +# - <@> lineseq K ->- +# v <;> nextstate(B::Concise -963 Concise.pm:368) :*,&,{,x*,x&,x$,$ ->w +# 10 <1> entersub[t1] KRS*/TARG,STRICT ->11 +# w <0> pushmark s ->x +# x <$> const(PV "strict") sM ->y +# y <$> const(PV "refs") sM ->z +# z <.> method_named(PV "unimport") ->10 +# BEGIN 5: +# 1b <1> leavesub[1 ref] K/REFC,1 ->(end) +# - <@> lineseq K ->1b +# 12 <;> nextstate(B::Concise -938 Concise.pm:388) v:*,&,x*,x&,x$,$ ->13 +# 14 <1> require sK/1 ->15 +# 13 <$> const(PV "strict.pm") s/BARE ->14 +# - <;> ex-nextstate(B::Concise -938 Concise.pm:388) v:*,&,x*,x&,x$,$ ->15 +# - <@> lineseq K ->- +# 15 <;> nextstate(B::Concise -938 Concise.pm:388) :*,&,x*,x&,x$,$ ->16 +# 1a <1> entersub[t1] KRS*/TARG,STRICT ->1b +# 16 <0> pushmark s ->17 +# 17 <$> const(PV "strict") sM ->18 +# 18 <$> const(PV "refs") sM ->19 +# 19 <.> method_named(PV "unimport") ->1a +# BEGIN 6: +# 1l <1> leavesub[1 ref] K/REFC,1 ->(end) +# - <@> lineseq KP ->1l +# 1c <;> nextstate(B::Concise -924 Concise.pm:408) v:*,&,{,x*,x&,x$,$ ->1d +# 1e <1> require sK/1 ->1f +# 1d <$> const(PV "warnings.pm") s/BARE ->1e +# - <;> ex-nextstate(B::Concise -924 Concise.pm:408) v:*,&,{,x*,x&,x$,$ ->1f +# - <@> lineseq K ->- +# 1f <;> nextstate(B::Concise -924 Concise.pm:408) :*,&,{,x*,x&,x$,$ ->1g +# 1k <1> entersub[t1] KRS*/TARG,STRICT ->1l +# 1g <0> pushmark s ->1h +# 1h <$> const(PV "warnings") sM ->1i +# 1i <$> const(PV "qw") sM ->1j +# 1j <.> method_named(PV "unimport") ->1k +# BEGIN 7: +# 1p <1> leavesub[1 ref] K/REFC,1 ->(end) +# - <@> lineseq KP ->1p +# 1m <;> nextstate(main 3 -e:1) v:{ ->1n +# 1o <1> postinc[t2] sK/1 ->1p +# - <1> ex-rv2sv sKRM/1 ->1o +# 1n <$> gvsv(*beg) s ->1o EONT_EONT - checkOptree ( name => 'END', bcopts => 'END', prog => $src, @@ -163,7 +238,6 @@ EOT_EOT # 2 <$> gvsv(*end) s ->3 EONT_EONT - checkOptree ( name => 'CHECK', bcopts => 'CHECK', prog => $src, @@ -231,205 +305,321 @@ EOT_EOT # 2 <$> gvsv(*init) s ->3 EONT_EONT - checkOptree ( name => 'all of BEGIN END INIT CHECK UNITCHECK -exec', bcopts => [qw/ BEGIN END INIT CHECK UNITCHECK -exec /], prog => $src, strip_open_hints => 1, expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); # BEGIN 1: -# 1 <;> nextstate(B::Concise -275 Concise.pm:356) v:*,&,{,x*,x&,x$,$ -# 2 <$> const[PV "strict.pm"] s/BARE -# 3 <1> require sK/1 -# 4 <;> nextstate(B::Concise -275 Concise.pm:356) :*,&,{,x*,x&,x$,$ -# 5 <0> pushmark s -# 6 <$> const[PV "strict"] sM -# 7 <$> const[PV "refs"] sM -# 8 <.> method_named[PV "unimport"] -# 9 <1> entersub[t1] KRS*/TARG,STRICT -# a <1> leavesub[1 ref] K/REFC,1 +# 1 <;> nextstate(B::Concise -1151 Concise.pm:116) v:*,&,{,x*,x&,x$,$ +# 2 <#> gv[*STDOUT] s +# 3 <1> rv2gv sKRM/STRICT,1 +# 4 <1> srefgen sK/1 +# 5 <#> gvsv[*B::Concise::walkHandle] s +# 6 <2> sassign sKS/2 +# 7 <1> leavesub[1 ref] K/REFC,1 # BEGIN 2: -# b <;> nextstate(B::Concise -265 Concise.pm:367) v:*,&,x*,x&,x$,$ -# c <$> const[PV "strict.pm"] s/BARE -# d <1> require sK/1 -# e <;> nextstate(B::Concise -265 Concise.pm:367) :*,&,x*,x&,x$,$ -# f <0> pushmark s -# g <$> const[PV "strict"] sM -# h <$> const[PV "refs"] sM -# i <.> method_named[PV "unimport"] -# j <1> entersub[t1] KRS*/TARG,STRICT -# k <1> leavesub[1 ref] K/REFC,1 +# 8 <;> nextstate(B::Concise -1113 Concise.pm:181) v:*,&,x*,x&,x$,$ +# 9 <$> const[PV "strict.pm"] s/BARE +# a <1> require sK/1 +# b <;> nextstate(B::Concise -1113 Concise.pm:181) :*,&,x*,x&,x$,$ +# c <0> pushmark s +# d <$> const[PV "strict"] sM +# e <$> const[PV "refs"] sM +# f <.> method_named[PV "unimport"] +# g <1> entersub[t1] KRS*/TARG,STRICT +# h <1> leavesub[1 ref] K/REFC,1 # BEGIN 3: -# l <;> nextstate(B::Concise -254 Concise.pm:386) v:*,&,{,x*,x&,x$,$ -# m <$> const[PV "warnings.pm"] s/BARE -# n <1> require sK/1 -# o <;> nextstate(B::Concise -254 Concise.pm:386) :*,&,{,x*,x&,x$,$ -# p <0> pushmark s -# q <$> const[PV "warnings"] sM -# r <$> const[PV "qw"] sM -# s <.> method_named[PV "unimport"] -# t <1> entersub[t1] KRS*/TARG,STRICT -# u <1> leavesub[1 ref] K/REFC,1 +# i <;> nextstate(B::Concise -1010 Concise.pm:303) v:*,&,x*,x&,x$,$ +# j <$> const[PV "strict.pm"] s/BARE +# k <1> require sK/1 +# l <;> nextstate(B::Concise -1010 Concise.pm:303) :*,&,x*,x&,x$,$ +# m <0> pushmark s +# n <$> const[PV "strict"] sM +# o <$> const[PV "refs"] sM +# p <.> method_named[PV "unimport"] +# q <1> entersub[t1] KRS*/TARG,STRICT +# r <1> leavesub[1 ref] K/REFC,1 # BEGIN 4: -# v <;> nextstate(main 2 -e:1) v:>,<,%,{ -# w <#> gvsv[*beg] s -# x <1> postinc[t3] sK/1 -# y <1> leavesub[1 ref] K/REFC,1 +# s <;> nextstate(B::Concise -963 Concise.pm:368) v:*,&,{,x*,x&,x$,$ +# t <$> const[PV "strict.pm"] s/BARE +# u <1> require sK/1 +# v <;> nextstate(B::Concise -963 Concise.pm:368) :*,&,{,x*,x&,x$,$ +# w <0> pushmark s +# x <$> const[PV "strict"] sM +# y <$> const[PV "refs"] sM +# z <.> method_named[PV "unimport"] +# 10 <1> entersub[t1] KRS*/TARG,STRICT +# 11 <1> leavesub[1 ref] K/REFC,1 +# BEGIN 5: +# 12 <;> nextstate(B::Concise -938 Concise.pm:388) v:*,&,x*,x&,x$,$ +# 13 <$> const[PV "strict.pm"] s/BARE +# 14 <1> require sK/1 +# 15 <;> nextstate(B::Concise -938 Concise.pm:388) :*,&,x*,x&,x$,$ +# 16 <0> pushmark s +# 17 <$> const[PV "strict"] sM +# 18 <$> const[PV "refs"] sM +# 19 <.> method_named[PV "unimport"] +# 1a <1> entersub[t1] KRS*/TARG,STRICT +# 1b <1> leavesub[1 ref] K/REFC,1 +# BEGIN 6: +# 1c <;> nextstate(B::Concise -924 Concise.pm:408) v:*,&,{,x*,x&,x$,$ +# 1d <$> const[PV "warnings.pm"] s/BARE +# 1e <1> require sK/1 +# 1f <;> nextstate(B::Concise -924 Concise.pm:408) :*,&,{,x*,x&,x$,$ +# 1g <0> pushmark s +# 1h <$> const[PV "warnings"] sM +# 1i <$> const[PV "qw"] sM +# 1j <.> method_named[PV "unimport"] +# 1k <1> entersub[t1] KRS*/TARG,STRICT +# 1l <1> leavesub[1 ref] K/REFC,1 +# BEGIN 7: +# 1m <;> nextstate(main 3 -e:1) v:{ +# 1n <#> gvsv[*beg] s +# 1o <1> postinc[t3] sK/1 +# 1p <1> leavesub[1 ref] K/REFC,1 # END 1: -# z <;> nextstate(main 5 -e:1) v:>,<,%,{ -# 10 <#> gvsv[*end] s -# 11 <1> postinc[t3] sK/1 -# 12 <1> leavesub[1 ref] K/REFC,1 +# 1q <;> nextstate(main 9 -e:1) v:{ +# 1r <#> gvsv[*end] s +# 1s <1> postinc[t3] sK/1 +# 1t <1> leavesub[1 ref] K/REFC,1 # INIT 1: -# 13 <;> nextstate(main 4 -e:1) v:>,<,%,{ -# 14 <#> gvsv[*init] s -# 15 <1> postinc[t3] sK/1 -# 16 <1> leavesub[1 ref] K/REFC,1 +# 1u <;> nextstate(main 7 -e:1) v:{ +# 1v <#> gvsv[*init] s +# 1w <1> postinc[t3] sK/1 +# 1x <1> leavesub[1 ref] K/REFC,1 # CHECK 1: -# 17 <;> nextstate(main 3 -e:1) v:>,<,%,{ -# 18 <#> gvsv[*chk] s -# 19 <1> postinc[t3] sK/1 -# 1a <1> leavesub[1 ref] K/REFC,1 +# 1y <;> nextstate(main 5 -e:1) v:{ +# 1z <#> gvsv[*chk] s +# 20 <1> postinc[t3] sK/1 +# 21 <1> leavesub[1 ref] K/REFC,1 # UNITCHECK 1: -# 1b <;> nextstate(main 6 -e:1) v:>,<,%,{ -# 1c <#> gvsv[*uc] s -# 1d <1> postinc[t3] sK/1 -# 1e <1> leavesub[1 ref] K/REFC,1 +# 22 <;> nextstate(main 11 -e:1) v:{ +# 23 <#> gvsv[*uc] s +# 24 <1> postinc[t3] sK/1 +# 25 <1> leavesub[1 ref] K/REFC,1 EOT_EOT # BEGIN 1: -# 1 <;> nextstate(B::Concise -275 Concise.pm:356) v:*,&,{,x*,x&,x$,$ -# 2 <$> const(PV "strict.pm") s/BARE -# 3 <1> require sK/1 -# 4 <;> nextstate(B::Concise -275 Concise.pm:356) :*,&,{,x*,x&,x$,$ -# 5 <0> pushmark s -# 6 <$> const(PV "strict") sM -# 7 <$> const(PV "refs") sM -# 8 <.> method_named(PV "unimport") -# 9 <1> entersub[t1] KRS*/TARG,STRICT -# a <1> leavesub[1 ref] K/REFC,1 +# 1 <;> nextstate(B::Concise -1151 Concise.pm:116) v:*,&,{,x*,x&,x$,$ +# 2 <$> gv(*STDOUT) s +# 3 <1> rv2gv sKRM/STRICT,1 +# 4 <1> srefgen sK/1 +# 5 <$> gvsv(*B::Concise::walkHandle) s +# 6 <2> sassign sKS/2 +# 7 <1> leavesub[1 ref] K/REFC,1 # BEGIN 2: -# b <;> nextstate(B::Concise -265 Concise.pm:367) v:*,&,x*,x&,x$,$ -# c <$> const(PV "strict.pm") s/BARE -# d <1> require sK/1 -# e <;> nextstate(B::Concise -265 Concise.pm:367) :*,&,x*,x&,x$,$ -# f <0> pushmark s -# g <$> const(PV "strict") sM -# h <$> const(PV "refs") sM -# i <.> method_named(PV "unimport") -# j <1> entersub[t1] KRS*/TARG,STRICT -# k <1> leavesub[1 ref] K/REFC,1 +# 8 <;> nextstate(B::Concise -1113 Concise.pm:181) v:*,&,x*,x&,x$,$ +# 9 <$> const(PV "strict.pm") s/BARE +# a <1> require sK/1 +# b <;> nextstate(B::Concise -1113 Concise.pm:181) :*,&,x*,x&,x$,$ +# c <0> pushmark s +# d <$> const(PV "strict") sM +# e <$> const(PV "refs") sM +# f <.> method_named(PV "unimport") +# g <1> entersub[t1] KRS*/TARG,STRICT +# h <1> leavesub[1 ref] K/REFC,1 # BEGIN 3: -# l <;> nextstate(B::Concise -254 Concise.pm:386) v:*,&,{,x*,x&,x$,$ -# m <$> const(PV "warnings.pm") s/BARE -# n <1> require sK/1 -# o <;> nextstate(B::Concise -254 Concise.pm:386) :*,&,{,x*,x&,x$,$ -# p <0> pushmark s -# q <$> const(PV "warnings") sM -# r <$> const(PV "qw") sM -# s <.> method_named(PV "unimport") -# t <1> entersub[t1] KRS*/TARG,STRICT -# u <1> leavesub[1 ref] K/REFC,1 +# i <;> nextstate(B::Concise -1010 Concise.pm:303) v:*,&,x*,x&,x$,$ +# j <$> const(PV "strict.pm") s/BARE +# k <1> require sK/1 +# l <;> nextstate(B::Concise -1010 Concise.pm:303) :*,&,x*,x&,x$,$ +# m <0> pushmark s +# n <$> const(PV "strict") sM +# o <$> const(PV "refs") sM +# p <.> method_named(PV "unimport") +# q <1> entersub[t1] KRS*/TARG,STRICT +# r <1> leavesub[1 ref] K/REFC,1 # BEGIN 4: -# v <;> nextstate(main 2 -e:1) v:>,<,%,{ -# w <$> gvsv(*beg) s -# x <1> postinc[t2] sK/1 -# y <1> leavesub[1 ref] K/REFC,1 +# s <;> nextstate(B::Concise -963 Concise.pm:368) v:*,&,{,x*,x&,x$,$ +# t <$> const(PV "strict.pm") s/BARE +# u <1> require sK/1 +# v <;> nextstate(B::Concise -963 Concise.pm:368) :*,&,{,x*,x&,x$,$ +# w <0> pushmark s +# x <$> const(PV "strict") sM +# y <$> const(PV "refs") sM +# z <.> method_named(PV "unimport") +# 10 <1> entersub[t1] KRS*/TARG,STRICT +# 11 <1> leavesub[1 ref] K/REFC,1 +# BEGIN 5: +# 12 <;> nextstate(B::Concise -938 Concise.pm:388) v:*,&,x*,x&,x$,$ +# 13 <$> const(PV "strict.pm") s/BARE +# 14 <1> require sK/1 +# 15 <;> nextstate(B::Concise -938 Concise.pm:388) :*,&,x*,x&,x$,$ +# 16 <0> pushmark s +# 17 <$> const(PV "strict") sM +# 18 <$> const(PV "refs") sM +# 19 <.> method_named(PV "unimport") +# 1a <1> entersub[t1] KRS*/TARG,STRICT +# 1b <1> leavesub[1 ref] K/REFC,1 +# BEGIN 6: +# 1c <;> nextstate(B::Concise -924 Concise.pm:408) v:*,&,{,x*,x&,x$,$ +# 1d <$> const(PV "warnings.pm") s/BARE +# 1e <1> require sK/1 +# 1f <;> nextstate(B::Concise -924 Concise.pm:408) :*,&,{,x*,x&,x$,$ +# 1g <0> pushmark s +# 1h <$> const(PV "warnings") sM +# 1i <$> const(PV "qw") sM +# 1j <.> method_named(PV "unimport") +# 1k <1> entersub[t1] KRS*/TARG,STRICT +# 1l <1> leavesub[1 ref] K/REFC,1 +# BEGIN 7: +# 1m <;> nextstate(main 3 -e:1) v:{ +# 1n <$> gvsv(*beg) s +# 1o <1> postinc[t2] sK/1 +# 1p <1> leavesub[1 ref] K/REFC,1 # END 1: -# z <;> nextstate(main 5 -e:1) v:>,<,%,{ -# 10 <$> gvsv(*end) s -# 11 <1> postinc[t2] sK/1 -# 12 <1> leavesub[1 ref] K/REFC,1 +# 1q <;> nextstate(main 9 -e:1) v:{ +# 1r <$> gvsv(*end) s +# 1s <1> postinc[t2] sK/1 +# 1t <1> leavesub[1 ref] K/REFC,1 # INIT 1: -# 13 <;> nextstate(main 4 -e:1) v:>,<,%,{ -# 14 <$> gvsv(*init) s -# 15 <1> postinc[t2] sK/1 -# 16 <1> leavesub[1 ref] K/REFC,1 +# 1u <;> nextstate(main 7 -e:1) v:{ +# 1v <$> gvsv(*init) s +# 1w <1> postinc[t2] sK/1 +# 1x <1> leavesub[1 ref] K/REFC,1 # CHECK 1: -# 17 <;> nextstate(main 3 -e:1) v:>,<,%,{ -# 18 <$> gvsv(*chk) s -# 19 <1> postinc[t2] sK/1 -# 1a <1> leavesub[1 ref] K/REFC,1 +# 1y <;> nextstate(main 5 -e:1) v:{ +# 1z <$> gvsv(*chk) s +# 20 <1> postinc[t2] sK/1 +# 21 <1> leavesub[1 ref] K/REFC,1 # UNITCHECK 1: -# 1b <;> nextstate(main 6 -e:1) v:>,<,%,{ -# 1c <$> gvsv(*uc) s -# 1d <1> postinc[t2] sK/1 -# 1e <1> leavesub[1 ref] K/REFC,1 +# 22 <;> nextstate(main 11 -e:1) v:{ +# 23 <$> gvsv(*uc) s +# 24 <1> postinc[t2] sK/1 +# 25 <1> leavesub[1 ref] K/REFC,1 EONT_EONT - # perl "-I../lib" -MO=Concise,BEGIN,CHECK,INIT,END,-exec -e '$a=$b && print q/foo/' - - checkOptree ( name => 'regression test for patch 25352', bcopts => [qw/ BEGIN END INIT CHECK -exec /], prog => 'print q/foo/', expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); # BEGIN 1: # 1 <;> nextstate(B::Concise -275 Concise.pm:356) v:*,&,{,x*,x&,x$,$ -# 2 <$> const[PV "strict.pm"] s/BARE -# 3 <1> require sK/1 -# 4 <;> nextstate(B::Concise -275 Concise.pm:356) :*,&,{,x*,x&,x$,$ -# 5 <0> pushmark s -# 6 <$> const[PV "strict"] sM -# 7 <$> const[PV "refs"] sM -# 8 <.> method_named[PV "unimport"] -# 9 <1> entersub[t1] KRS*/TARG,STRICT -# a <1> leavesub[1 ref] K/REFC,1 +# 2 <#> gv[*STDOUT] s +# 3 <1> rv2gv sKRM/STRICT,1 +# 4 <1> srefgen sK/1 +# 5 <#> gvsv[*B::Concise::walkHandle] s +# 6 <2> sassign sKS/2 +# 7 <1> leavesub[1 ref] K/REFC,1 # BEGIN 2: -# b <;> nextstate(B::Concise -265 Concise.pm:367) v:*,&,x*,x&,x$,$ -# c <$> const[PV "strict.pm"] s/BARE -# d <1> require sK/1 -# e <;> nextstate(B::Concise -265 Concise.pm:367) :*,&,x*,x&,x$,$ -# f <0> pushmark s -# g <$> const[PV "strict"] sM -# h <$> const[PV "refs"] sM -# i <.> method_named[PV "unimport"] -# j <1> entersub[t1] KRS*/TARG,STRICT -# k <1> leavesub[1 ref] K/REFC,1 +# 8 <;> nextstate(B::Concise -1113 Concise.pm:181) v:*,&,x*,x&,x$,$ +# 9 <$> const[PV "strict.pm"] s/BARE +# a <1> require sK/1 +# b <;> nextstate(B::Concise -1113 Concise.pm:181) :*,&,x*,x&,x$,$ +# c <0> pushmark s +# d <$> const[PV "strict"] sM +# e <$> const[PV "refs"] sM +# f <.> method_named[PV "unimport"] +# g <1> entersub[t1] KRS*/TARG,STRICT +# h <1> leavesub[1 ref] K/REFC,1 # BEGIN 3: -# l <;> nextstate(B::Concise -254 Concise.pm:386) v:*,&,{,x*,x&,x$,$ -# m <$> const[PV "warnings.pm"] s/BARE -# n <1> require sK/1 -# o <;> nextstate(B::Concise -254 Concise.pm:386) :*,&,{,x*,x&,x$,$ -# p <0> pushmark s -# q <$> const[PV "warnings"] sM -# r <$> const[PV "qw"] sM -# s <.> method_named[PV "unimport"] -# t <1> entersub[t1] KRS*/TARG,STRICT -# u <1> leavesub[1 ref] K/REFC,1 +# i <;> nextstate(B::Concise -1010 Concise.pm:303) v:*,&,x*,x&,x$,$ +# j <$> const[PV "strict.pm"] s/BARE +# k <1> require sK/1 +# l <;> nextstate(B::Concise -1010 Concise.pm:303) :*,&,x*,x&,x$,$ +# m <0> pushmark s +# n <$> const[PV "strict"] sM +# o <$> const[PV "refs"] sM +# p <.> method_named[PV "unimport"] +# q <1> entersub[t1] KRS*/TARG,STRICT +# r <1> leavesub[1 ref] K/REFC,1 +# BEGIN 4: +# s <;> nextstate(B::Concise -963 Concise.pm:368) v:*,&,{,x*,x&,x$,$ +# t <$> const[PV "strict.pm"] s/BARE +# u <1> require sK/1 +# v <;> nextstate(B::Concise -963 Concise.pm:368) :*,&,{,x*,x&,x$,$ +# w <0> pushmark s +# x <$> const[PV "strict"] sM +# y <$> const[PV "refs"] sM +# z <.> method_named[PV "unimport"] +# 10 <1> entersub[t1] KRS*/TARG,STRICT +# 11 <1> leavesub[1 ref] K/REFC,1 +# BEGIN 5: +# 12 <;> nextstate(B::Concise -938 Concise.pm:388) v:*,&,x*,x&,x$,$ +# 13 <$> const[PV "strict.pm"] s/BARE +# 14 <1> require sK/1 +# 15 <;> nextstate(B::Concise -938 Concise.pm:388) :*,&,x*,x&,x$,$ +# 16 <0> pushmark s +# 17 <$> const[PV "strict"] sM +# 18 <$> const[PV "refs"] sM +# 19 <.> method_named[PV "unimport"] +# 1a <1> entersub[t1] KRS*/TARG,STRICT +# 1b <1> leavesub[1 ref] K/REFC,1 +# BEGIN 6: +# 1c <;> nextstate(B::Concise -924 Concise.pm:408) v:*,&,{,x*,x&,x$,$ +# 1d <$> const[PV "warnings.pm"] s/BARE +# 1e <1> require sK/1 +# 1f <;> nextstate(B::Concise -924 Concise.pm:408) :*,&,{,x*,x&,x$,$ +# 1g <0> pushmark s +# 1h <$> const[PV "warnings"] sM +# 1i <$> const[PV "qw"] sM +# 1j <.> method_named[PV "unimport"] +# 1k <1> entersub[t1] KRS*/TARG,STRICT +# 1l <1> leavesub[1 ref] K/REFC,1 EOT_EOT # BEGIN 1: -# 1 <;> nextstate(B::Concise -275 Concise.pm:356) v:*,&,{,x*,x&,x$,$ -# 2 <$> const(PV "strict.pm") s/BARE -# 3 <1> require sK/1 -# 4 <;> nextstate(B::Concise -275 Concise.pm:356) :*,&,{,x*,x&,x$,$ -# 5 <0> pushmark s -# 6 <$> const(PV "strict") sM -# 7 <$> const(PV "refs") sM -# 8 <.> method_named(PV "unimport") -# 9 <1> entersub[t1] KRS*/TARG,STRICT -# a <1> leavesub[1 ref] K/REFC,1 +# 1 <;> nextstate(B::Concise -1151 Concise.pm:116) v:*,&,{,x*,x&,x$,$ +# 2 <$> gv(*STDOUT) s +# 3 <1> rv2gv sKRM/STRICT,1 +# 4 <1> srefgen sK/1 +# 5 <$> gvsv(*B::Concise::walkHandle) s +# 6 <2> sassign sKS/2 +# 7 <1> leavesub[1 ref] K/REFC,1 # BEGIN 2: -# b <;> nextstate(B::Concise -265 Concise.pm:367) v:*,&,x*,x&,x$,$ -# c <$> const(PV "strict.pm") s/BARE -# d <1> require sK/1 -# e <;> nextstate(B::Concise -265 Concise.pm:367) :*,&,x*,x&,x$,$ -# f <0> pushmark s -# g <$> const(PV "strict") sM -# h <$> const(PV "refs") sM -# i <.> method_named(PV "unimport") -# j <1> entersub[t1] KRS*/TARG,STRICT -# k <1> leavesub[1 ref] K/REFC,1 +# 8 <;> nextstate(B::Concise -1113 Concise.pm:181) v:*,&,x*,x&,x$,$ +# 9 <$> const(PV "strict.pm") s/BARE +# a <1> require sK/1 +# b <;> nextstate(B::Concise -1113 Concise.pm:181) :*,&,x*,x&,x$,$ +# c <0> pushmark s +# d <$> const(PV "strict") sM +# e <$> const(PV "refs") sM +# f <.> method_named(PV "unimport") +# g <1> entersub[t1] KRS*/TARG,STRICT +# h <1> leavesub[1 ref] K/REFC,1 # BEGIN 3: -# l <;> nextstate(B::Concise -254 Concise.pm:386) v:*,&,{,x*,x&,x$,$ -# m <$> const(PV "warnings.pm") s/BARE -# n <1> require sK/1 -# o <;> nextstate(B::Concise -254 Concise.pm:386) :*,&,{,x*,x&,x$,$ -# p <0> pushmark s -# q <$> const(PV "warnings") sM -# r <$> const(PV "qw") sM -# s <.> method_named(PV "unimport") -# t <1> entersub[t1] KRS*/TARG,STRICT -# u <1> leavesub[1 ref] K/REFC,1 +# i <;> nextstate(B::Concise -1010 Concise.pm:303) v:*,&,x*,x&,x$,$ +# j <$> const(PV "strict.pm") s/BARE +# k <1> require sK/1 +# l <;> nextstate(B::Concise -1010 Concise.pm:303) :*,&,x*,x&,x$,$ +# m <0> pushmark s +# n <$> const(PV "strict") sM +# o <$> const(PV "refs") sM +# p <.> method_named(PV "unimport") +# q <1> entersub[t1] KRS*/TARG,STRICT +# r <1> leavesub[1 ref] K/REFC,1 +# BEGIN 4: +# s <;> nextstate(B::Concise -963 Concise.pm:368) v:*,&,{,x*,x&,x$,$ +# t <$> const(PV "strict.pm") s/BARE +# u <1> require sK/1 +# v <;> nextstate(B::Concise -963 Concise.pm:368) :*,&,{,x*,x&,x$,$ +# w <0> pushmark s +# x <$> const(PV "strict") sM +# y <$> const(PV "refs") sM +# z <.> method_named(PV "unimport") +# 10 <1> entersub[t1] KRS*/TARG,STRICT +# 11 <1> leavesub[1 ref] K/REFC,1 +# BEGIN 5: +# 12 <;> nextstate(B::Concise -938 Concise.pm:388) v:*,&,x*,x&,x$,$ +# 13 <$> const(PV "strict.pm") s/BARE +# 14 <1> require sK/1 +# 15 <;> nextstate(B::Concise -938 Concise.pm:388) :*,&,x*,x&,x$,$ +# 16 <0> pushmark s +# 17 <$> const(PV "strict") sM +# 18 <$> const(PV "refs") sM +# 19 <.> method_named(PV "unimport") +# 1a <1> entersub[t1] KRS*/TARG,STRICT +# 1b <1> leavesub[1 ref] K/REFC,1 +# BEGIN 6: +# 1c <;> nextstate(B::Concise -924 Concise.pm:408) v:*,&,{,x*,x&,x$,$ +# 1d <$> const(PV "warnings.pm") s/BARE +# 1e <1> require sK/1 +# 1f <;> nextstate(B::Concise -924 Concise.pm:408) :*,&,{,x*,x&,x$,$ +# 1g <0> pushmark s +# 1h <$> const(PV "warnings") sM +# 1i <$> const(PV "qw") sM +# 1j <.> method_named(PV "unimport") +# 1k <1> entersub[t1] KRS*/TARG,STRICT +# 1l <1> leavesub[1 ref] K/REFC,1 EONT_EONT diff --git a/ext/B/t/strict.t b/ext/B/t/strict.t new file mode 100644 index 0000000000..4d1b84aa20 --- /dev/null +++ b/ext/B/t/strict.t @@ -0,0 +1,30 @@ +#!./perl -w + +use strict; +use warnings; + +use Config; +use Test::More; + +BEGIN { + if ( ( $Config{'extensions'} !~ /\sB\s/ ) ) { + plan skip_all => "Perl was not compiled with B"; + exit 0; + } +} + +use strict; +use warnings; + +use B (); +use O (); + +foreach my $module (qw/B O/) { + my $path = $INC{ $module . '.pm' }; + my $check = "$^X -cw -Mstrict $path 2>&1"; + my $got = `$check`; + is( $got, "$path syntax OK\n", "$module.pm compiles without errors" ) + or diag($got); +} + +done_testing(); -- Perl5 Master Repository
