Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / third_party / angle / src / compiler / translator / InitializeVariables.h
1 //
2 // Copyright (c) 2002-2013 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_INITIALIZE_VARIABLES_H_
8 #define COMPILER_INITIALIZE_VARIABLES_H_
9
10 #include "compiler/translator/intermediate.h"
11
12 class InitializeVariables : public TIntermTraverser
13 {
14   public:
15     struct InitVariableInfo
16     {
17         TString name;
18         TType type;
19
20         InitVariableInfo(const TString &_name, const TType &_type)
21             : name(_name),
22               type(_type)
23         {
24         }
25     };
26     typedef TVector<InitVariableInfo> InitVariableInfoList;
27
28     InitializeVariables(const InitVariableInfoList &vars)
29         : mCodeInserted(false),
30           mVariables(vars)
31     {
32     }
33
34   protected:
35     virtual bool visitBinary(Visit, TIntermBinary *node) { return false; }
36     virtual bool visitUnary(Visit, TIntermUnary *node) { return false; }
37     virtual bool visitSelection(Visit, TIntermSelection *node) { return false; }
38     virtual bool visitLoop(Visit, TIntermLoop *node) { return false; }
39     virtual bool visitBranch(Visit, TIntermBranch *node) { return false; }
40
41     virtual bool visitAggregate(Visit visit, TIntermAggregate* node);
42
43   private:
44     void insertInitCode(TIntermSequence *sequence);
45
46     InitVariableInfoList mVariables;
47     bool mCodeInserted;
48 };
49
50 #endif  // COMPILER_INITIALIZE_VARIABLES_H_