[svn:parrot] r48024 - in branches/gsoc_past_optimization/runtime/parrot/library/PAST: . Transformer
tcurtis at svn.parrot.org
tcurtis at svn.parrot.org
Wed Jul 7 05:09:10 UTC 2010
Author: tcurtis
Date: Wed Jul 7 05:09:09 2010
New Revision: 48024
URL: https://trac.parrot.org/parrot/changeset/48024
Log:
Make PAST::Transformer::Dynamic not be a PAST::Walker::Dynamic. Also add traversal of PAST::Var.viviself to PAST::Walker.
Modified:
branches/gsoc_past_optimization/runtime/parrot/library/PAST/Transformer/Dynamic.nqp
branches/gsoc_past_optimization/runtime/parrot/library/PAST/Walker.nqp
Modified: branches/gsoc_past_optimization/runtime/parrot/library/PAST/Transformer/Dynamic.nqp
==============================================================================
--- branches/gsoc_past_optimization/runtime/parrot/library/PAST/Transformer/Dynamic.nqp Wed Jul 7 04:20:56 2010 (r48023)
+++ branches/gsoc_past_optimization/runtime/parrot/library/PAST/Transformer/Dynamic.nqp Wed Jul 7 05:09:09 2010 (r48024)
@@ -4,12 +4,34 @@
INIT {
pir::load_bytecode('PAST/Transformer.pbc');
- pir::load_bytecode('PAST/Walker/Dynamic.pbc');
+}
+
+my sub gen_accessor ($class, $meth, $attr) {
+ $class.HOW().add_method($class, $meth,
+ method ($val?) {
+ my $result;
+ if (pir::defined__IP($val)) {
+ pir::setattribute(self, ~$attr, $val);
+ }
+ else {
+ $result :=
+ pir::getattribute__PPS(self, $attr);
+ }
+ $result;
+ });
}
class PAST::Transformer::Dynamic is PAST::Transformer {
- PAST::Transformer::Dynamic.HOW().add_parent(PAST::Transformer::Dynamic,
- PAST::Walker::Dynamic);
+ has $block;
+ has $op;
+ has $stmts;
+ has $val;
+ has $var;
+ has $varlist;
+
+ for (<block op stmts val var varlist>) {
+ gen_accessor(PAST::Transformer::Dynamic, $_, "\$" ~ $_);
+ }
}
module Tree::Walker {
Modified: branches/gsoc_past_optimization/runtime/parrot/library/PAST/Walker.nqp
==============================================================================
--- branches/gsoc_past_optimization/runtime/parrot/library/PAST/Walker.nqp Wed Jul 7 04:20:56 2010 (r48023)
+++ branches/gsoc_past_optimization/runtime/parrot/library/PAST/Walker.nqp Wed Jul 7 05:09:09 2010 (r48024)
@@ -10,7 +10,25 @@
# Doesn't actually have any unique behavior, but separating it out is good
# for readability, documentation, and in case we end up needing to change
# its behavior later.
-class PAST::Walker is Tree::Walker { }
+class PAST::Walker is Tree::Walker {
+ our multi method walkable ($node) { 0; }
+ our multi method walkable (PAST::Node $node) { 1; }
+}
+
+module Tree::Walker {
+ our multi sub walk (PAST::Walker $walker, Integer $i) { }
+ our multi sub walk (PAST::Walker $walker, String $s) { }
+
+ our multi sub walkChildren (PAST::Walker $walker, PAST::Var $var) {
+ my $index := 0;
+ my $max := pir::elements__IP($var);
+ my $child;
+ until ($index == $max) {
+ walk($walker, $var[$index++]);
+ }
+ walk($walker, $var.viviself) if $walker.walkable(viviself);
+ }
+}
# Local Variables:
# mode: cperl
More information about the parrot-commits
mailing list