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
12class 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