use Carp 'confess';
use Scalar::Util 'blessed', 'weaken', 'looks_like_number';
-our $VERSION = '0.03';
+our $VERSION = '0.63';
our $AUTHORITY = 'cpan:STEVAN';
use base 'Class::MOP::Method::Generated';
|| confess "You must pass a metaclass instance if you want to inline"
if $options{is_inline};
+ ($options{package_name} && $options{name})
+ || confess "You must supply the package_name and name parameters $Class::MOP::Method::UPGRADE_ERROR_TEXT";
+
my $self = bless {
# from our superclass
- '&!body' => undef,
+ '&!body' => undef,
+ '$!package_name' => $options{package_name},
+ '$!name' => $options{name},
# specific to this subclass
'%!options' => $options{options} || {},
'$!associated_metaclass' => $options{metaclass},
$default = '$instance->'.$attr->builder;
}
- 'if(exists $params{\'' . $attr->init_arg . '\'}){' . "\n" .
- $self->meta_instance->inline_set_slot_value(
- '$instance',
- ("'" . $attr->name . "'"),
- '$params{\'' . $attr->init_arg . '\'}' ) . "\n" .
- '} ' . (!defined $default ? '' : 'else {' . "\n" .
- $self->meta_instance->inline_set_slot_value(
- '$instance',
- ("'" . $attr->name . "'"),
- $default ) . "\n" .
- '}');
+ if ( defined $attr->init_arg ) {
+ return (
+ 'if(exists $params{\'' . $attr->init_arg . '\'}){' . "\n" .
+ $self->meta_instance->inline_set_slot_value(
+ '$instance',
+ ("'" . $attr->name . "'"),
+ '$params{\'' . $attr->init_arg . '\'}' ) . "\n" .
+ '} ' . (!defined $default ? '' : 'else {' . "\n" .
+ $self->meta_instance->inline_set_slot_value(
+ '$instance',
+ ("'" . $attr->name . "'"),
+ $default ) . "\n" .
+ '}')
+ );
+ } elsif ( defined $default ) {
+ return (
+ $self->meta_instance->inline_set_slot_value(
+ '$instance',
+ ("'" . $attr->name . "'"),
+ $default ) . "\n"
+ );
+ } else { return '' }
}
1;
-1;
-
__END__
=pod
=head1 DESCRIPTION
This is a subclass of C<Class::MOP::Method> which deals with
-class constructors.
+class constructors. This is used when making a class immutable
+to generate an optimized constructor.
=head1 METHODS
=back
-=head2 Method Generators
+=head2 Method Generators
=over 4