[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