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/IntermNode.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_ 51