Merged CMOP into Moose
[gitmo/Moose.git] / lib / Class / MOP / Method / Generated.pm
CommitLineData
38bf2a25 1
2package Class::MOP::Method::Generated;
3
4use strict;
5use warnings;
6
7use Carp 'confess';
8use Eval::Closure;
9
10our $AUTHORITY = 'cpan:STEVAN';
11
12use base 'Class::MOP::Method';
13
14## accessors
15
16sub new {
17 confess __PACKAGE__ . " is an abstract base class, you must provide a constructor.";
18}
19
20sub _initialize_body {
21 confess "No body to initialize, " . __PACKAGE__ . " is an abstract base class";
22}
23
24sub _generate_description {
25 my ( $self, $context ) = @_;
26 $context ||= $self->definition_context;
27
28 return "generated method (unknown origin)"
29 unless defined $context;
30
31 if (defined $context->{description}) {
32 return "$context->{description} "
33 . "(defined at $context->{file} line $context->{line})";
34 } else {
35 return "$context->{file} (line $context->{line})";
36 }
37}
38
39sub _compile_code {
40 my ( $self, @args ) = @_;
41 unshift @args, 'source' if @args % 2;
42 my %args = @args;
43
44 my $context = delete $args{context};
45 my $environment = $self->can('_eval_environment')
46 ? $self->_eval_environment
47 : {};
48
49 return eval_closure(
50 environment => $environment,
51 description => $self->_generate_description($context),
52 %args,
53 );
54}
55
561;
57
58__END__
59
60=pod
61
62=head1 NAME
63
64Class::MOP::Method::Generated - Abstract base class for generated methods
65
66=head1 DESCRIPTION
67
68This is a C<Class::MOP::Method> subclass which is subclassed by
69C<Class::MOP::Method::Accessor> and
70C<Class::MOP::Method::Constructor>.
71
72It is not intended to be used directly.
73
74=cut
75