Acme-Perl-VM
view release on metacpan or search on metacpan
lib/Acme/Perl/VM/Scope.pm view on Meta::CPAN
package Acme::Perl::VM::Scope;
use Mouse;
use Acme::Perl::VM qw(APVM_DEBUG $PL_op);
use Acme::Perl::VM::B ();
use Scalar::Util ();
if(APVM_DEBUG){
has saved_state => (
is => 'ro',
builder => '_save',
);
}
sub type{
my($self) = @_;
my $class = ref $self;
$class =~ s/^Acme::Perl::VM::Scope:://;
return $class;
}
sub _save{
my(undef, $file, $line) = caller(2);
$file =~ s{\A .* Acme/Perl .* /}{}xmsi;
my $proc = $PL_op ? ('in '.$PL_op->name.' ') : '';
return sprintf q{saved %s}.q{at %s line %d}, $proc, $file, $line;
}
no Mouse;
__PACKAGE__->meta->make_immutable();
package Acme::Perl::VM::Scope::Value;
use Mouse;
extends 'Acme::Perl::VM::Scope';
has value => (
is => 'ro',
required => 1,
);
has value_ref => (
is => 'ro',
isa => 'Ref',
required => 1,
);
sub leave{
my($self) = @_;
${ $self->value_ref } = $self->value;
return;
}
no Mouse;
__PACKAGE__->meta->make_immutable();
package Acme::Perl::VM::Scope::Tmps;
use Mouse;
extends 'Acme::Perl::VM::Scope::Value';
no Mouse;
__PACKAGE__->meta->make_immutable();
package Acme::Perl::VM::Scope::Comppad;
use Mouse;
extends 'Acme::Perl::VM::Scope';
use Acme::Perl::VM qw($PL_comppad $PL_comppad_name @PL_curpad);
has comppad => (
is => 'ro',
isa => 'Maybe[B::AV]',
);
has comppad_name => (
is => 'ro',
isa => 'Maybe[B::AV]',
);
sub leave{
my($self) = @_;
( run in 2.601 seconds using v1.01-cache-2.11-cpan-6de40a662fe )