X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FClass%2FMOP%2FMixin%2FHasMethods.pm;h=5f6a4db08d868ce5f3bd5736a3679323283d6647;hb=87a1f36e0f0e38af826028d2dbd8b3d85ccca101;hp=f714cd5713c9bbc00d6a31feb036a27d46ba71e0;hpb=c18e272e9602650d75112d2921d67abe167b7b6d;p=gitmo%2FMoose.git diff --git a/lib/Class/MOP/Mixin/HasMethods.pm b/lib/Class/MOP/Mixin/HasMethods.pm index f714cd5..5f6a4db 100644 --- a/lib/Class/MOP/Mixin/HasMethods.pm +++ b/lib/Class/MOP/Mixin/HasMethods.pm @@ -225,7 +225,7 @@ sub _overload_map { my %map; for my $op ($self->overload_operators) { - my $body = overload::Method($self->name, $op); + my $body = $self->_get_overloaded_operator_body($op); next unless defined $body; $map{$op} = $body; } @@ -235,25 +235,25 @@ sub _overload_map { sub get_overload_list { my $self = shift; - my $map = $self->_overload_map; - return map { $self->_wrap_overload($_, $map->{$_}) } keys $map; + return keys $self->_overload_map; } -sub get_overloaded_operators { +sub get_all_overloaded_operators { my $self = shift; - return keys $self->_overload_map; + my $map = $self->_overload_map; + return map { $self->_wrap_overload($_, $map->{$_}) } keys $map; } sub has_overloaded_operator { my $self = shift; my ($op) = @_; - return defined overload::Method($self->name, $op); + return defined $self->_get_overloaded_operator_body($op); } sub get_overloaded_operator { my $self = shift; my ($op) = @_; - my $body = overload::Method($self->name, $op); + my $body = $self->_get_overloaded_operator_body($op); return unless defined $body; return $self->_wrap_overload($op, $body); } @@ -264,6 +264,12 @@ sub add_overloaded_operator { $self->name->overload::OVERLOAD($op => $body); } +sub _get_overloaded_operator_body { + my $self = shift; + my ($op) = @_; + return overload::Method($self->name, $op); +} + sub _wrap_overload { my $self = shift; my ($op, $body) = @_;