diff options
Diffstat (limited to 'contrib/llvm/tools/clang/lib/Index/EntityImpl.h')
-rw-r--r-- | contrib/llvm/tools/clang/lib/Index/EntityImpl.h | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/contrib/llvm/tools/clang/lib/Index/EntityImpl.h b/contrib/llvm/tools/clang/lib/Index/EntityImpl.h new file mode 100644 index 0000000..6d6a0c6 --- /dev/null +++ b/contrib/llvm/tools/clang/lib/Index/EntityImpl.h @@ -0,0 +1,71 @@ +//===--- EntityImpl.h - Internal Entity implementation---------*- C++ -*-=====// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// Internal implementation for the Entity class +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_CLANG_INDEX_ENTITYIMPL_H +#define LLVM_CLANG_INDEX_ENTITYIMPL_H + +#include "clang/Index/Entity.h" +#include "clang/AST/DeclarationName.h" +#include "llvm/ADT/FoldingSet.h" +#include "llvm/ADT/StringSet.h" + +namespace clang { + +namespace idx { + class ProgramImpl; + +class EntityImpl : public llvm::FoldingSetNode { + Entity Parent; + DeclarationName Name; + + /// \brief Identifier namespace. + unsigned IdNS; + + /// \brief If Name is a selector, this keeps track whether it's for an + /// instance method. + bool IsObjCInstanceMethod; + +public: + EntityImpl(Entity parent, DeclarationName name, unsigned idNS, + bool isObjCInstanceMethod) + : Parent(parent), Name(name), IdNS(idNS), + IsObjCInstanceMethod(isObjCInstanceMethod) { } + + /// \brief Find the Decl that can be referred to by this entity. + Decl *getDecl(ASTContext &AST); + + /// \brief Get an Entity associated with the given Decl. + /// \returns Null if an Entity cannot refer to this Decl. + static Entity get(Decl *D, Program &Prog, ProgramImpl &ProgImpl); + static Entity get(StringRef Name, Program &Prog, ProgramImpl &ProgImpl); + + std::string getPrintableName(); + + void Profile(llvm::FoldingSetNodeID &ID) const { + Profile(ID, Parent, Name, IdNS, IsObjCInstanceMethod); + } + static void Profile(llvm::FoldingSetNodeID &ID, Entity Parent, + DeclarationName Name, unsigned IdNS, + bool isObjCInstanceMethod) { + ID.AddPointer(Parent.getAsOpaquePtr()); + ID.AddPointer(Name.getAsOpaquePtr()); + ID.AddInteger(IdNS); + ID.AddBoolean(isObjCInstanceMethod); + } +}; + +} // namespace idx + +} // namespace clang + +#endif |