Revert B::Debug removal
authorDagfinn Ilmari Mannsåker <ilmari@ilmari.org>
Tue, 25 Jul 2017 12:04:37 +0000 (13:04 +0100)
committerDagfinn Ilmari Mannsåker <ilmari@ilmari.org>
Tue, 25 Jul 2017 14:36:39 +0000 (15:36 +0100)
Per perlpolicy, modules need to be deprecated for at least one stable
release before removal.

This reverts commits ecfa068aa0dab432bfdef423766b665be127ef77 and
6be75e63260512c636a5bdc72bbf4981a37bad7d.

MANIFEST
Porting/Maintainers.pl
cpan/B-Debug/Debug.pm [new file with mode: 0644]
cpan/B-Debug/t/debug.t [new file with mode: 0644]
ext/B/B/Terse.pm
lib/.gitignore
pod/perldelta.pod
pod/perlhacktips.pod
pod/perlinterp.pod
t/TEST

index 8085a4e..5bd6271 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -138,6 +138,8 @@ cpan/AutoLoader/lib/AutoLoader.pm   Autoloader base class
 cpan/AutoLoader/lib/AutoSplit.pm       Split up autoload functions
 cpan/AutoLoader/t/01AutoLoader.t       See if AutoLoader works
 cpan/AutoLoader/t/02AutoSplit.t                See if AutoSplit works
+cpan/B-Debug/Debug.pm  Compiler Debug backend
+cpan/B-Debug/t/debug.t See if B::Debug works
 cpan/bignum/lib/bigint.pm              bigint
 cpan/bignum/lib/bignum.pm              bignum
 cpan/bignum/lib/bigrat.pm              bigrat
index 570fd6d..961f23c 100755 (executable)
@@ -172,6 +172,12 @@ use File::Glob qw(:case);
         'EXCLUDED'     => [qr{^t/release-.*\.t}],
     },
 
