#
#
# To apply this patch:
# STEP 1: Chdir to the source directory.
# STEP 2: Run the 'applypatch' program with this patch file as input.
#
# If you do not have 'applypatch', it is part of the 'makepatch' package
# that you can fetch from the Comprehensive Perl Archive Network:
#
http://www.perl.com/CPAN/authors/Johan_Vromans/makepatch-x.y.tar.gz
# In the above URL, 'x' should be 2 or higher.
#
# To apply this patch without the use of 'applypatch':
# STEP 1: Chdir to the source directory.
# STEP 2: Run the 'patch' program with this file as input.
#
#### End of Preamble ####
#### Patch data follows ####
diff -up 'build/Devel-Cycle-1.09-DSMJ9Q/lib/Devel/Cycle.pm' 'new.build/Devel-Cycle-1.09/lib/Devel/Cycle.pm'
Index: ./lib/Devel/Cycle.pm
Prereq: 1.12
--- ./lib/Devel/Cycle.pm Mon Apr 14 19:01:37 2008
+++ ./lib/Devel/Cycle.pm Tue Jul 8 15:51:39 2008
@@ -6,7 +6,7 @@ use strict;
use Carp 'croak','carp';
use warnings;
-use Scalar::Util qw(isweak blessed refaddr);
+use Scalar::Util qw(isweak blessed refaddr reftype);
my $SHORT_NAME = 'A';
my %SHORT_NAMES;
@@ -100,9 +100,15 @@ sub _find_cycle {
sub _find_cycle_dispatch {
my $type = _get_type($_[0]);
+ if (!defined $type) {
+ my $ref = reftype $_[0];
+ our %already_warned;
+ if (!$already_warned{$ref}++) {
+ warn "Unhandled type: $ref";
+ }
+ return;
+ }
my $sub = do { no strict 'refs'; \&{"_find_cycle_$type"} };
- die "Invalid type: $type" unless $sub;
-
$sub->(@_);
}
@@ -213,6 +219,7 @@ sub _get_type {
return 'ARRAY' if UNIVERSAL::isa($thingy,'ARRAY');
return 'HASH' if UNIVERSAL::isa($thingy,'HASH');
return 'CODE' if UNIVERSAL::isa($thingy,'CODE');
+ undef;
}
sub _format_index {
diff -up 'build/Devel-Cycle-1.09-DSMJ9Q/t/Devel-Cycle.t' 'new.build/Devel-Cycle-1.09/t/Devel-Cycle.t'
Index: ./t/Devel-Cycle.t
--- ./t/Devel-Cycle.t Mon Apr 14 18:54:33 2008
+++ ./t/Devel-Cycle.t Tue Jul 8 15:49:28 2008
@@ -5,7 +5,7 @@
# change 'tests => 1' to 'tests => last_test_to_print';
-use Test::More tests => 9;
+use Test::More tests => 12;
use Scalar::Util qw(weaken isweak);
BEGIN { use_ok('Devel::Cycle') };
@@ -14,7 +14,7 @@ BEGIN { use_ok('Devel::Cycle') };
my $test = {fred => [qw(a b c d e)],
ethel => [qw(1 2 3 4 5)],
george => {martha => 23,
- agnes => 19}
+ agnes => 19},
};
$test->{george}{phyllis} = $test;
$test->{fred}[3] = $test->{george};
@@ -86,6 +86,21 @@ SKIP:
is($counter,3,'found three cycles in $cyclical closure');
}
+{
+ *FOOBAR = *FOOBAR if 0; # cease -w
+ my $test2 = { glob => \*FOOBAR };
+
+ my @warnings;
+ local $SIG{__WARN__} = sub { push @warnings, @_ };
+ find_cycle($test2);
+ pass("No failure if encountering glob");
+ like("@warnings", qr{unhandled type.*glob}i, "Expected warning");
+
+ @warnings = ();
+ find_cycle($test2);
+ is("@warnings", "", "Warn only once");
+}
+
package foo;
use overload q("") => sub{ return 1 }; # show false alarm
#### End of Patch data ####
#### ApplyPatch data follows ####
# Data version : 1.0
# Date generated : Tue Jul 8 16:01:43 2008
# Generated by : makepatch 2.00_12*
# Recurse directories : Yes
# Excluded files : (\A|/).*\~\Z
# (\A|/).*\.a\Z
# (\A|/).*\.bak\Z
# (\A|/).*\.BAK\Z
# (\A|/).*\.elc\Z
# (\A|/).*\.exe\Z
# (\A|/).*\.gz\Z
# (\A|/).*\.ln\Z
# (\A|/).*\.o\Z
# (\A|/).*\.obj\Z
# (\A|/).*\.olb\Z
# (\A|/).*\.old\Z
# (\A|/).*\.orig\Z
# (\A|/).*\.rej\Z
# (\A|/).*\.so\Z
# (\A|/).*\.Z\Z
# (\A|/)\.del\-.*\Z
# (\A|/)\.make\.state\Z
# (\A|/)\.nse_depinfo\Z
# (\A|/)core\Z
# (\A|/)tags\Z
# (\A|/)TAGS\Z
# p 'lib/Devel/Cycle.pm' 13342 1215525099 0100644
# p 't/Devel-Cycle.t' 2454 1215524968 0100755
#### End of ApplyPatch data ####
#### End of Patch kit [created: Tue Jul 8 16:01:43 2008] ####
#### Patch checksum: 119 3695 55028 ####
#### Checksum: 137 4320 41078 ####