Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Extract a pass from ANF conversion
  • Loading branch information
sorear committed Jul 26, 2010
1 parent 0931115 commit e6fa129
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 20 deletions.
6 changes: 6 additions & 0 deletions Body.pm
Expand Up @@ -76,6 +76,12 @@ use CgOp ();
map { $_->preinit_code($self) } @{ $self->decls };
}

sub to_anf {
my ($self) = @_;
$self->cgoptree($self->cgoptree->cps_convert(1));
$_->to_anf for (map { $_->bodies } @{ $self->decls });
}

sub write {
my ($self) = @_;
CodeGen->new(lex2types => $self->lexical, csname => $self->csname,
Expand Down
5 changes: 1 addition & 4 deletions CodeGen.pm
Expand Up @@ -563,10 +563,7 @@ use 5.010;

sub BUILD {
my $self = shift;
#say STDERR YAML::XS::Dump($self->ops);
my $cps = $self->ops->cps_convert;
#say STDERR YAML::XS::Dump($cps);
$cps->var_cg($self);
$self->ops->var_cg($self);
}

__PACKAGE__->meta->make_immutable;
Expand Down
1 change: 1 addition & 0 deletions CompilerDriver.pm
Expand Up @@ -58,6 +58,7 @@ sub compile {
$ast->lift_decls;
$ast->extract_scopes;
$ast->to_cgop;
$ast->to_anf;

my $basename = $::UNITNAME;
$basename =~ s/::/\//g;
Expand Down
33 changes: 17 additions & 16 deletions Unit.pm
Expand Up @@ -11,7 +11,7 @@ use 5.010;
package Unit;
use Moose;
has mainline => (isa => 'Body', is => 'ro', required => 1);
has mainboot => (isa => 'CgOp', is => 'rw');
has bootcgop => (isa => 'CgOp', is => 'rw');
has name => (isa => 'Str', is => 'ro', required => 1);
has setting => (is => 'ro');

Expand All @@ -23,19 +23,9 @@ use 5.010;
}

sub to_cgop {
$_[0]->mainboot($_[0]->mainline->to_cgop);
}

sub extract_scopes {
$_[0]->mainline->extract_scopes($_[0]->setting);
}

sub gen_code {
my ($self) = @_;
CodeGen->know_module($self->csname($self->setting_name));
CodeGen->know_module($self->csname);
CodeGen->new(csname => 'BOOT',
ops => CgOp::letn('pkg', CgOp::rawsget('Kernel.Global'),
my $self = shift;
$self->mainline->to_cgop;
$self->bootcgop(CgOp::letn('pkg', CgOp::rawsget('Kernel.Global'),
CgOp::rawscall($self->csname($self->setting_name) . '.Initialize'),
CgOp::letn('protopad',
CgOp::cast('Frame', CgOp::rawsget($self->csname($self->setting_name) .
Expand All @@ -48,6 +38,15 @@ use 5.010;
CgOp::return())));
}

sub to_anf {
$_[0]->mainline->to_anf;
$_[0]->bootcgop($_[0]->bootcgop->cps_convert(0));
}

sub extract_scopes {
$_[0]->mainline->extract_scopes($_[0]->setting);
}

sub csname {
my $x = $_[1] // $_[0]->name;
$x =~ s/::/./g;
Expand All @@ -57,11 +56,13 @@ use 5.010;

sub write {
my ($self) = @_;
#say STDERR (YAML::XS::Dump($self));
CodeGen->know_module($self->csname($self->setting_name));
CodeGen->know_module($self->csname);

print ::NIECZA_OUT <<EOH;
public class @{[ $self->csname ]} {
EOH
$self->gen_code->write;
CodeGen->new(csname => 'BOOT', ops => $self->bootcgop)->write;
$self->mainline->write;
if ($self->is_setting) {
print ::NIECZA_OUT <<EOSB ;
Expand Down

0 comments on commit e6fa129

Please sign in to comment.