my $overload_operators;
sub overload_operators {
$overload_operators ||= [map { split /\s+/ } values %overload::ops];
+ 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
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);
+ for my $op ($self->overload_operators) {
+ my $body = $self->_get_overloaded_operator_body($op);
next unless defined $body;
$map{$op} = $body;
}
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);
}
-sub add_overload {
+sub add_overloaded_operator {
my $self = shift;
my ($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) = @_;