these aren't actually part of DEMOLISHALL
[gitmo/Moose.git] / lib / Moose / Meta / Method / Accessor.pm
1
2 package Moose::Meta::Method::Accessor;
3
4 use strict;
5 use warnings;
6
7 use Try::Tiny;
8
9 use base 'Moose::Meta::Method',
10          'Class::MOP::Method::Accessor';
11
12 sub _error_thrower {
13     my $self = shift;
14     return $self->associated_attribute
15         if ref($self) && defined($self->associated_attribute);
16     return $self->SUPER::_error_thrower;
17 }
18
19 sub _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     };
33 }
34
35 sub _eval_environment {
36     my $self = shift;
37
38     my $attr                = $self->associated_attribute;
39     my $type_constraint_obj = $attr->type_constraint;
40
41     return {
42         '$attr'                => \$attr,
43         '$meta'                => \$self,
44         '$type_constraint_obj' => \$type_constraint_obj,
45         '$type_constraint'     => \(
46               $type_constraint_obj
47                   ? $type_constraint_obj->_compiled_type_constraint
48                   : undef
49         ),
50     };
51 }
52
53 sub _instance_is_inlinable {
54     my $self = shift;
55     return $self->associated_attribute->associated_class->instance_metaclass->is_inlinable;
56 }
57
58 sub _generate_reader_method {
59     my $self = shift;
60     $self->_instance_is_inlinable ? $self->_generate_reader_method_inline(@_)
61                                   : $self->SUPER::_generate_reader_method(@_);
62 }
63
64 sub _generate_writer_method {
65     my $self = shift;
66     $self->_instance_is_inlinable ? $self->_generate_writer_method_inline(@_)
67                                   : $self->SUPER::_generate_writer_method(@_);
68 }
69
70 sub _generate_accessor_method {
71     my $self = shift;
72     $self->_instance_is_inlinable ? $self->_generate_accessor_method_inline(@_)
73                                   : $self->SUPER::_generate_accessor_method(@_);
74 }
75
76 sub _generate_predicate_method {
77     my $self = shift;
78     $self->_instance_is_inlinable ? $self->_generate_predicate_method_inline(@_)
79                                   : $self->SUPER::_generate_predicate_method(@_);
80 }
81
82 sub _generate_clearer_method {
83     my $self = shift;
84     $self->_instance_is_inlinable ? $self->_generate_clearer_method_inline(@_)
85                                   : $self->SUPER::_generate_clearer_method(@_);
86 }
87
88 sub _writer_value_needs_copy {
89     shift->associated_attribute->_writer_value_needs_copy(@_);
90 }
91
92 sub _inline_tc_code {
93     shift->associated_attribute->_inline_tc_code(@_);
94 }
95
96 sub _inline_check_constraint {
97     shift->associated_attribute->_inline_check_constraint(@_);
98 }
99
100 sub _inline_check_lazy {
101     shift->associated_attribute->_inline_check_lazy(@_);
102 }
103
104 sub _inline_store_value {
105     shift->associated_attribute->_inline_instance_set(@_) . ';';
106 }
107
108 sub _inline_get_old_value_for_trigger {
109     shift->associated_attribute->_inline_get_old_value_for_trigger(@_);
110 }
111
112 sub _inline_trigger {
113     shift->associated_attribute->_inline_trigger(@_);
114 }
115
116 sub _get_value {
117     shift->associated_attribute->_inline_instance_get(@_);
118 }
119
120 sub _has_value {
121     shift->associated_attribute->_inline_instance_has(@_);
122 }
123
124 1;
125
126 # ABSTRACT: A Moose Method metaclass for accessors
127
128 __END__
129
130 =pod
131
132 =head1 DESCRIPTION
133
134 This class is a subclass of L<Class::MOP::Method::Accessor> that
135 provides additional Moose-specific functionality, all of which is
136 private.
137
138 To understand this class, you should read the the
139 L<Class::MOP::Method::Accessor> documentation.
140
141 =head1 BUGS
142
143 See L<Moose/BUGS> for details on reporting bugs.
144
145 =cut