[svn:parrot] r47058 - in branches/gsoc_past_optimization: . config/gen/makefiles examples/library runtime/parrot/library/PAST/Transformer t/library
tcurtis at svn.parrot.org
tcurtis at svn.parrot.org
Thu May 27 16:28:33 UTC 2010
Author: tcurtis
Date: Thu May 27 16:28:32 2010
New Revision: 47058
URL: https://trac.parrot.org/parrot/changeset/47058
Log:
Regen manifest, add PAST::Transformer::Dynamic and example, and set props.
Added:
branches/gsoc_past_optimization/examples/library/pasttransformerdynamic.nqp (contents, props changed)
branches/gsoc_past_optimization/runtime/parrot/library/PAST/Transformer/ (props changed)
branches/gsoc_past_optimization/runtime/parrot/library/PAST/Transformer/Dynamic.pir (contents, props changed)
Modified:
branches/gsoc_past_optimization/MANIFEST
branches/gsoc_past_optimization/MANIFEST.SKIP
branches/gsoc_past_optimization/config/gen/makefiles/root.in
branches/gsoc_past_optimization/t/library/pastwalkerdynamic.t (props changed)
Modified: branches/gsoc_past_optimization/MANIFEST
==============================================================================
--- branches/gsoc_past_optimization/MANIFEST Thu May 27 15:39:08 2010 (r47057)
+++ branches/gsoc_past_optimization/MANIFEST Thu May 27 16:28:32 2010 (r47058)
@@ -1,7 +1,7 @@
# ex: set ro:
# $Id$
#
-# generated by tools/dev/mk_manifest_and_skip.pl Thu May 27 01:45:38 2010 UT
+# generated by tools/dev/mk_manifest_and_skip.pl Thu May 27 16:23:32 2010 UT
#
# See below for documentation on the format of this file.
#
@@ -628,6 +628,7 @@
examples/library/md5sum.pir [examples]
examples/library/ncurses_life.pir [examples]
examples/library/pasttransformer.pir [examples]
+examples/library/pasttransformerdynamic.nqp [examples]
examples/library/pastwalker.pir [examples]
examples/library/pcre.pir [examples]
examples/mops/README [examples]
@@ -1157,6 +1158,7 @@
runtime/parrot/library/OpenGL/Math.pir [library]
runtime/parrot/library/P6object.pir [library]
runtime/parrot/library/PAST/Transformer.pir [library]
+runtime/parrot/library/PAST/Transformer/Dynamic.pir [library]
runtime/parrot/library/PAST/Walker.pir [library]
runtime/parrot/library/PAST/Walker/Dynamic.pir [library]
runtime/parrot/library/PCT/README []doc
@@ -1678,6 +1680,7 @@
t/library/parrotlib.t [test]
t/library/pasttransformer.t [test]
t/library/pastwalker.t [test]
+t/library/pastwalkerdynamic.t [test]
t/library/pcre.t [test]
t/library/perlhist.txt [test]
t/library/pg.t [test]
Modified: branches/gsoc_past_optimization/MANIFEST.SKIP
==============================================================================
--- branches/gsoc_past_optimization/MANIFEST.SKIP Thu May 27 15:39:08 2010 (r47057)
+++ branches/gsoc_past_optimization/MANIFEST.SKIP Thu May 27 16:28:32 2010 (r47058)
@@ -1,6 +1,6 @@
# ex: set ro:
# $Id$
-# generated by tools/dev/mk_manifest_and_skip.pl Tue May 25 00:10:06 2010 UT
+# generated by tools/dev/mk_manifest_and_skip.pl Thu May 27 15:30:20 2010 UT
#
# This file should contain a transcript of the svn:ignore properties
# of the directories in the Parrot subversion repository. (Needed for
@@ -579,6 +579,12 @@
# generated from svn:ignore of 'runtime/parrot/library/PAST/'
^runtime/parrot/library/PAST/.*\.pbc$
^runtime/parrot/library/PAST/.*\.pbc/
+# generated from svn:ignore of 'runtime/parrot/library/PAST/Transformer/'
+^runtime/parrot/library/PAST/Transformer/.*\.pbc$
+^runtime/parrot/library/PAST/Transformer/.*\.pbc/
+# generated from svn:ignore of 'runtime/parrot/library/PAST/Walker/'
+^runtime/parrot/library/PAST/Walker/.*\.pbc$
+^runtime/parrot/library/PAST/Walker/.*\.pbc/
# generated from svn:ignore of 'runtime/parrot/library/PCT/'
^runtime/parrot/library/PCT/.*\.pbc$
^runtime/parrot/library/PCT/.*\.pbc/
Modified: branches/gsoc_past_optimization/config/gen/makefiles/root.in
==============================================================================
--- branches/gsoc_past_optimization/config/gen/makefiles/root.in Thu May 27 15:39:08 2010 (r47057)
+++ branches/gsoc_past_optimization/config/gen/makefiles/root.in Thu May 27 16:28:32 2010 (r47058)
@@ -286,6 +286,7 @@
$(LIBRARY_DIR)/osutils.pbc \
$(LIBRARY_DIR)/P6object.pbc \
$(LIBRARY_DIR)/PAST/Transformer.pbc \
+ $(LIBRARY_DIR)/PAST/Transformer/Dynamic.pbc \
$(LIBRARY_DIR)/PAST/Walker.pbc \
$(LIBRARY_DIR)/PAST/Walker/Dynamic.pbc \
$(LIBRARY_DIR)/ProfTest.pbc \
Added: branches/gsoc_past_optimization/examples/library/pasttransformerdynamic.nqp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ branches/gsoc_past_optimization/examples/library/pasttransformerdynamic.nqp Thu May 27 16:28:32 2010 (r47058)
@@ -0,0 +1,32 @@
+pir::load_bytecode('PCT.pbc');
+pir::load_bytecode('PAST/Transformer/Dynamic.pbc');
+pir::load_bytecode('Data/Dumper.pbc');
+
+sub foldOp ($walker, $node) {
+ if ($node.pirop() eq 'add') &&
+ ($node[0] ~~ PAST::Val) &&
+ ($node[1] ~~ PAST::Val) {
+ my $val := $node[0].value() + $node[1].value();
+ my $result := PAST::Val.new(:value($val));
+ $result;
+ }
+ else {
+ my $children := PAST::Walker::walkChildren($walker, $node);
+ PAST::Walker::replaceChildren($node, $children);
+ $node;
+ }
+}
+
+my $comp := Q:PIR { %r = compreg 'NQP-rx' };
+my $past := $comp.compile('say(1+2);', :target<past>);
+
+my $dumper := Q:PIR { %r = new ['Data';'Dumper'] };
+$dumper.dumper($past);
+
+say("\nChanging:\n");
+
+my $walker := Q:PIR { %r = new ['PAST'; 'Transformer'; 'Dynamic']};
+$walker.op(foldOp);
+
+$walker.walk($past);
+$dumper.dumper($past);
Added: branches/gsoc_past_optimization/runtime/parrot/library/PAST/Transformer/Dynamic.pir
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ branches/gsoc_past_optimization/runtime/parrot/library/PAST/Transformer/Dynamic.pir Thu May 27 16:28:32 2010 (r47058)
@@ -0,0 +1,79 @@
+# Copyright (C) 2010, Parrot Foundation.
+# $Id$
+
+.sub 'onload' :anon :init :load
+ load_bytecode 'PAST/Transformer.pbc'
+ load_bytecode 'PAST/Walker/Dynamic.pbc'
+ $P1 = get_class ['PAST'; 'Walker'; 'Dynamic']
+ $P2 = get_class ['PAST'; 'Transformer']
+ $P0 = subclass $P1, ['PAST'; 'Transformer'; 'Dynamic']
+ addparent $P0, $P2
+.end
+
+.namespace ['PAST'; 'Walker']
+
+.sub 'walk' :multi(['PAST'; 'Transformer'; 'Dynamic'], ['PAST'; 'Block'])
+ .param pmc walker
+ .param pmc node
+ $P0 = getattribute walker, 'block'
+ unless null $P0 goto has_handler
+ $P1 = 'walkChildren'(walker, node)
+ 'replaceChildren'(node, $P1)
+ .return (node)
+has_handler:
+ .tailcall $P0(walker, node)
+.end
+
+.sub 'walk' :multi(['PAST'; 'Transformer'; 'Dynamic'], ['PAST'; 'Op'])
+ .param pmc walker
+ .param pmc node
+ $P0 = getattribute walker, 'op'
+ unless null $P0 goto has_handler
+ $P1 = 'walkChildren'(walker, node)
+ 'replaceChildren'(node, $P1)
+ .return (node)
+has_handler:
+ .tailcall $P0(walker, node)
+.end
+
+.sub 'walk' :multi(['PAST'; 'Transformer'; 'Dynamic'], ['PAST'; 'Stmts'])
+ .param pmc walker
+ .param pmc node
+ $P0 = getattribute walker, 'stmts'
+ unless null $P0 goto has_handler
+ $P1 = 'walkChildren'(walker, node)
+ 'replaceChildren'(node, $P1)
+ .return (node)
+has_handler:
+ .tailcall $P0(walker, node)
+.end
+
+.sub 'walk' :multi(['PAST'; 'Transformer'; 'Dynamic'], ['PAST'; 'Val'])
+ .param pmc walker
+ .param pmc node
+ $P0 = getattribute walker, 'val'
+ unless null $P0 goto has_handler
+ $P1 = 'walkChildren'(walker, node)
+ 'replaceChildren'(node, $P1)
+ .return (node)
+has_handler:
+ .tailcall $P0(walker, node)
+.end
+
+.sub 'walk' :multi(['PAST'; 'Transformer'; 'Dynamic'], ['PAST'; 'Var'])
+ .param pmc walker
+ .param pmc node
+ $P0 = getattribute walker, 'var'
+ unless null $P0 goto has_handler
+ $P1 = 'walkChildren'(walker, node)
+ 'replaceChildren'(node, $P1)
+ .return (node)
+has_handler:
+ .tailcall $P0(walker, node)
+.end
+
+# Local Variables:
+# mode: pir
+# fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:
More information about the parrot-commits
mailing list