Merge 'Moose-moosex_compile_support' into 'trunk'
[gitmo/Moose.git] / lib / Moose / Meta / TypeConstraint / Class.pm
CommitLineData
3fef8ce8 1package Moose::Meta::TypeConstraint::Class;
2
3use strict;
4use warnings;
5use metaclass;
6
7use Scalar::Util qw(blessed);
8
9use base 'Moose::Meta::TypeConstraint';
10
11use Moose::Util::TypeConstraints ();
12
13sub new {
14 my $class = shift;
15 my $self = $class->meta->new_object(@_, parent => Moose::Util::TypeConstraints::find_type_constraint('Object') );
16 $self->compile_type_constraint()
17 unless $self->_has_compiled_type_constraint;
18 return $self;
19}
20
21sub parents {
22 my $self = shift;
23 return (
24 $self->parent,
25 map { Moose::Util::TypeConstraints::find_type_constraint($_) } $self->name->meta->superclasses,
26 );
27}
28
29sub hand_optimized_type_constraint {
30 my $self = shift;
31 my $class = $self->name;
32 sub { blessed( $_[0] ) && $_[0]->isa($class) }
33}
34
35sub has_hand_optimized_type_constraint { 1 }
36
37sub is_a_type_of {
38 my ($self, $type_name) = @_;
39
40 return $self->name eq $type_name || $self->is_subtype_of($type_name);
41}
42
43sub is_subtype_of {
44 my ($self, $type_name) = @_;
45
46 return 1 if $type_name eq 'Object';
47 return $self->name->isa( $type_name );
48}
49
501;
51
52__END__
53=pod
54
55=head1 NAME
56
57Moose::Meta::TypeConstraint::Class - Class/TypeConstraint parallel hierarchy
58
59=head1 METHODS
60
61=over 4
62
63=item new
64
65=item hand_optimized_type_constraint
66
67=item has_hand_optimized_type_constraint
68
69=item is_a_type_of
70
71=item is_subtype_of
72
73=item parents
74
75Return all the parent types, corresponding to the parent classes.
76
77=back
78
79=cut