[svn:parrot] r47099 - branches/gsoc_past_optimization/t/library

tcurtis at svn.parrot.org tcurtis at svn.parrot.org
Sat May 29 03:53:42 UTC 2010


Author: tcurtis
Date: Sat May 29 03:53:41 2010
New Revision: 47099
URL: https://trac.parrot.org/parrot/changeset/47099

Log:
Add test for changing node types with PAST::Transformer::Dynamic.

Modified:
   branches/gsoc_past_optimization/t/library/pasttransformerdynamic.t

Modified: branches/gsoc_past_optimization/t/library/pasttransformerdynamic.t
==============================================================================
--- branches/gsoc_past_optimization/t/library/pasttransformerdynamic.t	Fri May 28 20:56:28 2010	(r47098)
+++ branches/gsoc_past_optimization/t/library/pasttransformerdynamic.t	Sat May 29 03:53:41 2010	(r47099)
@@ -35,6 +35,42 @@
        "Node attributes can be changed by PAST::Transformers.");
 }
 
+sub negate ($walker, $node) {
+    my $v := $node.'value'();
+    my $result;
+    if ($v < 0) {
+	$result := PAST::Op.new(PAST::Val.new(:value(-$v)),
+				:pirop<neg>);
+    }
+    else {
+	$result := $node;
+    }
+    $result;
+}
+
+sub test_change_node_types () {
+    my $past :=
+        PAST::Block.new(PAST::Val.new(:value(0)),
+			PAST::Val.new(:value(-7)),
+			PAST::Val.new(:value(5)),
+			PAST::Val.new(:value(-32)));
+    my $transformer := PAST::Transformer::Dynamic.new(:val(negate));
+
+    my $result := $transformer.'walk'($past);
+
+    my $target :=
+      PAST::Block.new(PAST::Val.new(:value(0)),
+		      PAST::Op.new(PAST::Val.new(:value(7)),
+				   :pirop<neg>),
+		      PAST::Val.new(:value(5)),
+		      PAST::Op.new(PAST::Val.new(:value(32)),
+				   :pirop<neg>));
+
+    ok(pir::iseq__i_p_p($result, $target),
+       "Node types can be changed by PAST::Transformers.")
+}
+
+
 # Local Variables:
 #   mode: cperl
 #   cperl-indent-level: 4


More information about the parrot-commits mailing list