Always load Mouse::Util first, which will be load Mouse::XS in the future
[gitmo/Mouse.git] / lib / Mouse / Meta / Class.pm
index 7084439..46b4a15 100644 (file)
@@ -2,11 +2,14 @@ package Mouse::Meta::Class;
 use strict;
 use warnings;
 
-use Mouse::Meta::Method::Constructor;
-use Mouse::Meta::Method::Destructor;
 use Scalar::Util qw/blessed weaken/;
+
 use Mouse::Util qw/get_linear_isa not_supported/;
 
+use Mouse::Meta::Method::Constructor;
+use Mouse::Meta::Method::Destructor;
+use Mouse::Meta::Module;
+
 use base qw(Mouse::Meta::Module);
 
 sub method_metaclass(){ 'Mouse::Meta::Method' } # required for get_method()
@@ -119,6 +122,8 @@ sub new_object {
 
     my $instance = bless {}, $self->name;
 
+    my @triggers_queue;
+
     foreach my $attribute ($self->get_all_attributes) {
         my $from = $attribute->init_arg;
         my $key  = $attribute->name;
@@ -134,7 +139,7 @@ sub new_object {
                 if ref($instance->{$key}) && $attribute->is_weak_ref;
 
             if ($attribute->has_trigger) {
-                $attribute->trigger->($instance, $args{$from});
+                push @triggers_queue, [ $attribute->trigger, $args{$from} ];
             }
         }
         else {
@@ -165,6 +170,12 @@ sub new_object {
             }
         }
     }
+
+    foreach my $trigger_and_value(@triggers_queue){
+        my($trigger, $value) = @{$trigger_and_value};
+        $trigger->($instance, $value);
+    }
+
     return $instance;
 }