X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMouseX%2FTypes.pm;h=1522292fc02a1d3330ca9dbed2f2a3f25bc0f3c7;hb=b4160dbe7bdfeacc3f559cf3eb9b792a5794a62b;hp=ada0e757bf6e43ff41da9b44f5d2802d1dd069b1;hpb=03478c1c9ef8a29bf493ee337e99c18118ed3bf8;p=gitmo%2FMouse.git diff --git a/lib/MouseX/Types.pm b/lib/MouseX/Types.pm index ada0e75..1522292 100644 --- a/lib/MouseX/Types.pm +++ b/lib/MouseX/Types.pm @@ -3,6 +3,7 @@ use strict; use warnings; require Mouse::TypeRegistry; +use MouseX::Types::TypeDecorator; sub import { my $class = shift; @@ -16,8 +17,8 @@ sub import { if (defined $args{'-declare'} && ref($args{'-declare'}) eq 'ARRAY') { my $storage = $caller->type_storage($caller); for my $name (@{ $args{'-declare'} }) { - $storage->{$name} = "$caller\::$name"; - *{"$caller\::$name"} = sub () { $caller->type_storage->{$name} }; + my $obj = $storage->{$name} = "$caller\::$name"; + *{"$caller\::$name"} = sub () { $obj }; } } @@ -28,7 +29,10 @@ sub _import { my($type_class, $pkg, @types) = @_; no strict 'refs'; for my $name (@types) { - *{"$pkg\::$name"} = sub () { $type_class->type_storage->{$name} } + my $obj = $type_class->type_storage->{$name}; + $obj = $type_class->type_storage->{$name} = MouseX::Types::TypeDecorator->new($obj) + unless ref($obj); + *{"$pkg\::$name"} = sub () { $obj }; } }