X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDevel%2FDeclare%2FMethodInstaller%2FSimple.pm;h=ee9a2e9d6cf2deb19b33272758c1036aff7eb84d;hb=b968549dde4c8a36fccca7aca22bcd092242b099;hp=e8b5668d4f741d3918b56accf745210a5dbf254e;hpb=a664754d8ce3736abcfeb16ea5115d99cec724fd;p=p5sagit%2FDevel-Declare.git diff --git a/lib/Devel/Declare/MethodInstaller/Simple.pm b/lib/Devel/Declare/MethodInstaller/Simple.pm index e8b5668..ee9a2e9 100644 --- a/lib/Devel/Declare/MethodInstaller/Simple.pm +++ b/lib/Devel/Declare/MethodInstaller/Simple.pm @@ -7,6 +7,8 @@ use Sub::Name; use strict; use warnings; +our $VERSION = '0.006015'; + sub install_methodhandler { my $class = shift; my %args = @_; @@ -15,58 +17,14 @@ sub install_methodhandler { *{$args{into}.'::'.$args{name}} = sub (&) {}; } + my $warnings = warnings::enabled("redefine"); my $ctx = $class->new(%args); Devel::Declare->setup_for( $args{into}, - { $args{name} => { const => sub { $ctx->parser(@_) } } } + { $args{name} => { const => sub { $ctx->parser(@_, $warnings) } } } ); } -sub strip_attrs { - my $self = shift; - $self->skipspace; - - my $linestr = Devel::Declare::get_linestr; - my $attrs = ''; - - if (substr($linestr, $self->offset, 1) eq ':') { - while (substr($linestr, $self->offset, 1) ne '{') { - if (substr($linestr, $self->offset, 1) eq ':') { - substr($linestr, $self->offset, 1) = ''; - Devel::Declare::set_linestr($linestr); - - $attrs .= ':'; - } - - $self->skipspace; - $linestr = Devel::Declare::get_linestr(); - - if (my $len = Devel::Declare::toke_scan_word($self->offset, 0)) { - my $name = substr($linestr, $self->offset, $len); - substr($linestr, $self->offset, $len) = ''; - Devel::Declare::set_linestr($linestr); - - $attrs .= " ${name}"; - - if (substr($linestr, $self->offset, 1) eq '(') { - my $length = Devel::Declare::toke_scan_str($self->offset); - my $arg = Devel::Declare::get_lex_stuff(); - Devel::Declare::clear_lex_stuff(); - $linestr = Devel::Declare::get_linestr(); - substr($linestr, $self->offset, $length) = ''; - Devel::Declare::set_linestr($linestr); - - $attrs .= "(${arg})"; - } - } - } - - $linestr = Devel::Declare::get_linestr(); - } - - return $attrs; -} - sub code_for { my ($self, $name) = @_; @@ -78,7 +36,11 @@ sub code_for { my $code = shift; # So caller() gets the subroutine name no strict 'refs'; - *{$name} = subname $name => $code; + my $installer = $self->warning_on_redefine + ? sub { *{$name} = subname $name => $code; } + : sub { no warnings 'redefine'; + *{$name} = subname $name => $code; }; + $installer->(); return; }; } else { @@ -112,7 +74,7 @@ sub parser { return; } -sub parse_proto { } +sub parse_proto { '' } sub inject_parsed_proto { return $_[1];