Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / third_party / angle / src / compiler / translator / Intermediate.h
1 //
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.
5 //
6
7 #ifndef COMPILER_TRANSLATOR_LOCAL_INTERMEDIATE_H_
8 #define COMPILER_TRANSLATOR_LOCAL_INTERMEDIATE_H_
9
10 #include "compiler/translator/IntermNode.h"
11
12 struct TVectorFields
13 {
14     int offsets[4];
15     int num;
16 };
17
18 //
19 // Set of helper functions to help parse and build the tree.
20 //
21 class TInfoSink;
22 class TIntermediate
23 {
24   public:
25     POOL_ALLOCATOR_NEW_DELETE();
26     TIntermediate(TInfoSink &i)
27         : mInfoSink(i) { }
28
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 *);
60
61   private:
62     void operator=(TIntermediate &); // prevent assignments
63
64     TInfoSink & mInfoSink;
65 };
66
67 #endif  // COMPILER_TRANSLATOR_LOCAL_INTERMEDIATE_H_