our %NO_BUILD;
our $BUILD_MAKER;
+our $DEMOLISH_MAKER;
sub new {
my $class = shift;
};
}
+# Inlined into Method::Generate::Constructor::_generate_args() - keep in sync
+sub BUILDARGS {
+ my $class = shift;
+ if ( scalar @_ == 1 ) {
+ unless ( defined $_[0] && ref $_[0] eq 'HASH' ) {
+ die "Single parameters to new() must be a HASH ref"
+ ." data => ". $_[0] ."\n";
+ }
+ return { %{ $_[0] } };
+ }
+ elsif ( @_ % 2 ) {
+ die "The new() method for $class expects a hash reference or a key/value list."
+ . " You passed an odd number of arguments\n";
+ }
+ else {
+ return {@_};
+ }
+}
+
sub BUILDALL {
my $self = shift;
$self->${\(($BUILD_MAKER ||= do {
})->generate_method(ref($self)))}(@_);
}
+sub DESTROY {
+ my $self = shift;
+
+ return unless $self->can('DEMOLISH'); # short circuit
+
+ require Moo::_Utils;
+
+ my $e = do {
+ local $?;
+ local $@;
+ eval {
+ # DEMOLISHALL
+
+ $self->DEMOLISHALL($Moo::_Utils::_in_global_destruction);
+ };
+ $@;
+ };
+
+ no warnings 'misc';
+ die $e if $e; # rethrow
+}
+
+sub DEMOLISHALL {
+ my $self = shift;
+ $self->${\(($DEMOLISH_MAKER ||= do {
+ require Method::Generate::DemolishAll;
+ Method::Generate::DemolishAll->new
+ })->generate_method(ref($self)))}(@_);
+}
+
sub does {
require Role::Tiny;
{ no warnings 'redefine'; *does = \&Role::Tiny::does_role }