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

Reply via email to