Implement strict constructors, which will warn unkown constructor arguments
[gitmo/Mouse.git] / lib / Mouse / Meta / Class.pm
index a37a963..7b03c6f 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,6 +244,8 @@ 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);
@@ -462,7 +463,7 @@ Mouse::Meta::Class - The Mouse class metaclass
 
 =head1 VERSION
 
-This document describes Mouse version 0.47
+This document describes Mouse version 0.50_01
 
 =head1 METHODS