The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
Changes 06
MANIFEST 01
META.json 3434
META.yml 3434
Makefile.PL 11
bin/pmat-explore-gtk 11
lib/Devel/MAT/Context.pm 44
lib/Devel/MAT/Dumper.pm 221
lib/Devel/MAT/Dumpfile.pm 11
lib/Devel/MAT/SV.pm 3333
lib/Devel/MAT/Tool/Count.pm 11
lib/Devel/MAT/Tool/Inrefs.pm 11
lib/Devel/MAT/Tool/Reachability.pm 11
lib/Devel/MAT/Tool/Sizes.pm 11
lib/Devel/MAT.pm 11
share/icons/type-INVLIST.svg 0377
t/01self.t 33
t/10tool-inrefs.t 44
18 files changed (This is a version diff) 122525
@@ -1,5 +1,11 @@
 Revision history for Devel-MAT
 
+0.19    2014/11/18 13:17:28
+        [CHANGES]
+         * No need to annotate 'directly' or 'indirectly' on outref names
+         * Added -dump_at_DIE option to Devel::MAT::Dumper
+         * Added icon for INVLIST from perl 5.20
+
 0.18    2014/07/14 22:45:08
         [CHANGES]
          * Improved for Tools to create custom UIs
@@ -53,6 +53,7 @@ share/icons/type-CODE.svg
 share/icons/type-FORMAT.svg
 share/icons/type-GLOB.svg
 share/icons/type-HASH.svg
+share/icons/type-INVLIST.svg
 share/icons/type-IO.svg
 share/icons/type-LVALUE.svg
 share/icons/type-PAD.svg
@@ -4,7 +4,7 @@
       "Paul Evans <leonerd@leonerd.org.uk>"
    ],
    "dynamic_config" : 1,
-   "generated_by" : "Module::Build version 0.4205",
+   "generated_by" : "Module::Build version 0.421",
    "license" : [
       "perl_5"
    ],
@@ -36,131 +36,131 @@
    "provides" : {
       "Devel::MAT" : {
          "file" : "lib/Devel/MAT.pm",
-         "version" : "0.18"
+         "version" : "0.19"
       },
       "Devel::MAT::Context" : {
          "file" : "lib/Devel/MAT/Context.pm",
-         "version" : "0.18"
+         "version" : "0.19"
       },
       "Devel::MAT::Context::EVAL" : {
          "file" : "lib/Devel/MAT/Context.pm",
-         "version" : "0.18"
+         "version" : "0.19"
       },
       "Devel::MAT::Context::SUB" : {
          "file" : "lib/Devel/MAT/Context.pm",
-         "version" : "0.18"
+         "version" : "0.19"
       },
       "Devel::MAT::Context::TRY" : {
          "file" : "lib/Devel/MAT/Context.pm",
-         "version" : "0.18"
+         "version" : "0.19"
       },
       "Devel::MAT::Dumper" : {
          "file" : "lib/Devel/MAT/Dumper.pm",
-         "version" : "0.18"
+         "version" : "0.19"
       },
       "Devel::MAT::Dumpfile" : {
          "file" : "lib/Devel/MAT/Dumpfile.pm",
-         "version" : "0.18"
+         "version" : "0.19"
       },
       "Devel::MAT::SV" : {
          "file" : "lib/Devel/MAT/SV.pm",
-         "version" : "0.18"
+         "version" : "0.19"
       },
       "Devel::MAT::SV::ARRAY" : {
          "file" : "lib/Devel/MAT/SV.pm",
-         "version" : "0.18"
+         "version" : "0.19"
       },
       "Devel::MAT::SV::CODE" : {
          "file" : "lib/Devel/MAT/SV.pm",
-         "version" : "0.18"
+         "version" : "0.19"
       },
       "Devel::MAT::SV::FORMAT" : {
          "file" : "lib/Devel/MAT/SV.pm",
-         "version" : "0.18"
+         "version" : "0.19"
       },
       "Devel::MAT::SV::GLOB" : {
          "file" : "lib/Devel/MAT/SV.pm",
-         "version" : "0.18"
+         "version" : "0.19"
       },
       "Devel::MAT::SV::HASH" : {
          "file" : "lib/Devel/MAT/SV.pm",
-         "version" : "0.18"
+         "version" : "0.19"
       },
       "Devel::MAT::SV::INVLIST" : {
          "file" : "lib/Devel/MAT/SV.pm",
-         "version" : "0.18"
+         "version" : "0.19"
       },
       "Devel::MAT::SV::IO" : {
          "file" : "lib/Devel/MAT/SV.pm",
-         "version" : "0.18"
+         "version" : "0.19"
       },
       "Devel::MAT::SV::Immortal" : {
          "file" : "lib/Devel/MAT/SV.pm",
-         "version" : "0.18"
+         "version" : "0.19"
       },
       "Devel::MAT::SV::LVALUE" : {
          "file" : "lib/Devel/MAT/SV.pm",
-         "version" : "0.18"
+         "version" : "0.19"
       },
       "Devel::MAT::SV::NO" : {
          "file" : "lib/Devel/MAT/SV.pm",
-         "version" : "0.18"
+         "version" : "0.19"
       },
       "Devel::MAT::SV::PAD" : {
          "file" : "lib/Devel/MAT/SV.pm",
-         "version" : "0.18"
+         "version" : "0.19"
       },
       "Devel::MAT::SV::PADLIST" : {
          "file" : "lib/Devel/MAT/SV.pm",
-         "version" : "0.18"
+         "version" : "0.19"
       },
       "Devel::MAT::SV::PADNAMES" : {
          "file" : "lib/Devel/MAT/SV.pm",
-         "version" : "0.18"
+         "version" : "0.19"
       },
       "Devel::MAT::SV::REF" : {
          "file" : "lib/Devel/MAT/SV.pm",
-         "version" : "0.18"
+         "version" : "0.19"
       },
       "Devel::MAT::SV::REGEXP" : {
          "file" : "lib/Devel/MAT/SV.pm",
-         "version" : "0.18"
+         "version" : "0.19"
       },
       "Devel::MAT::SV::SCALAR" : {
          "file" : "lib/Devel/MAT/SV.pm",
-         "version" : "0.18"
+         "version" : "0.19"
       },
       "Devel::MAT::SV::STASH" : {
          "file" : "lib/Devel/MAT/SV.pm",
-         "version" : "0.18"
+         "version" : "0.19"
       },
       "Devel::MAT::SV::UNDEF" : {
          "file" : "lib/Devel/MAT/SV.pm",
-         "version" : "0.18"
+         "version" : "0.19"
       },
       "Devel::MAT::SV::Unknown" : {
          "file" : "lib/Devel/MAT/SV.pm",
-         "version" : "0.18"
+         "version" : "0.19"
       },
       "Devel::MAT::SV::YES" : {
          "file" : "lib/Devel/MAT/SV.pm",
-         "version" : "0.18"
+         "version" : "0.19"
       },
       "Devel::MAT::Tool::Count" : {
          "file" : "lib/Devel/MAT/Tool/Count.pm",
-         "version" : "0.18"
+         "version" : "0.19"
       },
       "Devel::MAT::Tool::Inrefs" : {
          "file" : "lib/Devel/MAT/Tool/Inrefs.pm",
-         "version" : "0.18"
+         "version" : "0.19"
       },
       "Devel::MAT::Tool::Reachability" : {
          "file" : "lib/Devel/MAT/Tool/Reachability.pm",
-         "version" : "0.18"
+         "version" : "0.19"
       },
       "Devel::MAT::Tool::Sizes" : {
          "file" : "lib/Devel/MAT/Tool/Sizes.pm",
-         "version" : "0.18"
+         "version" : "0.19"
       }
    },
    "release_status" : "stable",
