diff options
| author | Ralf Luther <luther.ralf@gmail.com> | 2019-03-27 20:23:17 +0000 |
|---|---|---|
| committer | Gerrit Code Review <gerrit2@aicp-server-3> | 2019-03-27 20:23:17 +0000 |
| commit | 1ce3a9d272e564b22a1333a1e36a3d3ab7cfab01 (patch) | |
| tree | 391382eadd4fec5bb480f2e8934fa352770221d1 /clang-r353983/include/clang/Index/IndexSymbol.h | |
| parent | d1d48b140bafaa8a50107292f5fce95562575765 (diff) | |
| parent | 4f56932d3416ac03f646bc1a611b3135fec2fe08 (diff) | |
Merge "Update prebuilt Clang to r353983." into p9.0HEADp9.0-backupp9.0
Diffstat (limited to 'clang-r353983/include/clang/Index/IndexSymbol.h')
| -rw-r--r-- | clang-r353983/include/clang/Index/IndexSymbol.h | 167 |
1 files changed, 167 insertions, 0 deletions
diff --git a/clang-r353983/include/clang/Index/IndexSymbol.h b/clang-r353983/include/clang/Index/IndexSymbol.h new file mode 100644 index 00000000..0b15b6c3 --- /dev/null +++ b/clang-r353983/include/clang/Index/IndexSymbol.h @@ -0,0 +1,167 @@ +//===- IndexSymbol.h - Types and functions for indexing symbols -*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_CLANG_INDEX_INDEXSYMBOL_H +#define LLVM_CLANG_INDEX_INDEXSYMBOL_H + +#include "clang/Basic/LLVM.h" +#include "clang/Lex/MacroInfo.h" +#include "llvm/ADT/STLExtras.h" +#include "llvm/Support/DataTypes.h" + +namespace clang { + class Decl; + class LangOptions; + +namespace index { + +enum class SymbolKind : uint8_t { + Unknown, + + Module, + Namespace, + NamespaceAlias, + Macro, + + Enum, + Struct, + Class, + Protocol, + Extension, + Union, + TypeAlias, + + Function, + Variable, + Field, + EnumConstant, + + InstanceMethod, + ClassMethod, + StaticMethod, + InstanceProperty, + ClassProperty, + StaticProperty, + + Constructor, + Destructor, + ConversionFunction, + + Parameter, + Using, +}; + +enum class SymbolLanguage : uint8_t { + C, + ObjC, + CXX, + Swift, +}; + +/// Language specific sub-kinds. +enum class SymbolSubKind : uint8_t { + None, + CXXCopyConstructor, + CXXMoveConstructor, + AccessorGetter, + AccessorSetter, + UsingTypename, + UsingValue, +}; + +typedef uint16_t SymbolPropertySet; +/// Set of properties that provide additional info about a symbol. +enum class SymbolProperty : SymbolPropertySet { + Generic = 1 << 0, + TemplatePartialSpecialization = 1 << 1, + TemplateSpecialization = 1 << 2, + UnitTest = 1 << 3, + IBAnnotated = 1 << 4, + IBOutletCollection = 1 << 5, + GKInspectable = 1 << 6, + Local = 1 << 7, + /// Symbol is part of a protocol interface. + ProtocolInterface = 1 << 8, +}; +static const unsigned SymbolPropertyBitNum = 9; + +/// Set of roles that are attributed to symbol occurrences. +/// +/// Low 9 bits of clang-c/include/Index.h CXSymbolRole mirrors this enum. +enum class SymbolRole : uint32_t { + Declaration = 1 << 0, + Definition = 1 << 1, + Reference = 1 << 2, + Read = 1 << 3, + Write = 1 << 4, + Call = 1 << 5, + Dynamic = 1 << 6, + AddressOf = 1 << 7, + Implicit = 1 << 8, + // FIXME: this is not mirrored in CXSymbolRole. + // Note that macro occurrences aren't currently supported in libclang. + Undefinition = 1 << 9, // macro #undef + + // Relation roles. + RelationChildOf = 1 << 10, + RelationBaseOf = 1 << 11, + RelationOverrideOf = 1 << 12, + RelationReceivedBy = 1 << 13, + RelationCalledBy = 1 << 14, + RelationExtendedBy = 1 << 15, + RelationAccessorOf = 1 << 16, + RelationContainedBy = 1 << 17, + RelationIBTypeOf = 1 << 18, + RelationSpecializationOf = 1 << 19, +}; +static const unsigned SymbolRoleBitNum = 20; +typedef unsigned SymbolRoleSet; + +/// Represents a relation to another symbol for a symbol occurrence. +struct SymbolRelation { + SymbolRoleSet Roles; + const Decl *RelatedSymbol; + + SymbolRelation(SymbolRoleSet Roles, const Decl *Sym) + : Roles(Roles), RelatedSymbol(Sym) {} +}; + +struct SymbolInfo { + SymbolKind Kind; + SymbolSubKind SubKind; + SymbolLanguage Lang; + SymbolPropertySet Properties; +}; + +SymbolInfo getSymbolInfo(const Decl *D); + +SymbolInfo getSymbolInfoForMacro(const MacroInfo &MI); + +bool isFunctionLocalSymbol(const Decl *D); + +void applyForEachSymbolRole(SymbolRoleSet Roles, + llvm::function_ref<void(SymbolRole)> Fn); +bool applyForEachSymbolRoleInterruptible(SymbolRoleSet Roles, + llvm::function_ref<bool(SymbolRole)> Fn); +void printSymbolRoles(SymbolRoleSet Roles, raw_ostream &OS); + +/// \returns true if no name was printed, false otherwise. +bool printSymbolName(const Decl *D, const LangOptions &LO, raw_ostream &OS); + +StringRef getSymbolKindString(SymbolKind K); +StringRef getSymbolSubKindString(SymbolSubKind K); +StringRef getSymbolLanguageString(SymbolLanguage K); + +void applyForEachSymbolProperty(SymbolPropertySet Props, + llvm::function_ref<void(SymbolProperty)> Fn); +void printSymbolProperties(SymbolPropertySet Props, raw_ostream &OS); + +} // namespace index +} // namespace clang + +#endif |