+    'B::Debug' => {
+        'DISTRIBUTION' => 'RURBAN/B-Debug-1.24.tar.gz',
+        'FILES'        => q[cpan/B-Debug],
+        'EXCLUDED'     => ['t/pod.t'],
+    },
+
     'base' => {
         'DISTRIBUTION' => 'RJBS/base-2.23.tar.gz',
         'FILES'        => q[dist/base],
diff --git a/cpan/B-Debug/Debug.pm b/cpan/B-Debug/Debug.pm
new file mode 100644 (file)
index 0000000..e295635
--- /dev/null
@@ -0,0 +1,457 @@
+package B::Debug;
+
+our $VERSION = '1.24';
+
+use strict;
+require 5.006;
+use B qw(peekop class walkoptree walkoptree_exec
+         main_start main_root cstring sv_undef SVf_NOK SVf_IOK);
+use Config;
+my (@optype, @specialsv_name);
+require B;
+if ($] < 5.009) {
+  require B::Asmdata;
+  B::Asmdata->import (qw(@optype @specialsv_name));
+} else {
+  B->import (qw(@optype @specialsv_name));
+}
+
+if ($] < 5.006002) {
+  eval q|sub B::GV::SAFENAME {
+    my $name = (shift())->NAME;
+    # The regex below corresponds to the isCONTROLVAR macro from toke.c
+    $name =~ s/^([\cA-\cZ\c\\c[\c]\c?\c_\c^])/"^".chr(64 ^ ord($1))/e;
+    return $name;
+  }|;
+}
+
+my ($have_B_Flags, $have_B_Flags_extra);
+if (!$ENV{PERL_CORE}){ # avoid CORE test crashes
+  eval { require B::Flags and $have_B_Flags++ };
+  $have_B_Flags_extra++ if $have_B_Flags and $B::Flags::VERSION gt '0.03';
+}
+my %done_gv;
+
+sub _printop {
+  my $op = shift;
+  my $addr = ${$op} ? $op->ppaddr : '';
+  $addr =~ s/^PL_ppaddr// if $addr;
+  if (${$op}) {
+    return sprintf "0x%08x %6s %s", ${$op}, class($op), $addr;
+  } else {
+    return sprintf "0x%x %6s %s", ${$op}, '', $addr;
+  }
+}
+
+sub B::OP::debug {
+    my ($op) = @_;
+    printf <<'EOT', class($op), $$op, _printop($op), _printop($op->next), _printop($op->sibling), $op->targ, $op->type, $op->name;
+%s (0x%lx)
+       op_ppaddr       %s
+       op_next         %s
+       op_sibling      %s
+       op_targ         %d
+       op_type         %d      %s
+EOT
+    if ($] > 5.009) {
+       printf <<'EOT', $op->opt;
+       op_opt          %d
+EOT
+    } else {
+       printf <<'EOT', $op->seq;
+       op_seq          %d
+EOT
+    }
+    if ($have_B_Flags) {
+        printf <<'EOT', $op->flags, $op->flagspv, $op->private, $op->privatepv;
+       op_flags        %d      %s
+       op_private      %d      %s
+EOT
+    } else {
+        printf <<'EOT', $op->flags, $op->private;
+       op_flags        %d
+       op_private      %d
+EOT
+    }
+}
+
+sub B::UNOP::debug {
+    my ($op) = @_;
+    $op->B::OP::debug();
+    printf "\top_first\t%s\n", _printop($op->first);
+}
+
+sub B::BINOP::debug {
+    my ($op) = @_;
+    $op->B::UNOP::debug();
+    printf "\top_last \t%s\n", _printop($op->last);
+}
+
+sub B::LOOP::debug {
+    my ($op) = @_;
+    $op->B::BINOP::debug();
+    printf <<'EOT', _printop($op->redoop), _printop($op->nextop), _printop($op->lastop);
+       op_redoop       %s
+       op_nextop       %s
+       op_lastop       %s
+EOT
+}
+
+sub B::LOGOP::debug {
+    my ($op) = @_;
+    $op->B::UNOP::debug();
+    printf "\top_other\t%s\n", _printop($op->other);
+}
+
+sub B::LISTOP::debug {
+    my ($op) = @_;
+    $op->B::BINOP::debug();
+    printf "\top_children\t%d\n", $op->children;
+}
+
+sub B::PMOP::debug {
+    my ($op) = @_;
+    $op->B::LISTOP::debug();
+    printf "\top_pmreplroot\t0x%x\n", $] < 5.008 ? ${$op->pmreplroot} : $op->pmreplroot;
+    printf "\top_pmreplstart\t0x%x\n", ${$op->pmreplstart};
+    printf "\top_pmnext\t0x%x\n", ${$op->pmnext} if $] < 5.009005;
+    if ($Config{'useithreads'}) {
+      printf "\top_pmstashpv\t%s\n", cstring($op->pmstashpv);
+      printf "\top_pmoffset\t%d\n", $op->pmoffset;
+    } else {
+      printf "\top_pmstash\t%s\n", cstring($op->pmstash);
+    }
+    printf "\top_precomp\t%s\n", cstring($op->precomp);
+    printf "\top_pmflags\t0x%x\n", $op->pmflags;
+    printf "\top_reflags\t0x%x\n", $op->reflags if $] >= 5.009;
+    printf "\top_pmpermflags\t0x%x\n", $op->pmpermflags if $] < 5.009;
+    printf "\top_pmdynflags\t0x%x\n", $op->pmdynflags if $] < 5.009;
+    $op->pmreplroot->debug if $] < 5.008;
+}
+
+sub B::COP::debug {
+    my ($op) = @_;
+    $op->B::OP::debug();
+    my $warnings = ref $op->warnings ? ${$op->warnings} : 0;
+    printf <<'EOT', $op->label, $op->stashpv, $op->file, $op->cop_seq, $op->arybase, $op->line, $warnings;
+       cop_label       "%s"
+       cop_stashpv     "%s"
+       cop_file        "%s"
+       cop_seq         %d
+       cop_arybase     %d
+       cop_line        %d
+       cop_warnings    0x%x
+EOT
+  if ($] > 5.008 and $] < 5.011) {
+    my $cop_io = class($op->io) eq 'SPECIAL' ? '' : $op->io->as_string;
+    printf("   cop_io          %s\n", cstring($cop_io));
+  }
+}
+
+sub B::SVOP::debug {
+    my ($op) = @_;
+    $op->B::OP::debug();
+    printf "\top_sv\t\t0x%x\n", ${$op->sv};
+    $op->sv->debug;
+}
+
+sub B::METHOP::debug {
+    my ($op) = @_;
+    $op->B::OP::debug();
+    if (${$op->first})  {
+      printf "\top_first\t0x%x\n", ${$op->first};
+      $op->first->debug;
+    } else {
+      printf "\top_meth_sv\t0x%x\n", ${$op->meth_sv};
+      $op->meth_sv->debug;
+    }
+}
+
+sub B::PVOP::debug {
+    my ($op) = @_;
+    $op->B::OP::debug();
+    printf "\top_pv\t\t%s\n", cstring($op->pv);
+}
+
+sub B::PADOP::debug {
+    my ($op) = @_;
+    $op->B::OP::debug();
+    printf "\top_padix\t%ld\n", $op->padix;
+}
+
+sub B::NULL::debug {
+    my ($sv) = @_;
+    if ($$sv == ${sv_undef()}) {
+       print "&sv_undef\n";
+    } else {
+       printf "NULL (0x%x)\n", $$sv;
+    }
+}
+
+sub B::SV::debug {
+    my ($sv) = @_;
+    if (!$$sv) {
+       print class($sv), " = NULL\n";
+       return;
+    }
+    printf <<'EOT', class($sv), $$sv, $sv->REFCNT;
+%s (0x%x)
+       REFCNT          %d
+EOT
+    printf "\tFLAGS\t\t0x%x", $sv->FLAGS;
+    if ($have_B_Flags) {
+      printf "\t%s", $have_B_Flags_extra ? $sv->flagspv(0) : $sv->flagspv;
+    }
+    print "\n";
+}
+
+sub B::RV::debug {
+    my ($rv) = @_;
+    B::SV::debug($rv);
+    printf <<'EOT', ${$rv->RV};
+       RV              0x%x
+EOT
+    $rv->RV->debug;
+}
+
+sub B::PV::debug {
+    my ($sv) = @_;
+    $sv->B::SV::debug();
+    my $pv = $sv->PV();
+    printf <<'EOT', cstring($pv), $sv->CUR, $sv->LEN;
+       xpv_pv          %s
+       xpv_cur         %d
+       xpv_len         %d
+EOT
+}
+
+sub B::IV::debug {
+    my ($sv) = @_;
+    $sv->B::SV::debug();
+    printf "\txiv_iv\t\t%d\n", $sv->IV if $sv->FLAGS & SVf_IOK;
+}
+
+sub B::NV::debug {
+    my ($sv) = @_;
+    $sv->B::IV::debug();
+    printf "\txnv_nv\t\t%s\n", $sv->NV if $sv->FLAGS & SVf_NOK;
+}
+
+sub B::PVIV::debug {
+    my ($sv) = @_;
+    $sv->B::PV::debug();
+    printf "\txiv_iv\t\t%d\n", $sv->IV if $sv->FLAGS & SVf_IOK;
+}
+
+sub B::PVNV::debug {
+    my ($sv) = @_;
+    $sv->B::PVIV::debug();
+    printf "\txnv_nv\t\t%s\n", $sv->NV if $sv->FLAGS & SVf_NOK;
+}
+
+sub B::PVLV::debug {
+    my ($sv) = @_;
+    $sv->B::PVNV::debug();
+    printf "\txlv_targoff\t%d\n", $sv->TARGOFF;
+    printf "\txlv_targlen\t%u\n", $sv->TARGLEN;
+    printf "\txlv_type\t%s\n", cstring(chr($sv->TYPE));
+}
+
+sub B::BM::debug {
+    my ($sv) = @_;
+    $sv->B::PVNV::debug();
+    printf "\txbm_useful\t%d\n", $sv->USEFUL;
+    printf "\txbm_previous\t%u\n", $sv->PREVIOUS;
+    printf "\txbm_rare\t%s\n", cstring(chr($sv->RARE));
+}
+
+sub B::CV::debug {
+    my ($sv) = @_;
+    $sv->B::PVNV::debug();
+    my ($stash) = $sv->STASH;
+    my ($start) = $sv->START;
+    my ($root)  = $sv->ROOT;
+    my ($padlist) = $sv->PADLIST;
+    my ($file) = $sv->FILE;
+    my ($gv) = $sv->GV;
+    printf <<'EOT', $$stash, $$start, $$root;
+       STASH           0x%x
+       START           0x%x
+       ROOT            0x%x
+EOT
+    if ( $]>5.017 && ($sv->FLAGS & 0x40000)) { #lexsub
+      printf("\tNAME\t%%s\n", $sv->NAME);
+    } else {
+      printf("\tGV\t%0x%x\t%s\n", $$gv, $gv->SAFENAME);
+    }
+    printf <<'EOT', $file, $sv->DEPTH, $padlist, ${$sv->OUTSIDE};
+       FILE            %s
+       DEPTH           %d
+       PADLIST         0x%x
+       OUTSIDE         0x%x
+EOT
+    printf("\tOUTSIDE_SEQ\t%d\n", $sv->OUTSIDE_SEQ) if $] > 5.007;
+    if ($have_B_Flags) {
+      my $SVt_PVCV = $] < 5.010 ? 12 : 13;
+      printf("\tCvFLAGS\t0x%x\t%s\n", $sv->CvFLAGS,
+            $have_B_Flags_extra ? $sv->flagspv($SVt_PVCV) : $sv->flagspv);
+    } else {
+      printf("\tCvFLAGS\t0x%x\n", $sv->CvFLAGS);
+    }
+    $start->debug if $start;
+    $root->debug if $root;
+    $gv->debug if $gv;
+    $padlist->debug if $padlist;
+}
+
+sub B::AV::debug {
+    my ($av) = @_;
+    $av->B::SV::debug;
+    _array_debug($av);
+}
+
+sub _array_debug {
+    my ($av) = @_;
+    # tied arrays may leave out FETCHSIZE
+    my (@array) = eval { $av->ARRAY; };
+    print "\tARRAY\t\t(", join(", ", map("0x" . $$_, @array)), ")\n";
+    my $fill = eval { scalar(@array) };
+    if ($Config{'useithreads'} && class($av) ne 'PADLIST') {
+      printf <<'EOT', $fill, $av->MAX, $av->OFF;
+       FILL            %d
+       MAX             %d
+       OFF             %d
+EOT
+    } else {
+      printf <<'EOT', $fill, $av->MAX;
+       FILL            %d
+       MAX             %d
+EOT
+    }
+    if ($] < 5.009) {
+      if ($have_B_Flags) {
+       printf("\tAvFLAGS\t0x%x\t%s\n", $av->AvFLAGS,
+              $have_B_Flags_extra ? $av->flagspv(10) : $av->flagspv);
+      } else {
+       printf("\tAvFLAGS\t0x%x\n", $av->AvFLAGS);
+      }
+    }
+}
+
+sub B::GV::debug {
+    my ($gv) = @_;
+    if ($done_gv{$$gv}++) {
+       printf "GV %s::%s\n", $gv->STASH->NAME, $gv->SAFENAME;
+       return;
+    }
+    my $sv = $gv->SV;
+    my $av = $gv->AV;
+    my $cv = $gv->CV;
+    $gv->B::SV::debug;
+    printf <<'EOT', $gv->SAFENAME, $gv->STASH->NAME, $gv->STASH, $$sv, $gv->GvREFCNT, $gv->FORM, $$av, ${$gv->HV}, ${$gv->EGV}, $$cv, $gv->CVGEN, $gv->LINE, $gv->FILE, $gv->GvFLAGS;
+       NAME            %s
+       STASH           %s (0x%x)
+       SV              0x%x
+       GvREFCNT        %d
+       FORM            0x%x
+       AV              0x%x
+       HV              0x%x
+       EGV             0x%x
+       CV              0x%x
+       CVGEN           %d
+       LINE            %d
+       FILE            %s
+EOT
+    if ($have_B_Flags) {
+      my $SVt_PVGV = $] < 5.010 ? 13 : 9;
+      printf("\tGvFLAGS\t0x%x\t%s\n", $gv->GvFLAGS,
+            $have_B_Flags_extra ? $gv->flagspv($SVt_PVGV) : $gv->flagspv);
+    } else {
+      printf("\tGvFLAGS\t0x%x\n", $gv->GvFLAGS);
+    }
+    $sv->debug if $sv;
+    $av->debug if $av;
+    $cv->debug if $cv;
+}
+
+sub B::SPECIAL::debug {
+    my $sv = shift;
+    my $i = ref $sv ? $$sv : 0;
+    print defined $specialsv_name[$i] ? $specialsv_name[$i] : "", "\n";
+}
+
+sub B::PADLIST::debug {
+    my ($padlist) = @_;
+    printf <<'EOT', class($padlist), $$padlist, $padlist->REFCNT;
+%s (0x%x)
+       REFCNT          %d
+EOT
+    _array_debug($padlist);
+}
+
+sub compile {
+    my $order = shift;
+    B::clearsym();
+    $DB::single = 1 if defined &DB::DB;
+    if ($order && $order eq "exec") {
+        return sub { walkoptree_exec(main_start, "debug") }
+    } else {
+        return sub { walkoptree(main_root, "debug") }
+    }
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+B::Debug - Walk Perl syntax tree, printing debug info about ops
+
+=head1 SYNOPSIS
+
+        perl -MO=Debug foo.pl
+        perl -MO=Debug,-exec foo.pl
+
+=head1 DESCRIPTION
+
+See F<ext/B/README> and the newer L<B::Concise>, L<B::Terse>.
+
+=head1 OPTIONS
+
+With option -exec, walks tree in execute order,
+otherwise in basic order.
+
+=head1 AUTHOR
+
+Malcolm Beattie, C<mbeattie@sable.ox.ac.uk>
+Reini Urban C<rurban@cpan.org>
+
+=head1 LICENSE
+
+Copyright (c) 1996, 1997 Malcolm Beattie
+Copyright (c) 2008, 2010, 2013, 2014 Reini Urban
+
+       This program is free software; you can redistribute it and/or modify
+       it under the terms of either:
+
+       a) the GNU General Public License as published by the Free
+       Software Foundation; either version 1, or (at your option) any
+       later version, or
+
+       b) the "Artistic License" which comes with this kit.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See either
+    the GNU General Public License or the Artistic License for more details.
+
+    You should have received a copy of the Artistic License with this kit,
+    in the file named "Artistic".  If not, you can get one from the Perl
+    distribution. You should also have received a copy of the GNU General
+    Public License, in the file named "Copying". If not, you can get one
+    from the Perl distribution or else write to the Free Software Foundation,
+    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+=cut
+
diff --git a/cpan/B-Debug/t/debug.t b/cpan/B-Debug/t/debug.t
new file mode 100644 (file)
index 0000000..0f60b95
--- /dev/null
@@ -0,0 +1,104 @@
+#!./perl
+
+BEGIN {
+    delete $ENV{PERL_DL_NONLAZY} if $] < 5.005_58; #Perl_byterun problem
+    if ($ENV{PERL_CORE}){
+       chdir('t') if -d 't';
+       if ($^O eq 'MacOS') {
+           @INC = qw(: ::lib ::macos:lib);
+       } else {
+           @INC = '.';
+           push @INC, '../lib';
+       }
+    } else {
+       unshift @INC, 't';
+    }
+    require Config;
+    if (($Config::Config{'extensions'} !~ /\bB\b/) ){
+        print "1..0 # Skip -- Perl configured without B module\n";
+        exit 0;
+    }
+}
+
+$|  = 1;
+use warnings;
+use strict;
+use Config;
+use Test::More tests => 11;
+use B;
+use B::Debug;
+use File::Spec;
+
+my $a;
+my $X = $^X =~ m/\s/ ? qq{"$^X"} : $^X;
+
+my $path = join " ", map { qq["-I$_"] } (File::Spec->catfile("blib","lib"), @INC);
+my $redir = $^O =~ /VMS|MSWin32|MacOS/ ? "" : "2>&1";
+
+$a = `$X $path "-MO=Debug" -e 1 $redir`;
+like($a, qr/\bLISTOP\b.*\bOP\b.*\bCOP\b.*\bOP\b/s);
+
+
+$a = `$X $path "-MO=Terse" -e 1 $redir`;
+like($a, qr/\bLISTOP\b.*leave.*\n    OP\b.*enter.*\n    COP\b.*nextstate.*\n    OP\b.*null/s);
+
+$a = `$X $path "-MO=Terse" -ane "s/foo/bar/" $redir`;
+$a =~ s/\(0x[^)]+\)//g;
+$a =~ s/\[[^\]]+\]//g;
+$a =~ s/-e syntax OK//;
+$a =~ s/[^a-z ]+//g;
+$a =~ s/\s+/ /g;
+$a =~ s/\b(s|foo|bar|ullsv)\b\s?//g;
+$a =~ s/^\s+//;
+$a =~ s/\s+$//;
+$a =~ s/\s+nextstate$//; # if $] < 5.008001; # 5.8.0 adds it. 5.8.8 not anymore
+my $is_thread = $Config{use5005threads} && $Config{use5005threads} eq 'define';
+if ($is_thread) {
+    $b=<<EOF;
+leave enter nextstate label leaveloop enterloop null and defined null
+threadsv readline gv lineseq nextstate aassign null pushmark split pushre
+threadsv const null pushmark rvav gv nextstate subst const unstack
+EOF
+} elsif ($] >= 5.021005) {
+  $b=<<EOF;
+leave enter nextstate label leaveloop enterloop null and defined null null
+gvsv readline gv lineseq nextstate split pushre null
+gvsv const nextstate subst const unstack
+EOF
+} else {
+  $b=<<EOF;
+leave enter nextstate label leaveloop enterloop null and defined null null
+gvsv readline gv lineseq nextstate aassign null pushmark split pushre null
+gvsv const null pushmark rvav gv nextstate subst const unstack
+EOF
+}
+$b=~s/\n/ /g; $b=~s/\s+/ /g;
+$b =~ s/\s+$//;
+$b =~ s/split pushre/split/ if $] >= 5.025006;
+
+is($a, $b);
+
+like(B::Debug::_printop(B::main_root),  qr/LISTOP\s+\[OP_LEAVE\]/);
+like(B::Debug::_printop(B::main_start), qr/OP\s+\[OP_ENTER\]/);
+
+$a = `$X $path "-MO=Debug" -e "B::main_root->debug" $redir`;
+like($a, qr/op_next\s+0x0/m);
+$a = `$X $path "-MO=Debug" -e "B::main_start->debug" $redir`;
+like($a, qr/\[OP_ENTER\]/m);
+
+# pass missing FETCHSIZE, fixed with 1.06
+my $e = q(BEGIN{tie @a, __PACKAGE__;sub TIEARRAY {bless{}} sub FETCH{1}};print $a[1]);
+$a = `$X $path "-MO=Debug" -e"$e" $redir`;
+unlike($a, qr/locate object method "FETCHSIZE"/m);
+
+# NV assertion with CV, fixed with 1.13
+my $tmp = "tmp.pl";
+open TMP, ">", $tmp;
+print TMP 'my $p=1;$g=2;sub p($){my $i=1;$i+1};print p(0)+$g;';
+close TMP;
+$a = `$X $path "-MO=Debug" $tmp $redir`;
+ok(! $?);
+unlike($a, qr/assertion "SvTYPE(sv) != SVt_PVCV" failed.*function: S_sv_2iuv_common/m);
+unlike($a, qr/Use of uninitialized value in print/m);
+
+END { unlink $tmp if $tmp; }
index 4401073..681112e 100644 (file)
@@ -1,6 +1,6 @@
 package B::Terse;
 
