]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/clang/include/clang/Index/IndexSymbol.h
MFC r316908: 7541 zpool import/tryimport ioctl returns ENOMEM because provided buffer...
[FreeBSD/FreeBSD.git] / contrib / llvm / tools / clang / include / clang / Index / IndexSymbol.h
1 //===--- IndexSymbol.h - Types and functions for indexing symbols ---------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9
10 #ifndef LLVM_CLANG_INDEX_INDEXSYMBOL_H
11 #define LLVM_CLANG_INDEX_INDEXSYMBOL_H
12
13 #include "clang/Basic/LLVM.h"
14 #include "llvm/ADT/STLExtras.h"
15 #include "llvm/Support/DataTypes.h"
16
17 namespace clang {
18   class Decl;
19   class LangOptions;
20
21 namespace index {
22
23 enum class SymbolKind : uint8_t {
24   Unknown,
25
26   Module,
27   Namespace,
28   NamespaceAlias,
29   Macro,
30
31   Enum,
32   Struct,
33   Class,
34   Protocol,
35   Extension,
36   Union,
37   TypeAlias,
38
39   Function,
40   Variable,
41   Field,
42   EnumConstant,
43
44   InstanceMethod,
45   ClassMethod,
46   StaticMethod,
47   InstanceProperty,
48   ClassProperty,
49   StaticProperty,
50
51   Constructor,
52   Destructor,
53   ConversionFunction,
54 };
55
56 enum class SymbolLanguage {
57   C,
58   ObjC,
59   CXX,
60 };
61
62 /// Language specific sub-kinds.
63 enum class SymbolSubKind {
64   None,
65   CXXCopyConstructor,
66   CXXMoveConstructor,
67   AccessorGetter,
68   AccessorSetter,
69 };
70
71 /// Set of properties that provide additional info about a symbol.
72 enum class SymbolProperty : uint8_t {
73   Generic                       = 1 << 0,
74   TemplatePartialSpecialization = 1 << 1,
75   TemplateSpecialization        = 1 << 2,
76   UnitTest                      = 1 << 3,
77   IBAnnotated                   = 1 << 4,
78   IBOutletCollection            = 1 << 5,
79   GKInspectable                 = 1 << 6,
80 };
81 static const unsigned SymbolPropertyBitNum = 7;
82 typedef unsigned SymbolPropertySet;
83
84 /// Set of roles that are attributed to symbol occurrences.
85 enum class SymbolRole : uint32_t {
86   Declaration = 1 << 0,
87   Definition  = 1 << 1,
88   Reference   = 1 << 2,
89   Read        = 1 << 3,
90   Write       = 1 << 4,
91   Call        = 1 << 5,
92   Dynamic     = 1 << 6,
93   AddressOf   = 1 << 7,
94   Implicit    = 1 << 8,
95
96   // Relation roles.
97   RelationChildOf     = 1 << 9,
98   RelationBaseOf      = 1 << 10,
99   RelationOverrideOf  = 1 << 11,
100   RelationReceivedBy  = 1 << 12,
101   RelationCalledBy    = 1 << 13,
102   RelationExtendedBy  = 1 << 14,
103   RelationAccessorOf  = 1 << 15,
104   RelationContainedBy = 1 << 16,
105   RelationIBTypeOf    = 1 << 17,
106 };
107 static const unsigned SymbolRoleBitNum = 18;
108 typedef unsigned SymbolRoleSet;
109
110 /// Represents a relation to another symbol for a symbol occurrence.
111 struct SymbolRelation {
112   SymbolRoleSet Roles;
113   const Decl *RelatedSymbol;
114
115   SymbolRelation(SymbolRoleSet Roles, const Decl *Sym)
116     : Roles(Roles), RelatedSymbol(Sym) {}
117 };
118
119 struct SymbolInfo {
120   SymbolKind Kind;
121   SymbolSubKind SubKind;
122   SymbolPropertySet Properties;
123   SymbolLanguage Lang;
124 };
125
126 SymbolInfo getSymbolInfo(const Decl *D);
127
128 void applyForEachSymbolRole(SymbolRoleSet Roles,
129                             llvm::function_ref<void(SymbolRole)> Fn);
130 void printSymbolRoles(SymbolRoleSet Roles, raw_ostream &OS);
131
132 /// \returns true if no name was printed, false otherwise.
133 bool printSymbolName(const Decl *D, const LangOptions &LO, raw_ostream &OS);
134
135 StringRef getSymbolKindString(SymbolKind K);
136 StringRef getSymbolSubKindString(SymbolSubKind K);
137 StringRef getSymbolLanguageString(SymbolLanguage K);
138
139 void applyForEachSymbolProperty(SymbolPropertySet Props,
140                             llvm::function_ref<void(SymbolProperty)> Fn);
141 void printSymbolProperties(SymbolPropertySet Props, raw_ostream &OS);
142
143 } // namespace index
144 } // namespace clang
145
146 #endif