Home | History | Annotate | Download | only in translator
      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