// // Copyright 2017 The ANGLE Project Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // // Symbol.h: Symbols representing variables, functions, structures and interface blocks. // #ifndef COMPILER_TRANSLATOR_SYMBOL_H_ #define COMPILER_TRANSLATOR_SYMBOL_H_ #include "common/angleutils.h" #include "compiler/translator/ExtensionBehavior.h" #include "compiler/translator/ImmutableString.h" #include "compiler/translator/IntermNode.h" #include "compiler/translator/SymbolUniqueId.h" namespace sh { class TSymbolTable; // Symbol base class. (Can build functions or variables out of these...) class TSymbol : angle::NonCopyable { … }; static_assert …; // Variable. // May store the value of a constant variable of any type (float, int, bool or struct). class TVariable : public TSymbol { … }; // Struct type. class TStructure : public TSymbol, public TFieldListCollection { … }; // Interface block. Note that this contains the block name, not the instance name. Interface block // instances are stored as TVariable. class TInterfaceBlock : public TSymbol, public TFieldListCollection { … }; // Parameter class used for parsing user-defined function parameters. struct TParameter { … }; // The function sub-class of a symbol. class TFunction : public TSymbol { … }; } // namespace sh #endif // COMPILER_TRANSLATOR_SYMBOL_H_