$maker = $self->can($maker) unless ref $maker;
for (@fields) {
- if( $_ eq 'DESTROY' ) {
- Carp::carp("Having a data accessor named DESTROY in '$class' is unwise.");
- }
my ($name, $field) = (ref $_) ? (@$_) : ($_, $_);
+ for (qw/DESTROY AUTOLOAD CLONE/) {
+ Carp::carp("Having a data accessor named '$name' in '$class' is unwise.")
+ if $name eq $_;
+ }
+
my $alias = "_${name}_accessor";
for my $meth ($name, $alias) {
my($self, $group, @fields) = @_;
$self->_mk_group_accessors('make_group_ro_accessor', $group, @fields);
+ return;
}
=head2 mk_group_wo_accessors
my($self, $group, @fields) = @_;
$self->_mk_group_accessors('make_group_wo_accessor', $group, @fields);
+ return;
}
=head2 get_simple
my $cag_slot = '::__cag_'. $_[1];
return ${$class.$cag_slot} if defined(${$class.$cag_slot});
- # we need to be smarter about recalculation, as @ISA (thus supers) can very well change in-flight
- my $cur_gen = mro::get_pkg_gen ($class);
- if ( $cur_gen != ${$class.'::__cag_pkg_gen__'} ) {
- @{$class.'::__cag_supers__'} = $_[0]->get_super_paths;
- ${$class.'::__cag_pkg_gen__'} = $cur_gen;
- }
-
- for (@{$class.'::__cag_supers__'}) {
- return ${$_.$cag_slot} if defined(${$_.$cag_slot});
- };
+ do { return ${$_.$cag_slot} if defined(${$_.$cag_slot}) }
+ for $_[0]->get_super_paths;
return undef;
}
=cut
sub get_super_paths {
- return @{mro::get_linear_isa( ref($_[0]) || $_[0] )};
+ # get_linear_isa returns the class itself as the 1st element
+ # use @_ as a pre-allocated scratch array
+ (undef, @_) = @{mro::get_linear_isa( length( ref($_[0]) ) ? ref($_[0]) : $_[0] )};
+ @_;
};
=head2 make_group_accessor