diff options
Diffstat (limited to 'src/ast_utils.h')
-rw-r--r-- | src/ast_utils.h | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/src/ast_utils.h b/src/ast_utils.h index 8aacb62da..ebb6861da 100644 --- a/src/ast_utils.h +++ b/src/ast_utils.h @@ -119,6 +119,23 @@ struct EffectAnalyzer : public PostWalker<EffectAnalyzer, Visitor<EffectAnalyzer void visitUnreachable(Unreachable *curr) { branches = true; } }; +// Meausure the size of an AST +struct Measurer : public PostWalker<Measurer, UnifiedExpressionVisitor<Measurer>> { + size_t size = 0; + + void visitExpression(Expression* curr) { + size++; + } + + static bool measure(Expression* tree) { + Measurer measurer; + measurer.walk(tree); + return measurer.size; + } +}; + +// Manipulate expressions + struct ExpressionManipulator { // Re-use a node's memory. This helps avoid allocation when optimizing. template<typename InputType, typename OutputType> |