1 package Devel::Declare::Context::Simple;
4 use B::Hooks::EndOfScope;
15 @{$self}{ qw(Declarator Offset) } = @_;
21 return $self->{Offset}
26 $self->{Offset} += shift;
31 return $self->{Declarator}
36 $self->inc_offset(Devel::Declare::toke_move_past_token($self->offset));
41 $self->inc_offset(Devel::Declare::toke_skipspace($self->offset));
46 my $line = Devel::Declare::get_linestr();
53 Devel::Declare::set_linestr($line);
59 if (my $len = Devel::Declare::toke_scan_word( $self->offset, 1 )) {
60 my $linestr = $self->get_linestr();
61 my $name = substr( $linestr, $self->offset, $len );
62 substr( $linestr, $self->offset, $len ) = '';
63 $self->set_linestr($linestr);
74 if (my $len = Devel::Declare::toke_scan_ident( $self->offset )) {
75 my $linestr = $self->get_linestr();
76 my $ident = substr( $linestr, $self->offset, $len );
77 substr( $linestr, $self->offset, $len ) = '';
78 $self->set_linestr($linestr);
90 my $linestr = $self->get_linestr();
91 if (substr($linestr, $self->offset, 1) eq '(') {
92 my $length = Devel::Declare::toke_scan_str($self->offset);
93 my $proto = Devel::Declare::get_lex_stuff();
94 Devel::Declare::clear_lex_stuff();
95 $linestr = $self->get_linestr();
97 substr($linestr, $self->offset, $length) = '';
98 $self->set_linestr($linestr);
105 sub get_curstash_name {
106 return Devel::Declare::get_curstash_name;
111 my $pack = $self->get_curstash_name;
112 Devel::Declare::shadow_sub( $pack . '::' . $self->declarator, $_[0] );
115 sub inject_if_block {
118 my $before = shift || '';
122 my $linestr = $self->get_linestr;
123 if (substr($linestr, $self->offset, 1) eq '{') {
124 substr($linestr, $self->offset + 1, 0) = $inject;
125 substr($linestr, $self->offset, 0) = $before;
126 $self->set_linestr($linestr);
132 sub scope_injector_call {
134 my $inject = shift || '';
135 return ' BEGIN { ' . ref($self) . "->inject_scope('${inject}') }; ";
142 my $linestr = Devel::Declare::get_linestr;
143 return unless defined $linestr;
144 my $offset = Devel::Declare::get_linestr_offset;
145 substr( $linestr, $offset, 0 ) = ';' . $inject;
146 Devel::Declare::set_linestr($linestr);