more correct
Yuval Kogman [Sun, 27 Jan 2008 15:37:18 +0000 (15:37 +0000)]
lib/Class/MOP/Class.pm

index 40c1c19..da44190 100644 (file)
@@ -416,12 +416,21 @@ sub rebless_instance {
     # rebless!
     $meta_instance->rebless_instance_structure($instance, $self);
 
-    # check and upgrade all attributes
+    my %params;
+
     foreach my $attr ( $self->compute_all_applicable_attributes ) {
         if ( $attr->has_value($instance) ) {
-            $attr->set_value($instance, $attr->get_value($instance) );
+            if ( defined( my $init_arg = $attr->init_arg ) ) {
+                $params{$init_arg} = $attr->get_value($instance);
+            } else {
+                $attr->set_value($instance);
+            }
         }
     }
+
+    foreach my $attr ($self->compute_all_applicable_attributes) {
+        $attr->initialize_instance_slot($meta_instance, $instance, \%params);
+    }
 }
 
 # Inheritance