| // | |
| // 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); | |
| } | |