a bit more refactoring
[gitmo/Class-MOP.git] / lib / Class / MOP / Class.pm
index 891e611..cfa11fe 100644 (file)
@@ -650,33 +650,52 @@ sub _inline_slot_initializer {
     my $self  = shift;
     my ($attr, $idx) = @_;
 
-    my $default = $self->_inline_default_value($attr, $idx);
-
     if (defined(my $init_arg = $attr->init_arg)) {
         my @source = (
             'if (exists $params->{\'' . $init_arg . '\'}) {',
-                $attr->_inline_set_value(
-                    '$instance', '$params->{\'' . $init_arg . '\'}'
-                ),
+                $self->_inline_init_attr_from_constructor($attr, $idx),
             '}',
         );
-        if (defined $default) {
+        if (my @default = $self->_inline_init_attr_from_default($attr, $idx)) {
             push @source, (
                 'else {',
-                    $attr->_inline_set_value('$instance', $default),
+                    @default,
                 '}',
             );
         }
         return @source;
     }
-    elsif (defined $default) {
-        return $attr->_inline_set_value('$instance', $default);
+    elsif (my @default = $self->_inline_init_attr_from_default($attr, $idx)) {
+        return (
+            '{',
+                @default,
+            '}',
+        );
     }
     else {
         return ();
     }
 }
 
+sub _inline_init_attr_from_constructor {
+    my $self = shift;
+    my ($attr, $idx) = @_;
+
+    return $attr->_inline_set_value(
+        '$instance', '$params->{\'' . $attr->init_arg . '\'}'
+    ),
+}
+
+sub _inline_init_attr_from_default {
+    my $self = shift;
+    my ($attr, $idx) = @_;
+
+    my $default = $self->_inline_default_value($attr, $idx);
+    return unless $default;
+
+    return $attr->_inline_set_value('$instance', $default);
+}
+
 sub _inline_default_value {
     my $self = shift;
     my ($attr, $index) = @_;