@@ -169,5 +169,5 @@
          "http://dev.perl.org/licenses/"
       ]
    },
-   "version" : "0.18"
+   "version" : "0.19"
 }
@@ -7,7 +7,7 @@ build_requires:
   Test::Identity: '0'
   Test::More: '0.88'
 dynamic_config: 1
-generated_by: 'Module::Build version 0.4205, CPAN::Meta::Converter version 2.133380'
+generated_by: 'Module::Build version 0.421, CPAN::Meta::Converter version 2.142690'
 license: perl
 meta-spec:
   url: http://module-build.sourceforge.net/META-spec-v1.4.html
@@ -16,100 +16,100 @@ name: Devel-MAT
 provides:
   Devel::MAT:
     file: lib/Devel/MAT.pm
-    version: '0.18'
+    version: '0.19'
   Devel::MAT::Context:
     file: lib/Devel/MAT/Context.pm
-    version: '0.18'
+    version: '0.19'
   Devel::MAT::Context::EVAL:
     file: lib/Devel/MAT/Context.pm
-    version: '0.18'
+    version: '0.19'
   Devel::MAT::Context::SUB:
     file: lib/Devel/MAT/Context.pm
-    version: '0.18'
+    version: '0.19'
   Devel::MAT::Context::TRY:
     file: lib/Devel/MAT/Context.pm
-    version: '0.18'
+    version: '0.19'
   Devel::MAT::Dumper:
     file: lib/Devel/MAT/Dumper.pm
-    version: '0.18'
+    version: '0.19'
   Devel::MAT::Dumpfile:
     file: lib/Devel/MAT/Dumpfile.pm
-    version: '0.18'
+    version: '0.19'
   Devel::MAT::SV:
     file: lib/Devel/MAT/SV.pm
-    version: '0.18'
+    version: '0.19'
   Devel::MAT::SV::ARRAY:
     file: lib/Devel/MAT/SV.pm
-    version: '0.18'
+    version: '0.19'
   Devel::MAT::SV::CODE:
     file: lib/Devel/MAT/SV.pm
-    version: '0.18'
+    version: '0.19'
   Devel::MAT::SV::FORMAT:
     file: lib/Devel/MAT/SV.pm
-    version: '0.18'
+    version: '0.19'
   Devel::MAT::SV::GLOB:
     file: lib/Devel/MAT/SV.pm
