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_REGENERATE_STRUCT_NAMES_H_
8#define COMPILER_TRANSLATOR_REGENERATE_STRUCT_NAMES_H_
9
10#include "compiler/translator/Intermediate.h"
11#include "compiler/translator/SymbolTable.h"
12
13#include <set>
14
15class RegenerateStructNames : public TIntermTraverser
16{
17  public:
18    RegenerateStructNames(const TSymbolTable &symbolTable,
19                          int shaderVersion)
20        : mSymbolTable(symbolTable),
21          mShaderVersion(shaderVersion),
22          mScopeDepth(0) {}
23
24  protected:
25    virtual void visitSymbol(TIntermSymbol *);
26    virtual bool visitAggregate(Visit, TIntermAggregate *);
27
28  private:
29    const TSymbolTable &mSymbolTable;
30    int mShaderVersion;
31
32    // Indicating the depth of the current scope.
33    // The global scope is 1.
34    int mScopeDepth;
35
36    // If a struct's declared globally, push its ID in this set.
37    std::set<int> mDeclaredGlobalStructs;
38};
39
40#endif  // COMPILER_TRANSLATOR_REGENERATE_STRUCT_NAMES_H_
41