X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=gitmo%2FClass-MOP.git;a=blobdiff_plain;f=lib%2FClass%2FMOP%2FClass.pm;fp=lib%2FClass%2FMOP%2FClass.pm;h=cfa11fe6b5ed90a0ac87c185bfd813c71a52493a;hp=891e611d7f5f467ea9ae967c7ce8d54436a53da3;hb=aa28eb106aaeffc3d29983be5f6b63b9fc254c16;hpb=cc66fac6ef15584503dfcbc1953da2d58aad7989 diff --git a/lib/Class/MOP/Class.pm b/lib/Class/MOP/Class.pm index 891e611..cfa11fe 100644 --- a/lib/Class/MOP/Class.pm +++ b/lib/Class/MOP/Class.pm @@ -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) = @_;