diff graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/NodeUtil.java @ 10793:6e12e0ace0d5

Truffle: add NodeUtil.countNodes overload that counts nodes of a specific type
author Andreas Woess <andreas.woess@jku.at>
date Wed, 17 Jul 2013 13:53:11 +0200
parents 7f6580db1e88
children e9248ebb1d79
line wrap: on
line diff
--- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/NodeUtil.java	Tue Jul 16 17:41:21 2013 -0700
+++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/NodeUtil.java	Wed Jul 17 13:53:11 2013 +0200
@@ -541,21 +541,32 @@
     }
 
     public static int countNodes(Node root) {
-        NodeCountVisitor nodeCount = new NodeCountVisitor();
+        return countNodes(root, null);
+    }
+
+    public static int countNodes(Node root, Class<?> clazz) {
+        NodeCountVisitor nodeCount = new NodeCountVisitor(clazz);
         root.accept(nodeCount);
         return nodeCount.nodeCount;
     }
 
-    private static class NodeCountVisitor implements NodeVisitor {
+    private static final class NodeCountVisitor implements NodeVisitor {
 
+        private final Class<?> clazz;
         int nodeCount;
 
+        private NodeCountVisitor(Class<?> clazz) {
+            this.clazz = clazz;
+        }
+
         @Override
         public boolean visit(Node node) {
             if (node instanceof RootNode && nodeCount > 0) {
                 return false;
             }
-            nodeCount++;
+            if (clazz == null || clazz.isInstance(node)) {
+                nodeCount++;
+            }
             return true;
         }
     }