Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Add a stub Perl6::Sinker to add &sink annotations
This is blatantly stolen from Perl6::Optimizer,
and currently just walks the tree and does nothing else
  • Loading branch information
moritz committed Feb 15, 2012
1 parent a94a530 commit 4d0f65c
Show file tree
Hide file tree
Showing 3 changed files with 78 additions and 2 deletions.
3 changes: 3 additions & 0 deletions src/Perl6/Actions.pm
@@ -1,6 +1,7 @@
use NQPP6Regex;
use Perl6::Pod;
use Perl6::ConstantFolder;
use Perl6::Sinker;
use QRegex;

INIT {
Expand Down Expand Up @@ -252,6 +253,8 @@ class Perl6::Actions is HLL::Actions {
);
}

$mainline := Perl6::Sinker.sink($mainline);

# If our caller wants to know the mainline ctx, provide it here.
# (CTXSAVE is inherited from HLL::Actions.) Don't do this when
# there was an explicit {YOU_ARE_HERE}.
Expand Down
63 changes: 63 additions & 0 deletions src/Perl6/Sinker.pm
@@ -0,0 +1,63 @@
use NQPP6Regex;

# This walks the PAST tree and adds sink context annotations.
class Perl6::Sinker {
method sink($past) {
self.visit_children($past);
}

# Called when we encounter a block in the tree.
method visit_block($block) {
self.visit_children($block);
}

# Called when we encounter a PAST::Op in the tree. Produces either
# the op itself or some replacement opcode to put in the tree.
method visit_op($op) {
self.visit_children($op);
$op;
}

# Handles visiting a PAST::Want node.
method visit_want($want) {
self.visit_children($want)
}

# Handles visit a variable node.
method visit_var($var) {
$var
}

# Visits all of a nodes children, and dispatches appropriately.
method visit_children($node) {
my $i := 0;
while $i < +@($node) {
my $visit := $node[$i];
unless pir::isa($visit, 'String') || pir::isa($visit, 'Integer') || pir::isa($visit, 'Float') {
if $visit.isa(PAST::Op) {
$node[$i] := self.visit_op($visit)
}
elsif $visit.isa(PAST::Block) {
$node[$i] := self.visit_block($visit);
}
elsif $visit.isa(PAST::Stmts) {
$node[$i] := self.visit_children($visit);
}
elsif $visit.isa(PAST::Stmt) {
$node[$i] := self.visit_children($visit);
}
elsif $visit.isa(PAST::Want) {
$node[$i] := self.visit_want($visit);
}
elsif $visit.isa(PAST::Var) {
$node[$i] := self.visit_var($visit);
}
elsif $visit.isa(PAST::Val) {
# don't do anything on literals
}
}
$i := $i + 1;
}
$node;
}
}
14 changes: 12 additions & 2 deletions tools/build/Makefile.in
Expand Up @@ -70,6 +70,8 @@ PERL6_A = src/gen/perl6-actions.pir
PERL6_A_PBC = blib/Perl6/Actions.pbc
PERL6_O = src/gen/perl6-optimizer.pir
PERL6_O_PBC = blib/Perl6/Optimizer.pbc
PERL6_SINK = src/gen/perl6-sinker.pir
PERL6_SINK_PBC= blib/Perl6/Sinker.pbc
PERL6_P = src/gen/perl6-pod.pir
PERL6_P_PBC = blib/Perl6/Pod.pbc
PERL6_C = src/gen/perl6-compiler.pir
Expand Down Expand Up @@ -231,6 +233,8 @@ CLEANUPS = \
*.pdb \
$(PERL6_PBC) \
$(PERL6_EXE) \
$(PERL6_O_PBC) \
$(PERL6_SINK_PBC) \
$(PARROT_DLL_COPY) \
perl6.c \
perl6$(O) \
Expand Down Expand Up @@ -279,6 +283,7 @@ install: all
$(CP) $(PERL6_G_PBC) $(DESTDIR)$(NQP_LANG_DIR)/lib/Perl6/Grammar.pbc
$(CP) $(PERL6_A_PBC) $(DESTDIR)$(NQP_LANG_DIR)/lib/Perl6/Actions.pbc
$(CP) $(PERL6_O_PBC) $(DESTDIR)$(NQP_LANG_DIR)/lib/Perl6/Optimizer.pbc
$(CP) $(PERL6_SINK_PBC) $(DESTDIR)$(NQP_LANG_DIR)/lib/Perl6/Sinker.pbc
$(CP) $(PERL6_P_PBC) $(DESTDIR)$(NQP_LANG_DIR)/lib/Perl6/Pod.pbc
$(CP) $(PERL6_C_PBC) $(DESTDIR)$(NQP_LANG_DIR)/lib/Perl6/Compiler.pbc
$(CP) $(PERL6_M_PBC) $(DESTDIR)$(NQP_LANG_DIR)/lib/Perl6/Metamodel.pbc
Expand Down Expand Up @@ -337,7 +342,7 @@ $(PERL6_G_PBC): $(NQP_EXE) $(PERL6_W_PBC) src/Perl6/Grammar.pm $(PERL6_P_PBC)
src/Perl6/Grammar.pm
$(PARROT) $(PARROT_ARGS) -o $(PERL6_G_PBC) $(PERL6_G)

$(PERL6_A_PBC): $(NQP_EXE) $(DYNEXT_DYNPMC) $(DYNEXT_DYNOPS) src/Perl6/Actions.pm $(PERL6_P_PBC) $(PERL6_CF_PBC)
$(PERL6_A_PBC): $(NQP_EXE) $(DYNEXT_DYNPMC) $(DYNEXT_DYNOPS) src/Perl6/Actions.pm $(PERL6_P_PBC) $(PERL6_CF_PBC) $(PERL6_SINK_PBC)
$(NQP_EXE) --vmlibs=perl6_group,perl6_ops --target=pir --output=$(PERL6_A) --encoding=utf8 \
src/Perl6/Actions.pm
$(PARROT) $(PARROT_ARGS) -o $(PERL6_A_PBC) $(PERL6_A)
Expand All @@ -346,7 +351,12 @@ $(PERL6_O_PBC): $(NQP_EXE) $(DYNEXT_DYNPMC) $(DYNEXT_DYNOPS) src/Perl6/Optimizer
$(NQP_EXE) --vmlibs=perl6_group,perl6_ops --target=pir --output=$(PERL6_O) --encoding=utf8 \
src/Perl6/Optimizer.pm
$(PARROT) $(PARROT_ARGS) -o $(PERL6_O_PBC) $(PERL6_O)


$(PERL6_SINK_PBC): $(NQP_EXE) $(DYNEXT_DYNPMC) $(DYNEXT_DYNOPS) src/Perl6/Sinker.pm
$(NQP_EXE) --vmlibs=perl6_group,perl6_ops --target=pir --output=$(PERL6_SINK) --encoding=utf8 \
src/Perl6/Sinker.pm
$(PARROT) $(PARROT_ARGS) -o $(PERL6_SINK_PBC) $(PERL6_SINK)

$(PERL6_P_PBC): $(NQP_EXE) $(DYNEXT_DYNPMC) $(DYNEXT_DYNOPS) src/Perl6/Pod.pm
$(NQP_EXE) --vmlibs=perl6_group,perl6_ops --target=pir --output=$(PERL6_P) --encoding=utf8 \
src/Perl6/Pod.pm
Expand Down

0 comments on commit 4d0f65c

Please sign in to comment.