))
);
-# NOTE: (meta-circularity)
-# This should be one of the last things done
-# it will "tie the knot" with Class::MOP::Attribute
-# so that it uses the attributes meta-objects
-# to construct itself.
-Class::MOP::Attribute->meta->add_method('new' => sub {
- my ( $class, @args ) = @_;
-
- unshift @args, "name" if @args % 2 == 1;
- my %options = @args;
-
- my $name = $options{name};
-
- (defined $name && $name)
- || confess "You must provide a name for the attribute";
- $options{init_arg} = $name
- if not exists $options{init_arg};
-
- if(exists $options{builder}){
- confess("builder must be a defined scalar value which is a method name")
- if ref $options{builder} || !(defined $options{builder});
- confess("Setting both default and builder is not allowed.")
- if exists $options{default};
- } else {
- (Class::MOP::Attribute::is_default_a_coderef(\%options))
- || confess("References are not allowed as default values, you must ".
- "wrap the default of '$name' in a CODE reference (ex: sub { [] } and not [])")
- if exists $options{default} && ref $options{default};
- }
-
- # return the new object
- $class->meta->new_object(%options);
-});
-
Class::MOP::Attribute->meta->add_method('clone' => sub {
my $self = shift;
$self->meta->clone_object($self, @_);
))
);
-# FIMXE prime candidate for immutablization
-Class::MOP::Method->meta->add_method('wrap' => sub {
- my ( $class, @args ) = @_;
-
- unshift @args, 'body' if @args % 2 == 1;
-
- my %options = @args;
- my $code = $options{body};
-
- ('CODE' eq ref($code))
- || confess "You must supply a CODE reference to bless, not (" . ($code || 'undef') . ")";
-
- ($options{package_name} && $options{name})
- || confess "You must supply the package_name and name parameters";
-
- # return the new object
- $class->meta->new_object(%options);
-});
-
Class::MOP::Method->meta->add_method('clone' => sub {
my $self = shift;
$self->meta->clone_object($self, @_);
# no actual benefits.
$_->meta->make_immutable(
- ( $_->can("_new") ? (
- inline_constructor => 1,
- constructor_name => "_new",
- ) : (
- inline_constructor => 0,
- ) ),
+ inline_constructor => 1,
+ replace_constructor => 1,
+ constructor_name => "_new",
inline_accessors => 0,
) for qw/
Class::MOP::Package