X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMoose%2FMeta%2FTypeConstraint%2FParameterized.pm;h=65bf69691831856355d14ad754e7b185bae841ac;hb=topic%2Ftc-equals-autocreate;hp=49358d5282c9b48f72f969e0fe7e9928400618da;hpb=55d05fb16429c2150b5337b1a0130ae334e129d0;p=gitmo%2FMoose.git diff --git a/lib/Moose/Meta/TypeConstraint/Parameterized.pm b/lib/Moose/Meta/TypeConstraint/Parameterized.pm index 49358d5..65bf696 100644 --- a/lib/Moose/Meta/TypeConstraint/Parameterized.pm +++ b/lib/Moose/Meta/TypeConstraint/Parameterized.pm @@ -8,21 +8,24 @@ use Scalar::Util 'blessed'; use Moose::Util::TypeConstraints; use Moose::Meta::TypeConstraint::Parameterizable; -our $VERSION = '1.12'; -$VERSION = eval $VERSION; -our $AUTHORITY = 'cpan:STEVAN'; - use base 'Moose::Meta::TypeConstraint'; __PACKAGE__->meta->add_attribute('type_parameter' => ( accessor => 'type_parameter', predicate => 'has_type_parameter', + Class::MOP::_definition_context(), +)); + +__PACKAGE__->meta->add_attribute('parameterized_from' => ( + accessor => 'parameterized_from', + predicate => 'has_parameterized_from', + Class::MOP::_definition_context(), )); sub equals { my ( $self, $type_or_name ) = @_; - my $other = Moose::Util::TypeConstraints::find_type_constraint($type_or_name); + my $other = Moose::Util::TypeConstraints::find_or_create_type_constraint($type_or_name) or return; return unless $other->isa(__PACKAGE__); @@ -62,6 +65,36 @@ sub compile_type_constraint { . $self->parent->name . " doesn't subtype or coerce from a parameterizable type."); } +sub can_be_inlined { + my $self = shift; + + return + $self->has_parameterized_from + && $self->parameterized_from->has_inline_generator + && $self->type_parameter->can_be_inlined; +} + +sub inline_environment { + my $self = shift; + + return { + ($self->has_parameterized_from + ? (%{ $self->parameterized_from->inline_environment }) + : ()), + ($self->has_type_parameter + ? (%{ $self->type_parameter->inline_environment }) + : ()), + }; +} + +sub _inline_check { + my $self = shift; + + return unless $self->can_be_inlined; + + return $self->parameterized_from->generate_inline_for( $self->type_parameter, @_ ); +} + sub create_child_type { my ($self, %opts) = @_; return Moose::Meta::TypeConstraint::Parameterizable->new(%opts, parent=>$self); @@ -69,15 +102,13 @@ sub create_child_type { 1; +# ABSTRACT: Type constraints with a bound parameter (ArrayRef[Int]) + __END__ =pod -=head1 NAME - -Moose::Meta::TypeConstraint::Parameterized - Type constraints with a bound parameter (ArrayRef[Int]) - =head1 METHODS This class is intentionally not documented because the API is @@ -92,17 +123,4 @@ L. See L for details on reporting bugs. -=head1 AUTHOR - -Stevan Little Estevan@iinteractive.comE - -=head1 COPYRIGHT AND LICENSE - -Copyright 2006-2010 by Infinity Interactive, Inc. - -L - -This library is free software; you can redistribute it and/or modify -it under the same terms as Perl itself. - =cut