return @$overload_operators;
}
+sub is_overloaded {
+ my $self = shift;
+ return overload::Overloaded($self->name);
+}
+
# XXX this could probably stand to be cached, but i figure it should be
# uncommon enough to not particularly matter
sub _overload_map {
my $self = shift;
- return {} unless overload::Overloaded($self->name);
+ return {} unless $self->is_overloaded;
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;
}
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);
}
$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) = @_;