1 package Devel::Declare::Context::Simple;
15 @{$self}{ qw(Declarator Offset) } = @_;
19 sub offset : lvalue { shift->{Offset}; }
20 sub declarator { shift->{Declarator} }
24 $self->offset += Devel::Declare::toke_move_past_token( $self->offset );
29 $self->offset += Devel::Declare::toke_skipspace( $self->offset );
35 if (my $len = Devel::Declare::toke_scan_word( $self->offset, 1 )) {
36 my $linestr = Devel::Declare::get_linestr();
37 my $name = substr( $linestr, $self->offset, $len );
38 substr( $linestr, $self->offset, $len ) = '';
39 Devel::Declare::set_linestr($linestr);
49 my $linestr = Devel::Declare::get_linestr();
50 if (substr( $linestr, $self->offset, 1 ) eq '(') {
51 my $length = Devel::Declare::toke_scan_str( $self->offset );
52 my $proto = Devel::Declare::get_lex_stuff();
53 Devel::Declare::clear_lex_stuff();
54 $linestr = Devel::Declare::get_linestr();
55 substr( $linestr, $self->offset, $length ) = '';
56 Devel::Declare::set_linestr($linestr);
62 sub get_curstash_name {
63 return Devel::Declare::get_curstash_name;
68 my $pack = $self->get_curstash_name;
69 Devel::Declare::shadow_sub( $pack . '::' . $self->declarator, $_[0] );
76 my $linestr = Devel::Declare::get_linestr;
77 if (substr( $linestr, $self->offset, 1 ) eq '{') {
78 substr( $linestr, $self->offset + 1, 0 ) = $inject;
79 Devel::Declare::set_linestr($linestr);
83 sub scope_injector_call {
84 return ' BEGIN { ' . __PACKAGE__ . '::inject_scope }; ';
90 $^H{DD_METHODHANDLERS} = Scope::Guard->new(sub {
91 my $linestr = Devel::Declare::get_linestr;
92 my $offset = Devel::Declare::get_linestr_offset;
93 substr( $linestr, $offset, 0 ) = ';';
94 Devel::Declare::set_linestr($linestr);