X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMouse%2FMeta%2FClass.pm;h=85066c7b2f81b60cdda03ebc8c1763a60e622cbc;hb=df77fd72ab8342a9406153b271fa8358e1a5fcae;hp=99944e8fc44c4816ac8fbf36fc7ca2345bda47b9;hpb=926290ac173b77f0ff0027dcbd95277c9cc2be54;p=gitmo%2FMouse.git diff --git a/lib/Mouse/Meta/Class.pm b/lib/Mouse/Meta/Class.pm index 99944e8..85066c7 100644 --- a/lib/Mouse/Meta/Class.pm +++ b/lib/Mouse/Meta/Class.pm @@ -25,10 +25,11 @@ sub _construct_meta { \@{ $args{package} . '::ISA' }; }; - #return Mouse::Meta::Class->initialize($class)->new_object(%args) - # if $class ne __PACKAGE__; - - return bless \%args, ref($class) || $class; + my $self = bless \%args, ref($class) || $class; + if($class ne __PACKAGE__){ + $self->meta->_initialize_object($self, \%args); + } + return $self; } sub create_anon_class{ @@ -116,7 +117,7 @@ sub add_attribute { my($attribute_class, @traits) = Mouse::Meta::Attribute->interpolate_class($name, \%args); $args{traits} = \@traits if @traits; - $attr = $attribute_class->new($name, \%args); + $attr = $attribute_class->new($name, %args); } } @@ -247,17 +248,20 @@ sub make_immutable { 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