| // |
| // Copyright (c) 2002-2010 The ANGLE Project Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| // |
| |
| #include "compiler/intermediate.h" |
| #include "compiler/RemoveTree.h" |
| |
| // |
| // Code to recursively delete the intermediate tree. |
| // |
| |
| class RemoveTree : public TIntermTraverser |
| { |
| public: |
| RemoveTree() : TIntermTraverser(false, false, true) |
| { |
| } |
| |
| protected: |
| void visitSymbol(TIntermSymbol*); |
| void visitConstantUnion(TIntermConstantUnion*); |
| bool visitBinary(Visit visit, TIntermBinary*); |
| bool visitUnary(Visit visit, TIntermUnary*); |
| bool visitSelection(Visit visit, TIntermSelection*); |
| bool visitAggregate(Visit visit, TIntermAggregate*); |
| }; |
| |
| void RemoveTree::visitSymbol(TIntermSymbol* node) |
| { |
| delete node; |
| } |
| |
| bool RemoveTree::visitBinary(Visit visit, TIntermBinary* node) |
| { |
| delete node; |
| |
| return true; |
| } |
| |
| bool RemoveTree::visitUnary(Visit visit, TIntermUnary* node) |
| { |
| delete node; |
| |
| return true; |
| } |
| |
| bool RemoveTree::visitAggregate(Visit visit, TIntermAggregate* node) |
| { |
| delete node; |
| |
| return true; |
| } |
| |
| bool RemoveTree::visitSelection(Visit visit, TIntermSelection* node) |
| { |
| delete node; |
| |
| return true; |
| } |
| |
| void RemoveTree::visitConstantUnion(TIntermConstantUnion* node) |
| { |
| delete node; |
| } |
| |
| // |
| // Entry point. |
| // |
| void RemoveAllTreeNodes(TIntermNode* root) |
| { |
| RemoveTree it; |
| |
| root->traverse(&it); |
| } |
| |