X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMooseX%2FTypes%2FTypeDecorator.pm;h=943bcd63191ac5cdcafa78a0699c2bd7dd26fb8a;hb=6e73ec86fc0b97ac2130e57e79ebb9028eb0e973;hp=fa97bb79765b25f5d1663bad9fdf0f24186667fb;hpb=cabfc8ede99ead991887b0e6c4285521245e19f2;p=gitmo%2FMooseX-Types.git diff --git a/lib/MooseX/Types/TypeDecorator.pm b/lib/MooseX/Types/TypeDecorator.pm index fa97bb7..943bcd6 100644 --- a/lib/MooseX/Types/TypeDecorator.pm +++ b/lib/MooseX/Types/TypeDecorator.pm @@ -117,8 +117,10 @@ handle $self->isa since AUTOLOAD can't. =cut sub isa { - return 1 if $_[1]->isa('Moose::Meta::TypeConstraint'); - shift->_try_delegate('isa', @_) + my $self = shift; + return + $self->__type_constraint->isa(@_) + || $self->_try_delegate('isa', @_); } =head2 can @@ -173,13 +175,16 @@ sub _try_delegate { my ($self, $method, @args) = @_; my $tc = $self->__type_constraint; my $class; - my $search_tc = $tc; - while ($search_tc->is_subtype_of('Object')) { - if ($search_tc->isa('Moose::Meta::TypeConstraint::Class')) { - $class = $search_tc->class; - last; + if ($tc->can('is_subtype_of')) { # Union can't + my $search_tc = $tc; + while (1) { + if ($search_tc->isa('Moose::Meta::TypeConstraint::Class')) { + $class = $search_tc->class; + last; + } + $search_tc = $search_tc->parent; + last unless $search_tc->is_subtype_of('Object'); } - $search_tc = $search_tc->parent; } my $inv = (