don't close over the type constraint for inlined tcs
[gitmo/Moose.git] / lib / Moose / Meta / Method / Accessor.pm
CommitLineData
8ee73eeb 1
2package Moose::Meta::Method::Accessor;
3
4use strict;
5use warnings;
6
55c361dc 7use Try::Tiny;
8
39b3bc94 9use base 'Moose::Meta::Method',
d617b644 10 'Class::MOP::Method::Accessor';
11
18748ad6 12sub _error_thrower {
13 my $self = shift;
cc743de9 14 return $self->associated_attribute
15 if ref($self) && defined($self->associated_attribute);
16 return $self->SUPER::_error_thrower;
18748ad6 17}
d617b644 18
55c361dc 19sub _compile_code {
20 my $self = shift;
21 my @args = @_;
22 try {
23 $self->SUPER::_compile_code(@args);
24 }
25 catch {
26 $self->throw_error(
27 'Could not create writer for '
28 . "'" . $self->associated_attribute->name . "' "
29 . 'because ' . $_,
30 error => $_,
31 );
32 };
c9183ffc 33}
34
f5f08b5f 35sub _eval_environment {
36 my $self = shift;
37
38 my $attr = $self->associated_attribute;
39 my $type_constraint_obj = $attr->type_constraint;
40
41 return {
37ffa261 42 '$trigger' => \($attr->trigger),
43 '$default' => \($attr->default),
f5f08b5f 44 '$meta' => \$self,
45 '$type_constraint_obj' => \$type_constraint_obj,
bd068342 46 ($type_constraint_obj && !$type_constraint_obj->can_be_inlined
47 ? ('$type_constraint'
48 => \($type_constraint_obj->_compiled_type_constraint))
49 : ()),
e750d47f 50 (
51 $type_constraint_obj
52 ? %{ $type_constraint_obj->inline_environment }
53 : ()
f5f08b5f 54 ),
37ffa261 55 # XXX ugh
56 ($attr->has_initializer
57 ? ('$attr' => \$attr)
58 : ()),
f5f08b5f 59 };
60}
61
f001c60f 62sub _instance_is_inlinable {
63 my $self = shift;
64 return $self->associated_attribute->associated_class->instance_metaclass->is_inlinable;
65}
66
67sub _generate_reader_method {
68 my $self = shift;
69 $self->_instance_is_inlinable ? $self->_generate_reader_method_inline(@_)
70 : $self->SUPER::_generate_reader_method(@_);
71}
72
73sub _generate_writer_method {
74 my $self = shift;
75 $self->_instance_is_inlinable ? $self->_generate_writer_method_inline(@_)
76 : $self->SUPER::_generate_writer_method(@_);
77}
78
79sub _generate_accessor_method {
80 my $self = shift;
81 $self->_instance_is_inlinable ? $self->_generate_accessor_method_inline(@_)
82 : $self->SUPER::_generate_accessor_method(@_);
83}
84
85sub _generate_predicate_method {
86 my $self = shift;
87 $self->_instance_is_inlinable ? $self->_generate_predicate_method_inline(@_)
88 : $self->SUPER::_generate_predicate_method(@_);
89}
90
91sub _generate_clearer_method {
92 my $self = shift;
93 $self->_instance_is_inlinable ? $self->_generate_clearer_method_inline(@_)
94 : $self->SUPER::_generate_clearer_method(@_);
95}
8ecb1fa0 96
6e50f7e9 97sub _writer_value_needs_copy {
98 shift->associated_attribute->_writer_value_needs_copy(@_);
99}
c350159f 100
1e2c801e 101sub _inline_tc_code {
6e50f7e9 102 shift->associated_attribute->_inline_tc_code(@_);
1e2c801e 103}
104
d617b644 105sub _inline_check_constraint {
6e50f7e9 106 shift->associated_attribute->_inline_check_constraint(@_);
d617b644 107}
108
109sub _inline_check_lazy {
6e50f7e9 110 shift->associated_attribute->_inline_check_lazy(@_);
9df136d0 111}
d617b644 112
1e2c801e 113sub _inline_store_value {
6e50f7e9 114 shift->associated_attribute->_inline_instance_set(@_) . ';';
d617b644 115}
116
3dda07f5 117sub _inline_get_old_value_for_trigger {
6e50f7e9 118 shift->associated_attribute->_inline_get_old_value_for_trigger(@_);
3dda07f5 119}
120
d617b644 121sub _inline_trigger {
6e50f7e9 122 shift->associated_attribute->_inline_trigger(@_);
d617b644 123}
124
1e2c801e 125sub _get_value {
6e50f7e9 126 shift->associated_attribute->_inline_instance_get(@_);
d617b644 127}
128
1e2c801e 129sub _has_value {
6e50f7e9 130 shift->associated_attribute->_inline_instance_has(@_);
d617b644 131}
8ee73eeb 132
1331;
134
ad46f524 135# ABSTRACT: A Moose Method metaclass for accessors
136
8ee73eeb 137__END__
138
139=pod
140
39b3bc94 141=head1 DESCRIPTION
142
ba4dfb8e 143This class is a subclass of L<Class::MOP::Method::Accessor> that
73f769fc 144provides additional Moose-specific functionality, all of which is
145private.
ecb59493 146
73f769fc 147To understand this class, you should read the the
ba4dfb8e 148L<Class::MOP::Method::Accessor> documentation.
39b3bc94 149
150=head1 BUGS
151
d4048ef3 152See L<Moose/BUGS> for details on reporting bugs.
39b3bc94 153
51308c23 154=cut