-our $VERSION = '1.09';
+our $VERSION = '1.08';
 
 use strict;
 use B qw(class @specialsv_name);
@@ -73,7 +73,7 @@ B::Terse - Walk Perl syntax tree, printing terse info about ops
 =head1 DESCRIPTION
 
 This module prints the contents of the parse tree, but without as much
-information as CPAN module B::Debug.  For comparison, C<print "Hello, world.">
+information as L<B::Debug>.  For comparison, C<print "Hello, world.">
 produced 96 lines of output from B::Debug, but only 6 from B::Terse.
 
 This module is useful for people who are writing their own back end,
index 626aa67..7af7848 100644 (file)
@@ -16,6 +16,7 @@
 /AutoSplit.pm
 /B.pm
 /B/Concise.pm
+/B/Debug.pm
 /B/Showlex.pm
 /B/Terse.pm
 /B/Xref.pm
index 41d02b6..784d8b0 100644 (file)
@@ -135,10 +135,6 @@ L<XXX> has been upgraded from version A.xx to B.yy.
 
 =item *
 
-B::Debug has been removed from the core distribution.
-
-=item *
-
 XXX
 
 =back
index cbf84cb..d80c69e 100644 (file)
@@ -965,7 +965,7 @@ subroutine:
 
 We can also dump out this op: the current op is always stored in
 C<PL_op>, and we can dump it with C<Perl_op_dump>.  This'll give us
-similar output to CPAN module B::Debug.
+similar output to L<B::Debug|B::Debug>.
 
     (gdb) print Perl_op_dump(PL_op)
     {
index b90c789..e1af333 100644 (file)
@@ -435,7 +435,7 @@ operations in.
 The easiest way to examine the op tree is to stop Perl after it has
 finished parsing, and get it to dump out the tree. This is exactly what
 the compiler backends L<B::Terse|B::Terse>, L<B::Concise|B::Concise>
-and CPAN module B::Debug do.
+and L<B::Debug|B::Debug> do.
 
 Let's have a look at how Perl sees C<$a = $b + $c>:
 
diff --git a/t/TEST b/t/TEST
index e4ab33b..8509b56 100755 (executable)
--- a/t/TEST
+++ b/t/TEST
@@ -61,7 +61,8 @@ my %abs = (
           '../dist/Tie-File' => 1,
          );
 
-my %temp_no_core = (
+my %temp_no_core =
+    ('../cpan/B-Debug' => 1,
      '../cpan/Compress-Raw-Bzip2' => 1,
      '../cpan/Compress-Raw-Zlib' => 1,
      '../cpan/Devel-PPPort' => 1,