sub generate_constructor_method_inline {
my ($class, $meta) = @_;
- my @attrs = $meta->compute_all_applicable_attributes;
+ my $associated_metaclass_name = $meta->name;
+ my @attrs = $meta->get_all_attributes;
my $buildall = $class->_generate_BUILDALL($meta);
my $buildargs = $class->_generate_BUILDARGS($meta);
my $processattrs = $class->_generate_processattrs($meta, \@attrs);
my $code = <<"...";
sub {
my \$class = shift;
+ return \$class->Mouse::Object::new(\@_)
+ if \$class ne '$associated_metaclass_name';
$buildargs;
my \$instance = bless {}, \$class;
$processattrs;
}
$code .= "
\$attrs[$index]->verify_type_constraint_error(
- '$key', \$_, \$attrs[$index]->type_constraint
+ '$key', \$value, \$attrs[$index]->type_constraint
)
}
";
if ($attr->has_type_constraint) {
$code .= "{
unless (\$attrs[$index]->{type_constraint}->check(\$value)) {
- \$attrs[$index]->verify_type_constraint_error('$key', \$_, \$attrs[$index]->type_constraint)
+ \$attrs[$index]->verify_type_constraint_error('$key', \$value, \$attrs[$index]->type_constraint)
}
}";
}
no warnings 'once';
for my $klass ($meta->linearized_isa) {
if (*{ $klass . '::BUILD' }{CODE}) {
- push @code, qq{${klass}::BUILD(\$instance, \$args);};
+ unshift @code, qq{${klass}::BUILD(\$instance, \$args);};
}
}
return join "\n", @code;