-    version: '0.18'
+    version: '0.19'
   Devel::MAT::SV::HASH:
     file: lib/Devel/MAT/SV.pm
-    version: '0.18'
+    version: '0.19'
   Devel::MAT::SV::INVLIST:
     file: lib/Devel/MAT/SV.pm
-    version: '0.18'
+    version: '0.19'
   Devel::MAT::SV::IO:
     file: lib/Devel/MAT/SV.pm
-    version: '0.18'
+    version: '0.19'
   Devel::MAT::SV::Immortal:
     file: lib/Devel/MAT/SV.pm
-    version: '0.18'
+    version: '0.19'
   Devel::MAT::SV::LVALUE:
     file: lib/Devel/MAT/SV.pm
-    version: '0.18'
+    version: '0.19'
   Devel::MAT::SV::NO:
     file: lib/Devel/MAT/SV.pm
-    version: '0.18'
+    version: '0.19'
   Devel::MAT::SV::PAD:
     file: lib/Devel/MAT/SV.pm
-    version: '0.18'
+    version: '0.19'
   Devel::MAT::SV::PADLIST:
     file: lib/Devel/MAT/SV.pm
-    version: '0.18'
+    version: '0.19'
   Devel::MAT::SV::PADNAMES:
     file: lib/Devel/MAT/SV.pm
-    version: '0.18'
+    version: '0.19'
   Devel::MAT::SV::REF:
     file: lib/Devel/MAT/SV.pm
-    version: '0.18'
+    version: '0.19'
   Devel::MAT::SV::REGEXP:
     file: lib/Devel/MAT/SV.pm
-    version: '0.18'
+    version: '0.19'
   Devel::MAT::SV::SCALAR:
     file: lib/Devel/MAT/SV.pm
-    version: '0.18'
+    version: '0.19'
   Devel::MAT::SV::STASH:
     file: lib/Devel/MAT/SV.pm
-    version: '0.18'
+    version: '0.19'
   Devel::MAT::SV::UNDEF:
     file: lib/Devel/MAT/SV.pm
-    version: '0.18'
+    version: '0.19'
   Devel::MAT::SV::Unknown:
     file: lib/Devel/MAT/SV.pm
-    version: '0.18'
+    version: '0.19'
   Devel::MAT::SV::YES:
     file: lib/Devel/MAT/SV.pm
-    version: '0.18'
+    version: '0.19'
   Devel::MAT::Tool::Count:
     file: lib/Devel/MAT/Tool/Count.pm
-    version: '0.18'
+    version: '0.19'
   Devel::MAT::Tool::Inrefs:
     file: lib/Devel/MAT/Tool/Inrefs.pm
-    version: '0.18'
+    version: '0.19'
   Devel::MAT::Tool::Reachability:
     file: lib/Devel/MAT/Tool/Reachability.pm
-    version: '0.18'
+    version: '0.19'
   Devel::MAT::Tool::Sizes:
     file: lib/Devel/MAT/Tool/Sizes.pm
-    version: '0.18'
+    version: '0.19'
 requires:
   File::ShareDir: '1.00'
   List::MoreUtils: '0'
@@ -120,4 +120,4 @@ requires:
   perl: '5.010'
 resources:
   license: http://dev.perl.org/licenses/
-version: '0.18'
+version: '0.19'
@@ -1,4 +1,4 @@
-# Note: this file was auto-generated by Module::Build::Compat version 0.4205
+# Note: this file was auto-generated by Module::Build::Compat version 0.4210
 require 5.010;
     use Module::Build::Compat 0.02;
     
@@ -23,7 +23,7 @@ my $df;
 my %ICONS;        # {$name} = $pixbuf
 my %TYPES_LARGE;  # {$type} = $pixbuf
 
