Hi all,
Is this a Moose make_immutable bug?
# a.pm
package a;
use Moose::Role;
1;
# b.pm
package b;
use Moose;
around 'BUILDARGS' => sub {
my $orig = shift;
my $self = shift;
with 'a';
$self->$orig;
};
sub BUILD {
my $self = shift;
$self->meta->make_immutable;
}
1;
#a.pl
#!/usr/bin/perl
use strict;
use warnings;
use b;
my $c = b->new();
my $d = b->new();
$perl a.pl
The 'Class::MOP::Class::Immutable::Moose::Meta::Class=HASH(0x6d7a90)'
method cannot be called on an immutable instance at
/opt/csw/lib/perl/site_perl/Class/MOP/Class/Immutable/Trait.pm line 32
Class::MOP::Class::Immutable::Trait::_immutable_cannot_call('Class::MOP::Class::Immutable::Moose::Meta::Class=HASH(0x6d7a90)')
called at /opt/csw/lib/perl/site_perl/Moose/Meta/Class/Immutable/Trait.pm
line 17
Class::MOP::Class:::around('CODE(0x3b3580)',
'Class::MOP::Class::Immutable::Moose::Meta::Class=HASH(0x6d7a90)',
'Moose::Meta::Role=HASH(0x7cdaa0)') called at
/opt/csw/lib/perl/site_perl/Class/MOP/Method/Wrapped.pm line 162
Class::MOP::Method::Wrapped::__ANON__('Class::MOP::Class::Immutable::Moose::Meta::Class=HASH(0x6d7a90)',
'Moose::Meta::Role=HASH(0x7cdaa0)') called at
/opt/csw/lib/perl/site_perl/Class/MOP/Method/Wrapped.pm line 91
Class::MOP::Class::Immutable::Moose::Meta::Class::add_role('Class::MOP::Class::Immutable::Moose::Meta::Class=HASH(0x6d7a90)',
'Moose::Meta::Role=HASH(0x7cdaa0)') called at
/opt/csw/lib/perl/site_perl/Moose/Meta/Role/Application/ToClass.pm line 38
Moose::Meta::Role::Application::ToClass::apply('Moose::Meta::Role::Application::ToClass=HASH(0x7bd1b0)',
'Moose::Meta::Role=HASH(0x7cdaa0)',
'Class::MOP::Class::Immutable::Moose::Meta::Class=HASH(0x6d7a90)',
'HASH(0x7d22d0)') called at /opt/csw/lib/perl/site_perl/Moose/Meta/Role.pm
line 470
Moose::Meta::Role::apply('Moose::Meta::Role=HASH(0x7cdaa0)',
'Class::MOP::Class::Immutable::Moose::Meta::Class=HASH(0x6d7a90)') called
at /opt/csw/lib/perl/site_perl/Moose/Util.pm line 160
Moose::Util::_apply_all_roles('Class::MOP::Class::Immutable::Moose::Meta::Class=HASH(0x6d7a90)',
undef, 'a') called at /opt/csw/lib/perl/site_perl/Moose/Util.pm line 99
Moose::Util::apply_all_roles('Class::MOP::Class::Immutable::Moose::Meta::Class=HASH(0x6d7a90)',
'a') called at /opt/csw/lib/perl/site_perl/Moose.pm line 67
Moose::with('Class::MOP::Class::Immutable::Moose::Meta::Class=HASH(0x6d7a90)',
'a') called at /opt/csw/lib/perl/site_perl/Moose/Exporter.pm line 370
Moose::with('a') called at b.pm line 6
Class::MOP::Class:::around('CODE(0x626410)', 'b') called at
/opt/csw/lib/perl/site_perl/Class/MOP/Method/Wrapped.pm line 162
Class::MOP::Method::Wrapped::__ANON__('b') called at
/opt/csw/lib/perl/site_perl/Class/MOP/Method/Wrapped.pm line 91
b::BUILDARGS('b') called at constructor b::new (defined at
b.pmline 11) line 6
b::new('b') called at a.pl line 8
--
woosley.xu. http://twitter.com/redicaps