1 package Devel::Declare::Context::Simple;
4 use B::Hooks::EndOfScope;
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 );
34 my $line = Devel::Declare::get_linestr();
41 Devel::Declare::set_linestr($line);
47 if (my $len = Devel::Declare::toke_scan_word( $self->offset, 1 )) {
48 my $linestr = $self->get_linestr();
49 my $name = substr( $linestr, $self->offset, $len );
50 substr( $linestr, $self->offset, $len ) = '';
51 $self->set_linestr($linestr);
63 my $linestr = $self->get_linestr();
64 if (substr($linestr, $self->offset, 1) eq '(') {
65 my $length = Devel::Declare::toke_scan_str($self->offset);
66 my $proto = Devel::Declare::get_lex_stuff();
67 Devel::Declare::clear_lex_stuff();
69 # Need to scan ahead more
70 $linestr .= $self->get_linestr();
71 $length = rindex($linestr, ")") - $self->offset + 1;
74 $linestr = $self->get_linestr();
77 substr($linestr, $self->offset, $length) = '';
78 $self->set_linestr($linestr);
85 sub get_curstash_name {
86 return Devel::Declare::get_curstash_name;
91 my $pack = $self->get_curstash_name;
92 Devel::Declare::shadow_sub( $pack . '::' . $self->declarator, $_[0] );
98 my $before = shift || '';
102 my $linestr = $self->get_linestr;
103 if (substr($linestr, $self->offset, 1) eq '{') {
104 substr($linestr, $self->offset + 1, 0) = $inject;
105 substr($linestr, $self->offset, 0) = $before;
106 $self->set_linestr($linestr);
110 sub scope_injector_call {
112 my $inject = shift || '';
113 return ' BEGIN { ' . ref($self) . "->inject_scope('${inject}') }; ";
120 my $linestr = Devel::Declare::get_linestr;
121 return unless defined $linestr;
122 my $offset = Devel::Declare::get_linestr_offset;
123 substr( $linestr, $offset, 0 ) = ';' . $inject;
124 Devel::Declare::set_linestr($linestr);