Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[mm] Implement gather stubs
  • Loading branch information
sorear committed Sep 19, 2010
1 parent 8816670 commit b4eb756
Show file tree
Hide file tree
Showing 3 changed files with 7 additions and 82 deletions.
63 changes: 0 additions & 63 deletions src/Decl.pm
Expand Up @@ -24,43 +24,6 @@ use CgOp;
no Moose;
}

{
package Decl::Sub;
use Moose;
extends 'Decl';

has var => (isa => 'Str', is => 'ro', required => 1);
has code => (isa => 'Body', is => 'ro', required => 1);

sub bodies { $_[0]->code }

sub used_slots {
[$_[0]->var, 'Variable', $_[1] ? 3 :
($_[0]->dyn_name($_[0]->var) ? 0 : 4)];
}

sub preinit_code {
my ($self, $body) = @_;

$body->needs_protovars ?
CgOp::prog(
CgOp::protosub($self->code),
CgOp::proto_var($self->var,
$body->mainline ? CgOp::sub_obj($self->code)
: CgOp::sub_var($self->code))) :
CgOp::protosub($self->code);
}

sub enter_code {
my ($self, $body) = @_;
$body->mainline ? CgOp::noop :
CgOp::scopedlex($self->var, CgOp::sub_var($self->code));
}

__PACKAGE__->meta->make_immutable;
no Moose;
}

{
package Decl::SimpleVar;
use Moose;
Expand Down Expand Up @@ -107,32 +70,6 @@ use CgOp;
no Moose;
}

# only use this for classes &c which have no meaningful commoning behavior
{
package Decl::PackageAlias;
use Moose;
extends 'Decl';

has slot => (isa => 'Str', is => 'ro', required => 1);
has path => (isa => 'ArrayRef[Str]', is => 'ro',
default => sub { ['OUR'] });
has name => (isa => 'Str', is => 'ro', required => 1);

sub used_slots { }

sub preinit_code {
my ($self, $body) = @_;

CgOp::bset(($body->lookup_var($self->name, @{ $self->path }))[1],
CgOp::newboundvar(1, 0, CgOp::scopedlex($self->slot)))
}

sub enter_code { }

__PACKAGE__->meta->make_immutable;
no Moose;
}

{
package Decl::OurAlias;
use Moose;
Expand Down
7 changes: 7 additions & 0 deletions src/Metamodel.pm
Expand Up @@ -495,6 +495,13 @@ sub Op::BareBlock::begin {
delete $self->{$_} for (qw( body ));
}

sub Op::Gather::begin {
my $self = shift;
my $body = $self->body->begin;
$opensubs[-1]->add_my_sub($self->var, $body);
delete $self->{$_} for (qw( body ));
}

sub Op::WhateverCode::begin {
my $self = shift;
my $body = Body->new(name => 'ANON', transparent => 1, do => $self->ops,
Expand Down
19 changes: 0 additions & 19 deletions src/Op.pm
Expand Up @@ -776,20 +776,6 @@ use CgOp;
# proto_too, exports, ltm
has once => (isa => 'Bool', is => 'ro', default => 0);

sub lift_decls {
my ($self) = @_;
my @r;
push @r, Decl::Sub->new(var => $self->var, code => $self->body);
push @r, Decl::HasMethod->new(name => $self->method_too,
var => $self->var) if defined($self->method_too);
push @r, Decl::HasMultiRx->new(name => $self->proto_too,
var => $self->var) if defined($self->proto_too);
push @r, Decl::PackageAlias->new(slot => $self->var,
name => $self->var, path => [ 'OUR', 'EXPORT', $_ ])
for (@{ $self->exports });
@r;
}

sub code {
my ($self, $body) = @_;
CgOp::scopedlex($self->var);
Expand Down Expand Up @@ -958,11 +944,6 @@ use CgOp;
has body => (isa => 'Body', is => 'ro', required => 1);
has var => (isa => 'Str', is => 'ro', required => 1);

sub lift_decls {
my ($self) = @_;
Decl::Sub->new(var => $self->var, code => $self->body);
}

sub code {
my ($self, $body) = @_;

Expand Down

0 comments on commit b4eb756

Please sign in to comment.