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);