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 )