CvISXSUB was introduced in 5.10
[gitmo/Moose.git] / lib / Moose / Meta / Class.pm
index 1e9173b..49114ef 100644 (file)
@@ -4,8 +4,8 @@ package Moose::Meta::Class;
 use strict;
 use warnings;
 
+use Class::Load qw(load_class);
 use Class::MOP;
-
 use Carp qw( confess );
 use Data::OptList;
 use List::Util qw( first );
@@ -267,14 +267,22 @@ sub new_object {
     my $params = @_ == 1 ? $_[0] : {@_};
     my $object = $self->SUPER::new_object($params);
 
+    $self->_call_all_triggers($object, $params);
+
+    $object->BUILDALL($params) if $object->can('BUILDALL');
+
+    return $object;
+}
+
+sub _call_all_triggers {
+    my ($self, $object, $params) = @_;
+
     foreach my $attr ( $self->get_all_attributes() ) {
 
         next unless $attr->can('has_trigger') && $attr->has_trigger;
 
         my $init_arg = $attr->init_arg;
-
         next unless defined $init_arg;
-
         next unless exists $params->{$init_arg};
 
         $attr->trigger->(
@@ -286,10 +294,6 @@ sub new_object {
             ),
         );
     }
-
-    $object->BUILDALL($params) if $object->can('BUILDALL');
-
-    return $object;
 }
 
 sub _generate_fallback_constructor {
@@ -541,7 +545,7 @@ sub superclasses {
     my $supers = Data::OptList::mkopt(\@_);
     foreach my $super (@{ $supers }) {
         my ($name, $opts) = @{ $super };
-        Class::MOP::load_class($name, $opts);
+        load_class($name, $opts);
         my $meta = Class::MOP::class_of($name);
         $self->throw_error("You cannot inherit from a Moose Role ($name)")
             if $meta && $meta->isa('Moose::Meta::Role')
@@ -742,6 +746,19 @@ sub _immutable_options {
     );
 }
 
+sub _fixup_attributes_after_rebless {
+    my $self = shift;
+    my ($instance, $rebless_from, %params) = @_;
+
+    $self->SUPER::_fixup_attributes_after_rebless(
+        $instance,
+        $rebless_from,
+        %params
+    );
+
+    $self->_call_all_triggers( $instance, \%params );
+}
+
 ## -------------------------------------------------
 
 our $error_level;
@@ -785,7 +802,7 @@ sub create_error {
 
     my $class = ref $self ? $self->error_class : "Moose::Error::Default";
 
-    Class::MOP::load_class($class);
+    load_class($class);
 
     $class->new(
         Carp::caller_info($args{depth}),
@@ -807,7 +824,7 @@ sub _inline_create_error {
 
     my $class = ref $self ? $self->error_class : "Moose::Error::Default";
 
-    Class::MOP::load_class($class);
+    load_class($class);
 
     # don't check inheritance here - the intention is that the class needs
     # to provide a non-inherited inlining method, because falling back to