Skip to content

Commit

Permalink
Rewrite the ANF converter
Browse files Browse the repository at this point in the history
This new presentation makes the representation shift much more explicit, and
brings us closer to portability off the CLR.
  • Loading branch information
sorear committed Sep 29, 2010
1 parent e417169 commit 0bfce15
Show file tree
Hide file tree
Showing 9 changed files with 365 additions and 321 deletions.
2 changes: 1 addition & 1 deletion Niecza.proj
Expand Up @@ -16,7 +16,7 @@
</PropertyGroup>

<ItemGroup>
<CompilerPerl Include="src\Body.pm;src\CClass.pm;src\CgOp.pm;src\CSharpBackend.pm;src\CodeGen.pm;src\CompilerDriver.pm;src\Metamodel.pm;src\Op.pm;src\Optimizer\Beta.pm;src\Optimizer\RxSimple.pm;src\RxOp.pm;src\Sig.pm;src\Unit.pm;src\Niecza\Actions.pm;src\Niecza\Grammar.pmc"/>
<CompilerPerl Include="src\Body.pm;src\CClass.pm;src\CgOp.pm;src\CgOpToCLROp.pm;src\CSharpBackend.pm;src\CodeGen.pm;src\CompilerDriver.pm;src\Metamodel.pm;src\Op.pm;src\Optimizer\Beta.pm;src\Optimizer\RxSimple.pm;src\RxOp.pm;src\Sig.pm;src\Unit.pm;src\Niecza\Actions.pm;src\Niecza\Grammar.pmc"/>
</ItemGroup>

<!-- Meta targets -->
Expand Down
6 changes: 3 additions & 3 deletions lib/SAFE.setting
Expand Up @@ -485,7 +485,7 @@ my class Array is List {
ct (- (cast Int32 (unbox Double (@ (pos 1))))
(rawcall (l i) Count))
(ternary (>= (l ct) (int 0)) [prog]
[die "Autovivification collision"])
[sink [die "Autovivification collision"]])
(whileloop 0 0 (!= (l ct) (int 0))
(prog
(l ct (- (l ct) (int 1)))
Expand All @@ -512,7 +512,7 @@ my class Hash {
(letn d [unbox Dictionary<string,Variable> (@ (pos 0))]
k [unbox String (@ (methodcall (pos 1) Str))]
[ternary (rawcall (l d) ContainsKey (l k))
(die "Autovivification collision")
(sink (die "Autovivification collision"))
(prog)]
[setindex (l k) (l d) (pos 2)]
[null Variable])
Expand Down Expand Up @@ -640,7 +640,7 @@ my class CallFrame {
sub caller { Q:CgOp { (ns (getfield caller (getfield caller (callframe)))) } }
sub callframe { Q:CgOp { (ns (getfield caller (callframe))) } }

sub die($msg) { Q:CgOp { (prog (die (@ (l $msg))) (null Variable)) } }
sub die($msg) { Q:CgOp { (die (@ (l $msg))) } }
# XXX multi dispatch
sub next {
Expand Down
6 changes: 3 additions & 3 deletions src/CSharpBackend.pm
Expand Up @@ -99,12 +99,12 @@ EOM
$s = $su->setting;
$m = $su->mainline;
}
push @thaw, CgOp::subcall(CgOp::rawsget($m->{peer}{ps}));
push @thaw, CgOp::sink(CgOp::subcall(CgOp::rawsget($m->{peer}{ps})));
});
push @thaw, CgOp::return;

push @cgs, CodeGen->new(csname => 'BOOT', usednamed => 1,
ops => CgOp::prog(@thaw)->cps_convert(0))->csharp;
ops => CgOp::prog(@thaw))->csharp;
}

for (@decls) {
Expand Down Expand Up @@ -341,7 +341,7 @@ sub codegen_sub {

local %haslet;
resolve_lex($_, $ops);
CodeGen->new(csname => $_->{peer}{cbase}, ops => $ops->cps_convert(0),
CodeGen->new(csname => $_->{peer}{cbase}, ops => $ops,
usednamed => $_->{peer}{uname}, minlets => $_->{peer}{nlexn});
}

Expand Down

0 comments on commit 0bfce15

Please sign in to comment.