(no commit message)
[gitmo/Moose.git] / lib / Moose / Meta / Method / Constructor.pm
index 0c0e1f6..24c845d 100644 (file)
@@ -7,7 +7,7 @@ use warnings;
 use Carp         'confess';
 use Scalar::Util 'blessed', 'weaken', 'looks_like_number';
 
-our $VERSION   = '0.04';
+our $VERSION   = '0.05';
 our $AUTHORITY = 'cpan:STEVAN';
 
 use base 'Moose::Meta::Method',
@@ -87,9 +87,21 @@ sub intialize_body {
         # to be picked up in the eval
         my $attrs = $self->attributes;
 
-        my @type_constraints = map { $_->type_constraint } @$attrs;
+        # We need to check if the attribute ->can('type_constraint')
+        # since we may be trying to immutabilize a Moose meta class,
+        # which in turn has attributes which are Class::MOP::Attribute
+        # objects, rather than Moose::Meta::Attribute. And 
+        # Class::MOP::Attribute attributes have no type constraints.
+        # However we need to make sure we leave an undef value there
+        # because the inlined code is using the index of the attributes
+        # to determine where to find the type constraint
+        
+        my @type_constraints = map { 
+            $_->can('type_constraint') ? $_->type_constraint : undef
+        } @$attrs;
+        
         my @type_constraint_bodies = map {
-            $_ && ( $_->has_hand_optimized_type_constraint ? $_->hand_optimized_type_constraint : $_->_compiled_type_constraint );
+            defined $_ ? $_->_compiled_type_constraint : undef;
         } @type_constraints;
 
         $code = eval $source;