When generating inlining code, distinguish between $default from calling $attr->defau...
[gitmo/Moose.git] / lib / Moose / Meta / TypeConstraint / Parameterizable.pm
index 6f82a34..aa8cf2d 100644 (file)
@@ -8,14 +8,18 @@ use base 'Moose::Meta::TypeConstraint';
 use Moose::Meta::TypeConstraint::Parameterized;
 use Moose::Util::TypeConstraints ();
 
+use Carp 'confess';
+
 __PACKAGE__->meta->add_attribute('constraint_generator' => (
     accessor  => 'constraint_generator',
     predicate => 'has_constraint_generator',
+    Class::MOP::_definition_context(),
 ));
 
 __PACKAGE__->meta->add_attribute('inline_generator' => (
     accessor  => 'inline_generator',
     predicate => 'has_inline_generator',
+    Class::MOP::_definition_context(),
 ));
 
 sub generate_constraint_for {
@@ -46,9 +50,11 @@ sub _can_coerce_constraint_from {
 sub generate_inline_for {
     my ($self, $type, $val) = @_;
 
-    return unless $self->has_inline_generator;
+    confess "Can't generate an inline constraint for $type, since none "
+          . "was defined"
+        unless $self->has_inline_generator;
 
-    return $self->inline_generator->( $type, $val );
+    return '( do { ' . $self->inline_generator->( $self, $type, $val ) . ' } )';
 }
 
 sub _parse_type_parameter {