better definition context for native delegation methods
[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
38bf2a25 10use base 'Class::MOP::Method';
11
12## accessors
13
14sub new {
15 confess __PACKAGE__ . " is an abstract base class, you must provide a constructor.";
16}
17
18sub _initialize_body {
19 confess "No body to initialize, " . __PACKAGE__ . " is an abstract base class";
20}
21
22sub _generate_description {
23 my ( $self, $context ) = @_;
24 $context ||= $self->definition_context;
25
b2ed09c4 26 my $desc = "generated method";
27 my $origin = "unknown origin";
28
29 if (defined $context) {
30 if (defined $context->{description}) {
31 $desc = $context->{description};
32 }
33
34 if (defined $context->{file} || defined $context->{line}) {
35 $origin = "defined at "
36 . (defined $context->{file}
37 ? $context->{file} : "<unknown file>")
38 . " line "
39 . (defined $context->{line}
40 ? $context->{line} : "<unknown line>");
41 }
38bf2a25 42 }
b2ed09c4 43
44 return "$desc ($origin)";
38bf2a25 45}
46
47sub _compile_code {
48 my ( $self, @args ) = @_;
49 unshift @args, 'source' if @args % 2;
50 my %args = @args;
51
52 my $context = delete $args{context};
53 my $environment = $self->can('_eval_environment')
54 ? $self->_eval_environment
55 : {};
56
57 return eval_closure(
58 environment => $environment,
59 description => $self->_generate_description($context),
60 %args,
61 );
62}
63
641;
65
66__END__
67
68=pod
69
70=head1 NAME
71
72Class::MOP::Method::Generated - Abstract base class for generated methods
73
74=head1 DESCRIPTION
75
76This is a C<Class::MOP::Method> subclass which is subclassed by
77C<Class::MOP::Method::Accessor> and
78C<Class::MOP::Method::Constructor>.
79
80It is not intended to be used directly.
81
82=cut
83