@@ -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' );
}