xref: /aosp_15_r20/external/angle/src/compiler/translator/SymbolUniqueId.h (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
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