-foreach (qw( SCALAR REF ARRAY HASH CODE GLOB STASH LVALUE REGEXP IO FORMAT PADLIST PADNAMES PAD )) {
+foreach (qw( SCALAR REF ARRAY HASH CODE GLOB STASH LVALUE REGEXP IO FORMAT PADLIST PADNAMES PAD INVLIST )) {
    Devel::MAT::UI->register_icon( name => "type-$_", svg => "icons/type-$_.svg" );
 
    $TYPES_LARGE{$_} = Gtk2::Gdk::Pixbuf->new_from_file_at_size(
@@ -8,7 +8,7 @@ package Devel::MAT::Context;
 use strict;
 use warnings;
 
-our $VERSION = '0.18';
+our $VERSION = '0.19';
 
 use Carp;
 use Scalar::Util qw( weaken );
@@ -101,7 +101,7 @@ sub location
 
 package Devel::MAT::Context::SUB;
 use base qw( Devel::MAT::Context );
-our $VERSION = '0.18';
+our $VERSION = '0.19';
 __PACKAGE__->register_type( 1 );
 
 =head1 Devel::MAT::Context::SUB
@@ -134,7 +134,7 @@ sub args { my $self = shift; return $self->{df}->sv_at( $self->{args_at} ) }
 
 package Devel::MAT::Context::TRY;
 use base qw( Devel::MAT::Context );
-our $VERSION = '0.18';
+our $VERSION = '0.19';
 __PACKAGE__->register_type( 2 );
 
 =head1 Devel::MAT::Context::TRY
@@ -147,7 +147,7 @@ sub _load {}
 
 package Devel::MAT::Context::EVAL;
 use base qw( Devel::MAT::Context );
-our $VERSION = '0.18';
+our $VERSION = '0.19';
 __PACKAGE__->register_type( 3 );
 
 =head1 Devel::MAT::Context::EVAL
@@ -8,7 +8,7 @@ package Devel::MAT::Dumper;
 use strict;
 use warnings;
 
-our $VERSION = '0.18';
+our $VERSION = '0.19';
 
 use File::Basename qw( basename );
 
@@ -44,6 +44,14 @@ loaded and analysed by various tools using C<Devel::MAT::Dumpfile>.
 The following C<import> options control the behaviour of the module. They may
 primarily be useful when used in the C<-M> perl option:
 
+=head2 -dump_at_DIE
+
+Installs a handler for the special C<__DIE__> signal to write a dump file when
+C<die()> is about to cause a fatal signal. This is more reliable at catching
+the callstack and memory state than using an C<END> block.
+
+ $ perl -MDevel::MAT::Dumper=-dump_at_DIE ...
+
 =head2 -dump_at_END
 
 Installs an C<END> block which writes a dump file at C<END> time, just before
@@ -117,7 +125,18 @@ sub import
    while( @_ ) {
       my $sym = shift;
 
-      if( $sym eq "-dump_at_END" ) {
+      if( $sym eq "-dump_at_DIE" ) {
+         my $old_DIE = $SIG{__DIE__};
+         $SIG{__DIE__} = sub {
+            local $SIG{__DIE__} = $old_DIE if defined $old_DIE;
+            die @_ if $^S;
+
+            print STDERR "Dumping to $dumpfile_name because of DIE\n";
+            Devel::MAT::Dumper::dump( $dumpfile_name );
+            die @_;
+         };
+      }
+      elsif( $sym eq "-dump_at_END" ) {
          $dump_at_END++;
       }
       elsif( $sym eq "-dump_at_SIGABRT" ) {
@@ -8,7 +8,7 @@ package Devel::MAT::Dumpfile;
 use strict;
 use warnings;
 
-our $VERSION = '0.18';
+our $VERSION = '0.19';
 
 use Carp;
 use IO::Handle;   # ->read
@@ -10,7 +10,7 @@ use warnings;
 use feature qw( switch );
 no if $] >= 5.017011, warnings => 'experimental::smartmatch';
 
-our $VERSION = '0.18';
+our $VERSION = '0.19';
 
 use Carp;
 use Scalar::Util qw( weaken );
@@ -40,22 +40,22 @@ are documented below.
 my $direct_or_rv = sub {
    my ( $name, $sv ) = @_;
    if( defined $sv and $sv->type eq "REF" and !$sv->{magic} ) {
-      return ( "+$name directly" => $sv,
+      return ( "+$name" => $sv,
                ";$name via RV" => $sv->rv );
    }
    else {
-      return ( "+$name directly" => $sv );
+      return ( "+$name" => $sv );
    }
 };
 
 my $indirect_or_rv = sub {
    my ( $name, $sv ) = @_;
    if( defined $sv and $sv->type eq "REF" and !$sv->{magic} ) {
-      return ( ";$name indirectly" => $sv,
+      return ( ";$name" => $sv,
                ";$name via RV" => $sv->rv );
    }
    else {
-      return ( ";$name indirectly" => $sv );
+      return ( ";$name" => $sv );
    }
 };
 
@@ -332,7 +332,7 @@ boolean true and false. They are
 
 package Devel::MAT::SV::Immortal;
 use base qw( Devel::MAT::SV );
-our $VERSION = '0.18';
+our $VERSION = '0.19';
 use constant immortal => 1;
 sub new {
    my $class = shift;
@@ -345,13 +345,13 @@ sub _outrefs { () }
 
 package Devel::MAT::SV::UNDEF;
 use base qw( Devel::MAT::SV::Immortal );
-our $VERSION = '0.18';
+our $VERSION = '0.19';
 sub desc { "UNDEF" }
 sub type { "UNDEF" }
 
 package Devel::MAT::SV::YES;
 use base qw( Devel::MAT::SV::Immortal );
-our $VERSION = '0.18';
+our $VERSION = '0.19';
 sub desc { "YES" }
 sub type { "SCALAR" }
 
@@ -366,7 +366,7 @@ sub name {}
 
 package Devel::MAT::SV::NO;
 use base qw( Devel::MAT::SV::Immortal );
-our $VERSION = '0.18';
+our $VERSION = '0.19';
 sub desc { "NO" }
 sub type { "SCALAR" }
 
@@ -381,7 +381,7 @@ sub name {}
 
 package Devel::MAT::SV::Unknown;
 use base qw( Devel::MAT::SV );
-our $VERSION = '0.18';
+our $VERSION = '0.19';
 __PACKAGE__->register_type( 0xff );
 
 sub desc { "UNKNOWN" }
@@ -390,7 +390,7 @@ sub _outrefs {}
 
 package Devel::MAT::SV::GLOB;
 use base qw( Devel::MAT::SV );
-our $VERSION = '0.18';
+our $VERSION = '0.19';
 __PACKAGE__->register_type( 1 );
 
 =head1 Devel::MAT::SV::GLOB
@@ -521,7 +521,7 @@ sub _outrefs
 
 package Devel::MAT::SV::SCALAR;
 use base qw( Devel::MAT::SV );
-our $VERSION = '0.18';
+our $VERSION = '0.19';
 __PACKAGE__->register_type( 2 );
 
 =head1 Devel::MAT::SV::SCALAR
@@ -651,7 +651,7 @@ sub _outrefs
 
 package Devel::MAT::SV::REF;
 use base qw( Devel::MAT::SV );
-our $VERSION = '0.18';
+our $VERSION = '0.19';
 __PACKAGE__->register_type( 3 );
 
 =head1 Devel::MAT::SV::REF
@@ -722,7 +722,7 @@ sub _outrefs
 
 package Devel::MAT::SV::ARRAY;
 use base qw( Devel::MAT::SV );
-our $VERSION = '0.18';
+our $VERSION = '0.19';
 __PACKAGE__->register_type( 4 );
 
 =head1 Devel::MAT::SV::ARRAY
@@ -822,7 +822,7 @@ sub _outrefs
 
    if( $self->is_unreal ) {
       return map {
-         +"-element [$_] directly" => $df->sv_at( $self->elem_at( $_ ) ),
+         +"-element [$_]" => $df->sv_at( $self->elem_at( $_ ) ),
       } 0 .. $n-1;
    }
 
@@ -834,7 +834,7 @@ sub _outrefs
 package Devel::MAT::SV::PADLIST;
 # Synthetic type
 use base qw( Devel::MAT::SV::ARRAY );
-our $VERSION = '0.18';
+our $VERSION = '0.19';
 use constant type => "PADLIST";
 
 =head1 Devel::MAT::SV::PADLIST
@@ -860,9 +860,9 @@ sub _outrefs
    my $n = $self->n_elems;
 
    return (
-      "+the padnames directly" => $df->sv_at( $self->elem_at( 0 ) ),
+      "+the padnames" => $df->sv_at( $self->elem_at( 0 ) ),
 
-      map { +"+pad at depth $_ directly" => $df->sv_at( $self->elem_at( $_ ) ) }
+      map { +"+pad at depth $_" => $df->sv_at( $self->elem_at( $_ ) ) }
          1 .. $n-1
    );
 }
@@ -870,7 +870,7 @@ sub _outrefs
 package Devel::MAT::SV::PADNAMES;
 # Synthetic type
 use base qw( Devel::MAT::SV::ARRAY );
-our $VERSION = '0.18';
+our $VERSION = '0.19';
 use constant type => "PADNAMES";
 
 =head1 Devel::MAT::SV::PADNAMES
@@ -921,7 +921,7 @@ sub _outrefs
 package Devel::MAT::SV::PAD;
 # Synthetic type
 use base qw( Devel::MAT::SV::ARRAY );
-our $VERSION = '0.18';
+our $VERSION = '0.19';
 use constant type => "PAD";
 
 use List::Util qw( pairmap );
@@ -979,7 +979,7 @@ sub _outrefs
 
 package Devel::MAT::SV::HASH;
 use base qw( Devel::MAT::SV );
-our $VERSION = '0.18';
+our $VERSION = '0.19';
 __PACKAGE__->register_type( 5 );
 
 =head1 Devel::MAT::SV::HASH
@@ -1091,7 +1091,7 @@ sub _outrefs
       # in the backrefs slot directly
       ( $self->backrefs && $self->backrefs->type eq "ARRAY" ) ?
          ( "+the backrefs list" => $self->backrefs,
-           map { +";a backref indirectly" => $_ } $self->backrefs->elems ) :
+           map { +";a backref" => $_ } $self->backrefs->elems ) :
          ( "-a backref" => $self->backrefs ),
 
       map {
@@ -1102,7 +1102,7 @@ sub _outrefs
 
 package Devel::MAT::SV::STASH;
 use base qw( Devel::MAT::SV::HASH );
-our $VERSION = '0.18';
+our $VERSION = '0.19';
 __PACKAGE__->register_type( 6 );
 
 =head1 Devel::MAT::SV::STASH
@@ -1182,7 +1182,7 @@ sub _outrefs
 
 package Devel::MAT::SV::CODE;
 use base qw( Devel::MAT::SV );
-our $VERSION = '0.18';
+our $VERSION = '0.19';
 __PACKAGE__->register_type( 7 );
 
 use List::MoreUtils qw( uniq );
@@ -1472,10 +1472,10 @@ sub _outrefs
    my $padlist = $self->padlist;
 
    # If we have a PADLIST then its contents are indirect; if not then they are direct strong
-   my $padnames_desc = $padlist ? ";the padnames indirectly"
-                                : "+the padnames directly";
-   my $pad_descf     = $padlist ? ";pad at depth %d indirectly"
-                                : "+pad at depth %d directly";
+   my $padnames_desc = $padlist ? ";the padnames"
+                                : "+the padnames";
+   my $pad_descf     = $padlist ? ";pad at depth %d"
+                                : "+pad at depth %d";
 
    return (
       ( $self->is_weakoutside ? "-the scope" : "+the scope" ) =>
@@ -1504,7 +1504,7 @@ sub _outrefs
 
 package Devel::MAT::SV::IO;
 use base qw( Devel::MAT::SV );
-our $VERSION = '0.18';
+our $VERSION = '0.19';
 __PACKAGE__->register_type( 8 );
 
 sub load
@@ -1534,7 +1534,7 @@ sub _outrefs
 
 package Devel::MAT::SV::LVALUE;
 use base qw( Devel::MAT::SV );
-our $VERSION = '0.18';
+our $VERSION = '0.19';
 __PACKAGE__->register_type( 9 );
 
 sub load
@@ -1567,7 +1567,7 @@ sub _outrefs
 
 package Devel::MAT::SV::REGEXP;
 use base qw( Devel::MAT::SV );
-our $VERSION = '0.18';
+our $VERSION = '0.19';
 __PACKAGE__->register_type( 10 );
 
 sub load {}
@@ -1578,7 +1578,7 @@ sub _outrefs { () }
 
 package Devel::MAT::SV::FORMAT;
 use base qw( Devel::MAT::SV );
-our $VERSION = '0.18';
+our $VERSION = '0.19';
 __PACKAGE__->register_type( 11 );
 
 sub load {}
@@ -1589,7 +1589,7 @@ sub _outrefs { () }
 
 package Devel::MAT::SV::INVLIST;
 use base qw( Devel::MAT::SV );
-our $VERSION = '0.18';
+our $VERSION = '0.19';
 __PACKAGE__->register_type( 12 );
 
 sub load {}
@@ -8,7 +8,7 @@ package Devel::MAT::Tool::Count;
 use strict;
 use warnings;
 
-our $VERSION = '0.18';
+our $VERSION = '0.19';
 
 =head1 NAME
 
@@ -8,7 +8,7 @@ package Devel::MAT::Tool::Inrefs;
 use strict;
 use warnings;
 
-our $VERSION = '0.18';
+our $VERSION = '0.19';
 
 use List::Util qw( pairmap pairs );
 
@@ -10,7 +10,7 @@ use warnings;
 use feature qw( switch );
 no if $] >= 5.017011, warnings => 'experimental::smartmatch';
 
-our $VERSION = '0.18';
+our $VERSION = '0.19';
 
 use constant FOR_UI => 1;
 
@@ -8,7 +8,7 @@ package Devel::MAT::Tool::Sizes;
 use strict;
 use warnings;
 
-our $VERSION = '0.18';
+our $VERSION = '0.19';
 
 use constant FOR_UI => 1;
 
@@ -8,7 +8,7 @@ package Devel::MAT;
 use strict;
 use warnings;
 
-our $VERSION = '0.18';
+our $VERSION = '0.19';
 
 use Carp;
 use List::Util qw( pairs );
@@ -0,0 +1,377 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="20"
+   height="20"
+   id="svg2985"
+   version="1.1"
+   inkscape:version="0.48.5 r10040"
+   sodipodi:docname="type-INVLIST.svg">
+  <defs
+     id="defs2987">
+    <linearGradient
+       id="linearGradient3775">
+      <stop
+         style="stop-color:#d3f4ff;stop-opacity:1;"
+         offset="0"
+         id="stop3777" />
+      <stop
+         style="stop-color:#d3f4ff;stop-opacity:0.28947368;"
+         offset="1"
+         id="stop3779" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3765">
+      <stop
+         style="stop-color:#ffb1ee;stop-opacity:1;"
+         offset="0"
+         id="stop3767" />
+      <stop
+         style="stop-color:#ff0bc8;stop-opacity:1;"
+         offset="1"
+         id="stop3769" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3765"
+       id="linearGradient3771"
+       x1="3.5"
+       y1="1"
+       x2="12.5"
+       y2="15"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.78947372,0,0,1.1818183,4.4881449,0.11255639)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3775"
+       id="linearGradient3781"
+       x1="3.5"
+       y1="2"
+       x2="11.5"
+       y2="14"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3765-7"
+       id="linearGradient3771-8"
+       x1="3.5"
+       y1="1"
+       x2="12.5"
+       y2="15"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.1818182,4.0183169,0.11255632)" />
+    <linearGradient
+       id="linearGradient3765-7">
+      <stop
+         style="stop-color:#c1efff;stop-opacity:1;"
+         offset="0"
+         id="stop3767-3" />
+      <stop
+         style="stop-color:#0087b4;stop-opacity:1;"
+         offset="1"
+         id="stop3769-8" />
+    </linearGradient>
+    <linearGradient
+       y2="15"
+       x2="12.5"
+       y1="1"
+       x1="3.5"
+       gradientTransform="translate(3.0183169,0.0183169)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3800"
+       xlink:href="#linearGradient3765-7"
+       inkscape:collect="always" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3765-7"
+       id="linearGradient4385"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.1818182,2.0183169,0.11255632)"
+       x1="3.5"
+       y1="1"
+       x2="12.5"
+       y2="15" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3765-7-2"
+       id="linearGradient4385-0"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(4.0183169,1.0183169)"
+       x1="3.5"
+       y1="1"
+       x2="12.5"
+       y2="15" />
+    <linearGradient
+       id="linearGradient3765-7-2">
+      <stop
+         style="stop-color:#c1efff;stop-opacity:1;"
+         offset="0"
+         id="stop3767-3-3" />
+      <stop
+         style="stop-color:#0087b4;stop-opacity:1;"
+         offset="1"
+         id="stop3769-8-6" />
+    </linearGradient>
+    <linearGradient
+       y2="15"
+       x2="12.5"
+       y1="1"
+       x1="3.5"
+       gradientTransform="matrix(1,0,0,1.1818182,-0.9816831,0.11255617)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3026"
+       xlink:href="#linearGradient3765-7-2"
+       inkscape:collect="always" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3765-7-5"
+       id="linearGradient4385-4"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(4.0183169,1.0183169)"
+       x1="3.5"
+       y1="1"
+       x2="12.5"
+       y2="15" />
+    <linearGradient
+       id="linearGradient3765-7-5">
+      <stop
+         style="stop-color:#c1efff;stop-opacity:1;"
+         offset="0"
+         id="stop3767-3-2" />
+      <stop
+         style="stop-color:#0087b4;stop-opacity:1;"
+         offset="1"
+         id="stop3769-8-2" />
+    </linearGradient>
+    <linearGradient
+       y2="15"
+       x2="12.5"
+       y1="1"
+       x1="3.5"
+       gradientTransform="matrix(1,0,0,1.1818182,14.018317,0.11255628)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3026-1"
+       xlink:href="#linearGradient3765-7-5"
+       inkscape:collect="always" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3765-7-1"
+       id="linearGradient3771-8-6"
+       x1="3.5"
+       y1="1"
+       x2="12.5"
+       y2="15"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.1818182,4.0183169,0.11255632)" />
+    <linearGradient
+       id="linearGradient3765-7-1">
+      <stop
+         style="stop-color:#c1efff;stop-opacity:1;"
+         offset="0"
+         id="stop3767-3-36" />
+      <stop
+         style="stop-color:#0087b4;stop-opacity:1;"
+         offset="1"
+         id="stop3769-8-8" />
+    </linearGradient>
+    <linearGradient
+       y2="15"
+       x2="12.5"
+       y1="1"
+       x1="3.5"
+       gradientTransform="matrix(1,0,0,1.1818182,1.0183169,0.1125563)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient5129"
+       xlink:href="#linearGradient3765-7-1"
+       inkscape:collect="always" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3765-7-6"
+       id="linearGradient3771-8-7"
+       x1="3.5"
+       y1="1"
+       x2="12.5"
+       y2="15"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.1818182,4.0183169,0.11255632)" />
+    <linearGradient
+       id="linearGradient3765-7-6">
+      <stop
+         style="stop-color:#c1efff;stop-opacity:1;"
+         offset="0"
+         id="stop3767-3-4" />
+      <stop
+         style="stop-color:#0087b4;stop-opacity:1;"
+         offset="1"
+         id="stop3769-8-69" />
+    </linearGradient>
+    <linearGradient
+       y2="15"
+       x2="12.5"
+       y1="1"
+       x1="3.5"
+       gradientTransform="matrix(1,0,0,1.1818182,-1.9816831,0.1125563)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient5129-2"
+       xlink:href="#linearGradient3765-7-6"
+       inkscape:collect="always" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="45.254834"
+     inkscape:cx="9.9360479"
+     inkscape:cy="9.6986322"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1859"
+     inkscape:window-height="1151"
+     inkscape:window-x="1404"
+     inkscape:window-y="10"
+     inkscape:window-maximized="0">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2993"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true"
+       spacingx="0.5px"
+       spacingy="0.5px" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata2990">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     transform="translate(0,4)">
+    <rect
+       style="fill:url(#linearGradient3771);fill-opacity:1;stroke:#a60083;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect2995"
+       width="15"
+       height="13"
+       x="2.5"
+       y="-0.5" />
+    <path
+       style="color:#000000;fill:url(#linearGradient4385);fill-opacity:1;fill-rule:nonzero;stroke:#a60083;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="m 5.5,-0.5 0,13"
+       id="path3781"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="color:#000000;fill:url(#linearGradient3771-8);fill-opacity:1;fill-rule:nonzero;stroke:#a60083;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="m 14.5,-0.5 0,13"
+       id="path3783"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="color:#000000;fill:url(#linearGradient5129);fill-opacity:1;fill-rule:nonzero;stroke:#a60083;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="m 11.5,-0.5 0,13"
+       id="path3783-7"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="color:#000000;fill:url(#linearGradient5129-2);fill-opacity:1;fill-rule:nonzero;stroke:#a60083;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="m 8.5,-0.5 0,13"
+       id="path3783-6"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <rect
+       style="color:#000000;fill:#d45500;fill-opacity:1;fill-rule:nonzero;stroke:#3c3c3c;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect5185"
+       width="1"
+       height="1"
+       x="3.5"
+       y="4.5"
+       transform="translate(0,-4)" />
+    <rect
+       style="color:#000000;fill:#d45500;fill-opacity:1;fill-rule:nonzero;stroke:#3c3c3c;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect5185-9"
+       width="1"
+       height="1"
+       x="3.5"
+       y="6.5" />
+    <rect
+       style="color:#000000;fill:#d45500;fill-opacity:1;fill-rule:nonzero;stroke:#3c3c3c;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect5185-6"
+       width="1"
+       height="1"
+       x="6.5"
+       y="4.5" />
+    <rect
+       style="color:#000000;fill:#d45500;fill-opacity:1;fill-rule:nonzero;stroke:#3c3c3c;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect5185-3"
+       width="1"
+       height="1"
+       x="6.5"
+       y="10.5" />
+    <rect
+       style="color:#000000;fill:#d45500;fill-opacity:1;fill-rule:nonzero;stroke:#3c3c3c;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect5185-2"
+       width="1"
+       height="1"
+       x="9.5"
+       y="2.5" />
+    <rect
+       style="color:#000000;fill:#d45500;fill-opacity:1;fill-rule:nonzero;stroke:#3c3c3c;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect5185-4"
+       width="1"
+       height="1"
+       x="9.5"
+       y="8.5" />
+    <rect
+       style="color:#000000;fill:#d45500;fill-opacity:1;fill-rule:nonzero;stroke:#3c3c3c;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect5185-65"
+       width="1"
+       height="1"
+       x="12.5"
+       y="6.5" />
+    <rect
+       style="color:#000000;fill:#d45500;fill-opacity:1;fill-rule:nonzero;stroke:#3c3c3c;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect5185-7"
+       width="1"
+       height="1"
+       x="12.5"
+       y="0.5" />
+    <rect
+       style="color:#000000;fill:#d45500;fill-opacity:1;fill-rule:nonzero;stroke:#3c3c3c;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect5185-0"
+       width="1"
+       height="1"
+       x="15.5"
+       y="4.5" />
+    <rect
+       style="color:#000000;fill:#d45500;fill-opacity:1;fill-rule:nonzero;stroke:#3c3c3c;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect5185-64"
+       width="1"
+       height="1"
+       x="15.5"
+       y="10.5" />
+  </g>
+</svg>
@@ -102,9 +102,9 @@ BEGIN { our @AofA = ( [] ); }
 
    my @outrefs_direct = $av->outrefs_direct;
    is( scalar @outrefs_direct, 1, '$av->outrefs_direct is 1' );
-   is( $outrefs_direct[0]->sv,       $rv,                    'AV outref[0] SV is $rv' );
-   is( $outrefs_direct[0]->strength, "strong",               'AV outref[0] strength is strong' );
-   is( $outrefs_direct[0]->name,     "element [0] directly", 'AV outref[0] name' );
+   is( $outrefs_direct[0]->sv,       $rv,           'AV outref[0] SV is $rv' );
+   is( $outrefs_direct[0]->strength, "strong",      'AV outref[0] strength is strong' );
+   is( $outrefs_direct[0]->name,     "element [0]", 'AV outref[0] name' );
 
    my @outrefs_indirect = $av->outrefs_indirect;
    is( scalar @outrefs_indirect, 1, '$av->outrefs_indirect is 1' );
@@ -58,7 +58,7 @@ BEGIN { our @AofA = ( [] ); }
    } @pvs;
 
    my ( $lexical ) = grep {
-      grep { $_->name eq 'the lexical $DUMPFILE directly' } $_->inrefs
+      grep { $_->name eq 'the lexical $DUMPFILE' } $_->inrefs
    } @pvs;
 
    ok( scalar @constants, 'Found some constants' );
@@ -71,14 +71,14 @@ BEGIN { our $PACKAGE_SCALAR = "some value" }
 
    is_deeply( [ map { s/$ADDR/ADDR/g; s/\d+/NNN/g; $_ } $pmat->identify( $sv ) ],
               [ "the scalar of GLOB(\$*) at ADDR, which is:",
-                "  a backref indirectly of STASH(NNN) at ADDR, which is:",
+                "  a backref of STASH(NNN) at ADDR, which is:",
                 "    the default stash",
-                "  element [NNN] directly of ARRAY(NNN,!REAL) at ADDR, which is:",
+                "  element [NNN] of ARRAY(NNN,!REAL) at ADDR, which is:",
                 "    the backrefs list of STASH(NNN) at ADDR, which is:",
                 "      already found",
                 "  the egv of GLOB(\$*) at ADDR, which is:",
                 "    itself",
-                "  value {PACKAGE_SCALAR} directly of STASH(NNN) at ADDR, which is:",
+                "  value {PACKAGE_SCALAR} of STASH(NNN) at ADDR, which is:",
                 "    already found" ],
               '$pmat can identify PACKAGE_SCALAR SV' );
 }