initialize a metaclass when trying to apply all roles
[gitmo/Moose.git] / lib / Moose / Util / TypeConstraints.pm
index 7947bfd..4ab0006 100644 (file)
@@ -269,18 +269,6 @@ sub register_type_constraint {
 # type constructors
 
 sub type {
-
-    # back-compat version, called without sugar
-    if ( !any { ( reftype($_) || '' ) eq 'HASH' } @_ ) {
-        Moose::Deprecated::deprecated(
-            feature => 'type without sugar',
-            message =>
-                'Calling type() with a simple list of parameters is deprecated. This will be an error in Moose 2.0200.'
-        );
-
-        return _create_type_constraint( $_[0], undef, $_[1] );
-    }
-
     my $name = shift;
 
     my %p = map { %{$_} } @_;
@@ -292,44 +280,6 @@ sub type {
 }
 
 sub subtype {
-
-    # crazy back-compat code for being called without sugar ...
-    #
-    # subtype 'Parent', sub { where };
-    if ( scalar @_ == 2 && ( reftype( $_[1] ) || '' ) eq 'CODE' ) {
-        Moose::Deprecated::deprecated(
-            feature => 'subtype without sugar',
-            message =>
-                'Calling subtype() with a simple list of parameters is deprecated. This will be an error in Moose 2.0200.'
-        );
-
-        return _create_type_constraint( undef, @_ );
-    }
-
-    # subtype 'Parent', sub { where }, sub { message };
-    # subtype 'Parent', sub { where }, sub { message }, sub { optimized };
-    if ( scalar @_ >= 3 && all { ( reftype($_) || '' ) eq 'CODE' }
-        @_[ 1 .. $#_ ] ) {
-        Moose::Deprecated::deprecated(
-            feature => 'subtype without sugar',
-            message =>
-                'Calling subtype() with a simple list of parameters is deprecated. This will be an error in Moose 2.0200.'
-        );
-
-        return _create_type_constraint( undef, @_ );
-    }
-
-    # subtype 'Name', 'Parent', ...
-    if ( scalar @_ >= 2 && all { !ref } @_[ 0, 1 ] ) {
-        Moose::Deprecated::deprecated(
-            feature => 'subtype without sugar',
-            message =>
-                'Calling subtype() with a simple list of parameters is deprecated. This will be an error in Moose 2.0200.'
-        );
-
-        return _create_type_constraint(@_);
-    }
-
     if ( @_ == 1 && !ref $_[0] ) {
         __PACKAGE__->_throw_error(
             'A subtype cannot consist solely of a name, it must have a parent'
@@ -1055,18 +1005,23 @@ L<Moose::Meta::TypeConstraint> object. It will receive a single parameter, the
 name of the variable to check, typically something like C<"$_"> or C<"$_[0]">.
 
 The subroutine should return a code string suitable for inlining. You can
-assume that the check will be wrapped in parenthese when it is inlined.
+assume that the check will be wrapped in parentheses when it is inlined.
 
-The inlined code should include any checks that your type's parent type's
-do. For example, the C<Num> type's inlining sub looks like this:
+The inlined code should include any checks that your type's parent types
+do. For example, the C<Value> type's inlining sub looks like this:
 
     sub {
-        '!ref(' . $_[1] . ') '
-          . '&& Scalar::Util::looks_like_number(' . $_[1] . ')'
+        'defined(' . $_[1] . ')'
+        . ' && !ref(' . $_[1] . ')'
     }
 
-Note that it checks if the variable is a reference, since it is a subtype of
-the C<Value> type.
+Note that it checks if the variable is defined, since it is a subtype of
+the C<Defined> type.  However, to avoid repeating code, this can be optimized as:
+
+    sub {
+        $_[0]->parent()->_inline_check($_[1])
+        . ' && !ref(' . $_[1] . ')'
+    }
 
 =item B<optimize_as { ... }>