Resolve #39001: Call a method on the class after setting the superclass list so that...
Shawn M Moore [Mon, 29 Sep 2008 02:25:57 +0000 (02:25 +0000)]
Changes
lib/Class/MOP/Class.pm

diff --git a/Changes b/Changes
index e319484..a537bfc 100644 (file)
--- a/Changes
+++ b/Changes
@@ -1,5 +1,12 @@
 Revision history for Perl extension Class-MOP.
 
+0.67
+    * Class::MOP::Class
+      - Call a method on the class after setting the superclass list
+        so that we can get Perl to detect cycles before MRO::Compat
+        spirals into an infinite loop (sartak)
+        - Reported by Schwern, [rt.cpan.org #39001]
+
 0.66
     !! This release has an incompatible change regarding !!
        introspection of a class's method with Class::MOP::Class !!
index cc57b6c..59baa88 100644 (file)
@@ -500,6 +500,14 @@ sub superclasses {
     if (@_) {
         my @supers = @_;
         @{$self->get_package_symbol($var_spec)} = @supers;
+
+        # NOTE:
+        # on 5.8 and below, we need to call
+        # a method to get Perl to detect
+        # a cycle in the class hierarchy
+        my $class = $self->name;
+        $class->isa($class);
+
         # NOTE:
         # we need to check the metaclass
         # compatibility here so that we can