Make Mouse::Util::load_class return the argument class name, which can remove several...
[gitmo/Mouse.git] / lib / Mouse / Meta / Class.pm
index 520cc9d..84c36d5 100644 (file)
@@ -81,8 +81,8 @@ sub superclasses {
 sub _reconcile_with_superclass_meta {
     my($self, $super_meta) = @_;
 
+    # find incompatible traits
     my @incompatibles;
-
     foreach my $metaclass_type(@MetaClassTypes){
         my $super_c = $super_meta->$metaclass_type();
         my $self_c  = $self->$metaclass_type();
@@ -93,9 +93,8 @@ sub _reconcile_with_superclass_meta {
     }
 
     my @roles;
-
-    foreach my $role($self->meta->calculate_all_roles){
-        if(!$super_meta->meta->does_role($role->name)){
+    foreach my $role($super_meta->meta->calculate_all_roles){
+        if(!$self->meta->does_role($role->name)){
             push @roles, $role->name;
         }
     }
@@ -207,13 +206,13 @@ sub new_object;
 sub clone_object {
     my $class  = shift;
     my $object = shift;
-    my %params = (@_ == 1) ? %{$_[0]} : @_;
+    my $args   = $object->Mouse::Object::BUILDARGS(@_);
 
     (blessed($object) && $object->isa($class->name))
         || $class->throw_error("You must pass an instance of the metaclass (" . $class->name . "), not ($object)");
 
     my $cloned = bless { %$object }, ref $object;
-    $class->_initialize_object($cloned, \%params);
+    $class->_initialize_object($cloned, $args);
 
     return $cloned;
 }
@@ -245,18 +244,18 @@ sub make_immutable {
 
     $self->{is_immutable}++;
 
+    $self->{strict_constructor} = $args{strict_constructor};
+
     if ($args{inline_constructor}) {
-        my $c = $self->constructor_class;
-        Mouse::Util::load_class($c);
         $self->add_method($args{constructor_name} =>
-            $c->_generate_constructor($self, \%args));
+            Mouse::Util::load_class($self->constructor_class)
+                ->_generate_constructor($self, \%args));
     }
 
     if ($args{inline_destructor}) {
-        my $c = $self->destructor_class;
-        Mouse::Util::load_class($c);
         $self->add_method(DESTROY =>
-            $c->_generate_destructor($self, \%args));
+            Mouse::Util::load_class($self->destructor_class)
+                ->_generate_destructor($self, \%args));
     }
 
     # Moose's make_immutable returns true allowing calling code to skip setting an explicit true value
@@ -345,7 +344,7 @@ sub _install_modifier {
     # load Class::Method::Modifiers first
     my $no_cmm_fast = do{
         local $@;
-        eval q{ require Class::Method::Modifiers::Fast };
+        eval q{ use Class::Method::Modifiers::Fast 0.041 () };
         $@;
     };
 
@@ -354,7 +353,7 @@ sub _install_modifier {
         $impl = \&_install_modifier_pp;
     }
     else{
-        my $install_modifier = Class::Method::Modifiers::Fast->can('_install_modifier');
+        my $install_modifier = Class::Method::Modifiers::Fast->can('install_modifier');
         $impl = sub {
             my ( $self, $type, $name, $code ) = @_;
             my $into = $self->name;
@@ -462,7 +461,7 @@ Mouse::Meta::Class - The Mouse class metaclass
 
 =head1 VERSION
 
-This document describes Mouse version 0.46
+This document describes Mouse version 0.50_03
 
 =head1 METHODS