1 package Devel::Declare::MethodInstaller::Simple;
3 use base 'Devel::Declare::Context::Simple';
10 sub install_methodhandler {
15 *{$args{into}.'::'.$args{name}} = sub (&) {};
18 my $ctx = $class->new( %args );
19 Devel::Declare->setup_for(
21 { $args{name} => { const => sub { $ctx->parser(@_) } } }
30 $ctx->skip_declarator;
31 my $name = $ctx->strip_name;
32 my $proto = $ctx->strip_proto;
33 my @decl = $ctx->parse_proto($proto);
34 my $inject = $ctx->inject_parsed_proto(@decl);
36 $inject = $ctx->scope_injector_call() . $inject;
38 $ctx->inject_if_block($inject);
40 my $pkg = $ctx->get_curstash_name;
41 $name = join( '::', $pkg, $name )
42 unless( $name =~ /::/ );
43 $ctx->shadow( sub (&) {
45 # So caller() gets the subroutine name
47 *{$name} = subname $name => $code;
50 $ctx->shadow(sub (&) { shift });
54 sub inject_parsed_proto {