• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //
2 // Copyright (c) 2002-2010 The ANGLE Project Authors. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
5 //
6 
7 #include "compiler/intermediate.h"
8 #include "compiler/RemoveTree.h"
9 
10 //
11 // Code to recursively delete the intermediate tree.
12 //
13 
14 class RemoveTree : public TIntermTraverser
15 {
16 public:
RemoveTree()17 	RemoveTree() : TIntermTraverser(false, false, true)
18 	{
19 	}
20 
21 protected:
22 	void visitSymbol(TIntermSymbol*);
23 	void visitConstantUnion(TIntermConstantUnion*);
24 	bool visitBinary(Visit visit, TIntermBinary*);
25 	bool visitUnary(Visit visit, TIntermUnary*);
26 	bool visitSelection(Visit visit, TIntermSelection*);
27 	bool visitAggregate(Visit visit, TIntermAggregate*);
28 };
29 
visitSymbol(TIntermSymbol * node)30 void RemoveTree::visitSymbol(TIntermSymbol* node)
31 {
32 	delete node;
33 }
34 
visitBinary(Visit visit,TIntermBinary * node)35 bool RemoveTree::visitBinary(Visit visit, TIntermBinary* node)
36 {
37 	delete node;
38 
39 	return true;
40 }
41 
visitUnary(Visit visit,TIntermUnary * node)42 bool RemoveTree::visitUnary(Visit visit, TIntermUnary* node)
43 {
44     delete node;
45 
46 	return true;
47 }
48 
visitAggregate(Visit visit,TIntermAggregate * node)49 bool RemoveTree::visitAggregate(Visit visit, TIntermAggregate* node)
50 {
51 	delete node;
52 
53 	return true;
54 }
55 
visitSelection(Visit visit,TIntermSelection * node)56 bool RemoveTree::visitSelection(Visit visit, TIntermSelection* node)
57 {
58 	delete node;
59 
60 	return true;
61 }
62 
visitConstantUnion(TIntermConstantUnion * node)63 void RemoveTree::visitConstantUnion(TIntermConstantUnion* node)
64 {
65 	delete node;
66 }
67 
68 //
69 // Entry point.
70 //
RemoveAllTreeNodes(TIntermNode * root)71 void RemoveAllTreeNodes(TIntermNode* root)
72 {
73     RemoveTree it;
74 
75     root->traverse(&it);
76 }
77 
78