2 // Copyright (c) 2002-2014 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.
7 #ifndef COMPILER_TRANSLATOR_LOCAL_INTERMEDIATE_H_
8 #define COMPILER_TRANSLATOR_LOCAL_INTERMEDIATE_H_
10 #include "compiler/translator/IntermNode.h"
19 // Set of helper functions to help parse and build the tree.
25 POOL_ALLOCATOR_NEW_DELETE();
26 TIntermediate(TInfoSink &i)
29 TIntermSymbol *addSymbol(
30 int id, const TString &, const TType &, const TSourceLoc &);
31 TIntermTyped *addBinaryMath(
32 TOperator op, TIntermTyped *left, TIntermTyped *right, const TSourceLoc &);
33 TIntermTyped *addAssign(
34 TOperator op, TIntermTyped *left, TIntermTyped *right, const TSourceLoc &);
35 TIntermTyped *addIndex(
36 TOperator op, TIntermTyped *base, TIntermTyped *index, const TSourceLoc &);
37 TIntermTyped *addUnaryMath(
38 TOperator op, TIntermNode *child, const TSourceLoc &);
39 TIntermAggregate *growAggregate(
40 TIntermNode *left, TIntermNode *right, const TSourceLoc &);
41 TIntermAggregate *makeAggregate(TIntermNode *node, const TSourceLoc &);
42 TIntermAggregate *setAggregateOperator(TIntermNode *, TOperator, const TSourceLoc &);
43 TIntermNode *addSelection(TIntermTyped *cond, TIntermNodePair code, const TSourceLoc &);
44 TIntermTyped *addSelection(
45 TIntermTyped *cond, TIntermTyped *trueBlock, TIntermTyped *falseBlock, const TSourceLoc &);
46 TIntermTyped *addComma(
47 TIntermTyped *left, TIntermTyped *right, const TSourceLoc &);
48 TIntermConstantUnion *addConstantUnion(ConstantUnion *, const TType &, const TSourceLoc &);
49 // TODO(zmo): Get rid of default value.
50 bool parseConstTree(const TSourceLoc &, TIntermNode *, ConstantUnion *,
51 TOperator, TType, bool singleConstantParam = false);
52 TIntermNode *addLoop(TLoopType, TIntermNode *, TIntermTyped *, TIntermTyped *,
53 TIntermNode *, const TSourceLoc &);
54 TIntermBranch *addBranch(TOperator, const TSourceLoc &);
55 TIntermBranch *addBranch(TOperator, TIntermTyped *, const TSourceLoc &);
56 TIntermTyped *addSwizzle(TVectorFields &, const TSourceLoc &);
57 bool postProcess(TIntermNode *);
58 void remove(TIntermNode *);
59 void outputTree(TIntermNode *);
62 void operator=(TIntermediate &); // prevent assignments
64 TInfoSink & mInfoSink;
67 #endif // COMPILER_TRANSLATOR_LOCAL_INTERMEDIATE_H_