From: Stevan Little Date: Sat, 22 Apr 2006 00:20:32 +0000 (+0000) Subject: cleanup X-Git-Tag: 0_26~4 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=291073fce8bb70dc65cb858786402a20b575cc97;hp=37f36b2ad0bca80a86767b35c7267654b2d97ec7;p=gitmo%2FClass-MOP.git cleanup --- diff --git a/lib/Class/MOP/Attribute.pm b/lib/Class/MOP/Attribute.pm index 64542c2..fad8bda 100644 --- a/lib/Class/MOP/Attribute.pm +++ b/lib/Class/MOP/Attribute.pm @@ -62,15 +62,20 @@ sub clone { sub initialize_instance_slot { my ($self, $class, $instance, $params) = @_; - my $init_arg = $self->init_arg(); + # OPTIMIZATION NOTE: + # We break the attribute encapsulation here + # in order to save a number of method calls + # to $self and speed things up a bit + my $init_arg = $self->{init_arg}; # try to fetch the init arg from the %params ... my $val; $val = $params->{$init_arg} if exists $params->{$init_arg}; # if nothing was in the %params, we can use the # attribute's default value (if it has one) - $val = $self->default($instance) - if !defined $val && $self->has_default; - $instance->{$self->name} = $val; + if (!defined $val && $self->{default}) { + $val = $self->default($instance); + } + $instance->{$self->{name}} = $val; } # NOTE: diff --git a/lib/Class/MOP/Class.pm b/lib/Class/MOP/Class.pm index 9c5cd84..762c6a2 100644 --- a/lib/Class/MOP/Class.pm +++ b/lib/Class/MOP/Class.pm @@ -475,21 +475,21 @@ sub add_attribute { || confess "Your attribute must be an instance of Class::MOP::Attribute (or a subclass)"; $attribute->attach_to_class($self); $attribute->install_accessors(); - $self->{'%:attributes'}->{$attribute->name} = $attribute; + $self->get_attribute_map->{$attribute->name} = $attribute; } sub has_attribute { my ($self, $attribute_name) = @_; (defined $attribute_name && $attribute_name) || confess "You must define an attribute name"; - exists $self->{'%:attributes'}->{$attribute_name} ? 1 : 0; + exists $self->get_attribute_map->{$attribute_name} ? 1 : 0; } sub get_attribute { my ($self, $attribute_name) = @_; (defined $attribute_name && $attribute_name) || confess "You must define an attribute name"; - return $self->{'%:attributes'}->{$attribute_name} + return $self->get_attribute_map->{$attribute_name} if $self->has_attribute($attribute_name); return; } @@ -508,7 +508,7 @@ sub remove_attribute { sub get_attribute_list { my $self = shift; - keys %{$self->{'%:attributes'}}; + keys %{$self->get_attribute_map}; } sub compute_all_applicable_attributes {