1 /// Author: Aziz Köksal 2 /// License: GPL3 3 /// $(Maturity average) 4 module cmd.ASTStats; 5 6 import dil.ast.DefaultVisitor, 7 dil.ast.Node, 8 dil.ast.Declaration, 9 dil.ast.Statement, 10 dil.ast.Expression, 11 dil.ast.Types; 12 13 /// Counts the nodes in a syntax tree. 14 class ASTStats : DefaultVisitor2 15 { 16 uint[] table; /// Table for counting nodes. 17 18 /// Starts counting. 19 uint[] count(Node root) 20 { 21 table = new uint[NodeClassNames.length]; 22 super.visitN(root); 23 return table; 24 } 25 26 // Override dispatch function. 27 override void dispatch(Node n) 28 { 29 table[n.kind]++; 30 super.dispatch(n); 31 } 32 }