use Mouse::Meta::Module;
our @ISA = qw(Mouse::Meta::Module);
-sub method_metaclass(){ 'Mouse::Meta::Method' } # required for get_method()
+sub method_metaclass() { 'Mouse::Meta::Method' }
+sub attribute_metaclass() { 'Mouse::Meta::Attribute' }
sub _construct_meta {
my($class, %args) = @_;
};
my $self = bless \%args, ref($class) || $class;
- if($class ne __PACKAGE__){
+ if(ref($self) ne __PACKAGE__){
$self->meta->_initialize_object($self, \%args);
}
return $self;
if ($name =~ s/^\+//) { # inherited attributes
my $inherited_attr;
+ # find_attribute_by_name
foreach my $class($self->linearized_isa){
my $meta = Mouse::Util::get_metaclass_by_name($class) or next;
$inherited_attr = $meta->get_attribute($name) and last;
defined($inherited_attr)
or $self->throw_error("Could not find an attribute by the name of '$name' to inherit from in ".$self->name);
- $attr = $inherited_attr->clone_and_inherit_options($name, \%args);
+ $attr = $inherited_attr->clone_and_inherit_options(%args);
}
else{
- my($attribute_class, @traits) = Mouse::Meta::Attribute->interpolate_class($name, \%args);
+ my($attribute_class, @traits) = $self->attribute_metaclass->interpolate_class(\%args);
$args{traits} = \@traits if @traits;
- $attr = $attribute_class->new($name, \%args);
+ $attr = $attribute_class->new($name, %args);
}
}
my %args = (
inline_constructor => 1,
inline_destructor => 1,
+ constructor_name => 'new',
@_,
);
$self->{is_immutable}++;
if ($args{inline_constructor}) {
- $self->add_method('new' => Mouse::Meta::Method::Constructor->generate_constructor_method_inline( $self ));
+ # generate and install
+ Mouse::Meta::Method::Constructor->_generate_constructor_method($self, \%args);
}
if ($args{inline_destructor}) {
- $self->add_method('DESTROY' => Mouse::Meta::Method::Destructor->generate_destructor_method_inline( $self ));
+ # generate and install
+ Mouse::Meta::Method::Destructor->_generate_destructor_method($self, \%args);
}
# Moose's make_immutable returns true allowing calling code to skip setting an explicit true value