1*8975f5c5SAndroid Build Coastguard Worker // 2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2017 The ANGLE Project Authors. All rights reserved. 3*8975f5c5SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 4*8975f5c5SAndroid Build Coastguard Worker // found in the LICENSE file. 5*8975f5c5SAndroid Build Coastguard Worker // 6*8975f5c5SAndroid Build Coastguard Worker // SymbolUniqueId.h: Encapsulates a unique id for a symbol. 7*8975f5c5SAndroid Build Coastguard Worker 8*8975f5c5SAndroid Build Coastguard Worker #ifndef COMPILER_TRANSLATOR_SYMBOLUNIQUEID_H_ 9*8975f5c5SAndroid Build Coastguard Worker #define COMPILER_TRANSLATOR_SYMBOLUNIQUEID_H_ 10*8975f5c5SAndroid Build Coastguard Worker 11*8975f5c5SAndroid Build Coastguard Worker #include "compiler/translator/Common.h" 12*8975f5c5SAndroid Build Coastguard Worker 13*8975f5c5SAndroid Build Coastguard Worker namespace sh 14*8975f5c5SAndroid Build Coastguard Worker { 15*8975f5c5SAndroid Build Coastguard Worker 16*8975f5c5SAndroid Build Coastguard Worker class TSymbolTable; 17*8975f5c5SAndroid Build Coastguard Worker class TSymbol; 18*8975f5c5SAndroid Build Coastguard Worker 19*8975f5c5SAndroid Build Coastguard Worker class TSymbolUniqueId 20*8975f5c5SAndroid Build Coastguard Worker { 21*8975f5c5SAndroid Build Coastguard Worker public: 22*8975f5c5SAndroid Build Coastguard Worker POOL_ALLOCATOR_NEW_DELETE 23*8975f5c5SAndroid Build Coastguard Worker explicit TSymbolUniqueId(const TSymbol &symbol); 24*8975f5c5SAndroid Build Coastguard Worker constexpr TSymbolUniqueId(const TSymbolUniqueId &) = default; 25*8975f5c5SAndroid Build Coastguard Worker TSymbolUniqueId &operator=(const TSymbolUniqueId &); 26*8975f5c5SAndroid Build Coastguard Worker bool operator==(const TSymbolUniqueId &) const; 27*8975f5c5SAndroid Build Coastguard Worker bool operator!=(const TSymbolUniqueId &) const; 28*8975f5c5SAndroid Build Coastguard Worker get()29*8975f5c5SAndroid Build Coastguard Worker constexpr int get() const { return mId; } 30*8975f5c5SAndroid Build Coastguard Worker 31*8975f5c5SAndroid Build Coastguard Worker private: 32*8975f5c5SAndroid Build Coastguard Worker friend class TSymbolTable; 33*8975f5c5SAndroid Build Coastguard Worker explicit TSymbolUniqueId(TSymbolTable *symbolTable); 34*8975f5c5SAndroid Build Coastguard Worker 35*8975f5c5SAndroid Build Coastguard Worker friend class BuiltInId; TSymbolUniqueId(int staticId)36*8975f5c5SAndroid Build Coastguard Worker constexpr TSymbolUniqueId(int staticId) : mId(staticId) {} 37*8975f5c5SAndroid Build Coastguard Worker 38*8975f5c5SAndroid Build Coastguard Worker int mId; 39*8975f5c5SAndroid Build Coastguard Worker }; 40*8975f5c5SAndroid Build Coastguard Worker 41*8975f5c5SAndroid Build Coastguard Worker enum class SymbolType : uint8_t 42*8975f5c5SAndroid Build Coastguard Worker { 43*8975f5c5SAndroid Build Coastguard Worker BuiltIn, 44*8975f5c5SAndroid Build Coastguard Worker UserDefined, 45*8975f5c5SAndroid Build Coastguard Worker AngleInternal, 46*8975f5c5SAndroid Build Coastguard Worker Empty // Meaning symbol without a name. 47*8975f5c5SAndroid Build Coastguard Worker }; 48*8975f5c5SAndroid Build Coastguard Worker 49*8975f5c5SAndroid Build Coastguard Worker enum class SymbolClass : uint8_t 50*8975f5c5SAndroid Build Coastguard Worker { 51*8975f5c5SAndroid Build Coastguard Worker Function, 52*8975f5c5SAndroid Build Coastguard Worker Variable, 53*8975f5c5SAndroid Build Coastguard Worker Struct, 54*8975f5c5SAndroid Build Coastguard Worker InterfaceBlock 55*8975f5c5SAndroid Build Coastguard Worker }; 56*8975f5c5SAndroid Build Coastguard Worker 57*8975f5c5SAndroid Build Coastguard Worker } // namespace sh 58*8975f5c5SAndroid Build Coastguard Worker 59*8975f5c5SAndroid Build Coastguard Worker #endif // COMPILER_TRANSLATOR_SYMBOLUNIQUEID_H_ 60