move eval_environment for constructors to the metaclass
[gitmo/Moose.git] / lib / Moose / Meta / Method / Constructor.pm
CommitLineData
5cf3dbcf 1
2package Moose::Meta::Method::Constructor;
3
4use strict;
5use warnings;
6
0d922627 7use Carp ();
3eeaf081 8use List::MoreUtils 'any';
0fa70d03 9use Scalar::Util 'blessed', 'weaken', 'looks_like_number', 'refaddr';
55c361dc 10use Try::Tiny;
5cf3dbcf 11
badb7e89 12use base 'Moose::Meta::Method',
bc89e9b5 13 'Class::MOP::Method::Constructor';
5cf3dbcf 14
15sub new {
16 my $class = shift;
17 my %options = @_;
7a5b07b3 18
3e504337 19 my $meta = $options{metaclass};
20
21 (ref $options{options} eq 'HASH')
a9538ac9 22 || $class->throw_error("You must pass a hash of options", data => $options{options});
7a5b07b3 23
1b2aea39 24 ($options{package_name} && $options{name})
a9538ac9 25 || $class->throw_error("You must supply the package_name and name parameters $Class::MOP::Method::UPGRADE_ERROR_TEXT");
1b2aea39 26
5cf3dbcf 27 my $self = bless {
d03bd989 28 'body' => undef,
e606ae5f 29 'package_name' => $options{package_name},
30 'name' => $options{name},
e606ae5f 31 'options' => $options{options},
e606ae5f 32 'associated_metaclass' => $meta,
0f1a71fc 33 'definition_context' => $options{definition_context},
0fa70d03 34 '_expected_method_class' => $options{_expected_method_class} || 'Moose::Object',
5cf3dbcf 35 } => $class;
36
7a5b07b3 37 # we don't want this creating
38 # a cycle in the code, if not
5cf3dbcf 39 # needed
e606ae5f 40 weaken($self->{'associated_metaclass'});
5cf3dbcf 41
f5b0af77 42 $self->_initialize_body;
5cf3dbcf 43
7a5b07b3 44 return $self;
5cf3dbcf 45}
46
5cf3dbcf 47## method
48
f5b0af77 49sub _initialize_body {
5cf3dbcf 50 my $self = shift;
e247d17c 51 $self->{'body'} = $self->_generate_constructor_method_inline;
52}
53
5cf3dbcf 541;
55
ad46f524 56# ABSTRACT: Method Meta Object for constructors
57
5cf3dbcf 58__END__
59
60=pod
61
5cf3dbcf 62=head1 DESCRIPTION
63
cec39889 64This class is a subclass of L<Class::MOP::Method::Constructor> that
cefc9e36 65provides additional Moose-specific functionality
66
67To understand this class, you should read the the
cec39889 68L<Class::MOP::Method::Constructor> documentation as well.
d44714be 69
bc89e9b5 70=head1 INHERITANCE
71
72C<Moose::Meta::Method::Constructor> is a subclass of
73L<Moose::Meta::Method> I<and> L<Class::MOP::Method::Constructor>.
74
c5fc2c21 75=head1 BUGS
76
77See L<Moose/BUGS> for details on reporting bugs.
78
5cf3dbcf 79=cut
80