[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