trivial optimization to MODIFY_CODE_ATTRIBUTES
[dbsrgits/DBIx-Class-Historic.git] / lib / DBIx / Class.pm
index 014d87e..0a0bce5 100644 (file)
@@ -13,19 +13,22 @@ sub component_base_class { 'DBIx::Class' }
 # i.e. first release of 0.XX *must* be 0.XX000. This avoids fBSD ports
 # brain damage and presumably various other packaging systems too
 
-$VERSION = '0.05999_03';
+$VERSION = '0.05999_04';
 
 sub MODIFY_CODE_ATTRIBUTES {
     my ($class,$code,@attrs) = @_;
-    unless ($class->can('_attr_cache')) {
-        $class->mk_classdata('_attr_cache');
-        $class->_attr_cache({});
-    }
-    my $cache = $class->_attr_cache;
-    $class->_attr_cache->{$code} = [@attrs];
+    $class->mk_classdata('__attr_cache' => {}) unless $class->can('__attr_cache');
+    $class->__attr_cache->{$code} = [@attrs];
     return ();
 }
 
+sub _attr_cache {
+    my $self = shift;
+    my $cache = $self->can('__attr_cache') ? $self->__attr_cache : {};
+    my $rest = eval { $self->next::method };
+    return $@ ? $cache : { %$cache, %$rest };
+}
+
 1;
 
 =head1 NAME 
@@ -166,9 +169,9 @@ Scotty Allen <scotty@scottyallen.com>
 
 sc_
 
-Robert Sedlacek <phaylon@dunkelheit.at>
+Robert Sedlacek <phaylon@dunkelheit.at
 
-Justin Guenther <jguenther@agr.gc.ca>
+Justin Guenther <guentherj@agr.gc.ca>
 
 Daisuke Murase <typester@cpan.org>