bump!
[p5sagit/Class-Accessor-Grouped.git] / lib / Class / Accessor / Grouped.pm
index 81d778a..9bd5372 100644 (file)
@@ -5,8 +5,9 @@ use Carp ();
 use Class::Inspector ();
 use Scalar::Util ();
 use MRO::Compat;
+use Sub::Name ();
 
-our $VERSION = '0.08001';
+our $VERSION = '0.08004';
 
 =head1 NAME
 
@@ -76,12 +77,15 @@ sub mk_group_accessors {
             ($name, $field) = @$field if ref $field;
 
             my $accessor = $self->$maker($group, $field);
+            my $alias_accessor = $self->$maker($group, $field);
+
             my $alias = "_${name}_accessor";
+            my $full_name = join('::', $class, $name);
+            my $full_alias = join('::', $class, $alias);
 
-            *{$class."\:\:$name"}  = $accessor;
+            *$full_name = Sub::Name::subname($full_name, $accessor);
               #unless defined &{$class."\:\:$field"}
-
-            *{$class."\:\:$alias"}  = $accessor;
+            *$full_alias = Sub::Name::subname($full_alias, $alias_accessor);
               #unless defined &{$class."\:\:$alias"}
         }
     }
@@ -243,8 +247,6 @@ name passed as an argument.
 =cut
 
 sub get_simple {
-    my ($self, $get) = @_;
-  return $self->{$get};
   return $_[0]->{$_[1]};
 }
 
@@ -303,10 +305,14 @@ sub get_inherited {
     };
 
     no strict 'refs';
+    no warnings qw/uninitialized/;
     return ${$class.'::__cag_'.$_[1]} if defined(${$class.'::__cag_'.$_[1]});
 
-    if (!@{$class.'::__cag_supers'}) {
+    # we need to be smarter about recalculation, as @ISA (thus supers) can very well change in-flight
+    my $pkg_gen = mro::get_pkg_gen ($class);
+    if ( ${$class.'::__cag_pkg_gen'} != $pkg_gen ) {
         @{$class.'::__cag_supers'} = $_[0]->get_super_paths;
+        ${$class.'::__cag_pkg_gen'} = $pkg_gen;
     };
 
     foreach (@{$class.'::__cag_supers'}) {
@@ -427,6 +433,10 @@ sub get_super_paths {
 Matt S. Trout <mst@shadowcatsystems.co.uk>
 Christopher H. Laco <claco@chrislaco.com>
 
+With contributions from:
+
+Guillermo Roditi <groditi@cpan.org>
+
 =head1 LICENSE
 
 You may distribute this code under the same terms as Perl itself.