1 package Devel::Declare::Context::Simple;
4 use B::Hooks::EndOfScope;
8 sub DEBUG { warn "@_" }
16 @{$self}{ qw(Declarator Offset) } = @_;
20 sub offset : lvalue { shift->{Offset}; }
21 sub declarator { shift->{Declarator} }
25 $self->offset += Devel::Declare::toke_move_past_token( $self->offset );
30 $self->offset += Devel::Declare::toke_skipspace( $self->offset );
36 if (my $len = Devel::Declare::toke_scan_word( $self->offset, 1 )) {
37 my $linestr = Devel::Declare::get_linestr();
38 my $name = substr( $linestr, $self->offset, $len );
39 substr( $linestr, $self->offset, $len ) = '';
40 Devel::Declare::set_linestr($linestr);
52 my $linestr = Devel::Declare::get_linestr();
53 if (substr($linestr, $self->offset, 1) eq '(') {
54 my $length = Devel::Declare::toke_scan_str($self->offset);
55 my $proto = Devel::Declare::get_lex_stuff();
56 Devel::Declare::clear_lex_stuff();
57 $linestr = Devel::Declare::get_linestr();
58 substr($linestr, $self->offset, $length) = '';
59 Devel::Declare::set_linestr($linestr);
66 sub get_curstash_name {
67 return Devel::Declare::get_curstash_name;
72 my $pack = $self->get_curstash_name;
73 Devel::Declare::shadow_sub( $pack . '::' . $self->declarator, $_[0] );
79 my $before = shift || '';
83 my $linestr = Devel::Declare::get_linestr;
84 if (substr($linestr, $self->offset, 1) eq '{') {
85 substr($linestr, $self->offset + 1, 0) = $inject;
86 substr($linestr, $self->offset, 0) = $before;
87 Devel::Declare::set_linestr($linestr);
91 sub scope_injector_call {
93 my $inject = shift || '';
94 return ' BEGIN { ' . ref($self) . "->inject_scope('${inject}') }; ";
101 my $linestr = Devel::Declare::get_linestr;
102 return unless defined $linestr;
103 my $offset = Devel::Declare::get_linestr_offset;
104 substr( $linestr, $offset, 0 ) = ';' . $inject;
105 Devel::Declare::set_linestr($linestr);