1 // 2 // Copyright 2017 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 // SymbolUniqueId.h: Encapsulates a unique id for a symbol. 7 8 #ifndef COMPILER_TRANSLATOR_SYMBOLUNIQUEID_H_ 9 #define COMPILER_TRANSLATOR_SYMBOLUNIQUEID_H_ 10 11 #include "compiler/translator/Common.h" 12 13 namespace sh 14 { 15 16 class TSymbolTable; 17 class TSymbol; 18 19 class TSymbolUniqueId 20 { 21 public: 22 POOL_ALLOCATOR_NEW_DELETE 23 explicit TSymbolUniqueId(const TSymbol &symbol); 24 constexpr TSymbolUniqueId(const TSymbolUniqueId &) = default; 25 TSymbolUniqueId &operator =(const TSymbolUniqueId &); 26 bool operator==(const TSymbolUniqueId &) const; 27 get()28 constexpr int get() const { return mId; } 29 30 private: 31 friend class TSymbolTable; 32 explicit TSymbolUniqueId(TSymbolTable *symbolTable); 33 34 friend class BuiltInId; TSymbolUniqueId(int staticId)35 constexpr TSymbolUniqueId(int staticId) : mId(staticId) {} 36 37 int mId; 38 }; 39 40 enum class SymbolType : uint8_t 41 { 42 BuiltIn, 43 UserDefined, 44 AngleInternal, 45 Empty // Meaning symbol without a name. 46 }; 47 48 enum class SymbolClass : uint8_t 49 { 50 Function, 51 Variable, 52 Struct, 53 InterfaceBlock 54 }; 55 56 } // namespace sh 57 58 #endif // COMPILER_TRANSLATOR_SYMBOLUNIQUEID_H_ 59