116c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenek//===- CXCursor.h - Routines for manipulating CXCursors -------------------===// 216c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenek// 316c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenek// The LLVM Compiler Infrastructure 416c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenek// 516c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenek// This file is distributed under the University of Illinois Open Source 616c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenek// License. See LICENSE.TXT for details. 716c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenek// 816c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenek//===----------------------------------------------------------------------===// 916c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenek// 1016c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenek// This file defines routines for manipulating CXCursors. 1116c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenek// 1216c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenek//===----------------------------------------------------------------------===// 1316c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenek 1416c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenek#ifndef LLVM_CLANG_CXCURSOR_H 152cd10b071eb07e82931a0bb43e7fa5b2ce06ef02Ted Kremenek#define LLVM_CLANG_CXCURSOR_H 1616c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenek 1716c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenek#include "clang-c/Index.h" 182e331b938b38057e333fab0ba841130ea8467794Douglas Gregor#include "clang/Basic/SourceLocation.h" 191f60d9ea523fc321d811fe880ba9a1ec74fa8f9bDouglas Gregor#include "llvm/ADT/PointerUnion.h" 202e331b938b38057e333fab0ba841130ea8467794Douglas Gregor#include <utility> 2116c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenek 2216c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremeneknamespace clang { 2316c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenek 24f46034af49435a4d1a0085a4738343122aeb6521Douglas Gregorclass ASTContext; 25b2cd48756119f4d8d2a865b4b3e0e8efd02e26a0Douglas Gregorclass ASTUnit; 26e77f443dbca8cdc23e5aa94a2653367e4a7cbe47Ted Kremenekclass Attr; 273064ef9e604d19a0cfd0d8e3ed3055bfd83f88fdTed Kremenekclass CXXBaseSpecifier; 2816c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenekclass Decl; 29283cae37b03047c14ef918503bc46b08405c3b69Douglas Gregorclass Expr; 30a67e03fdf1ae8a1f92463a307d0b6281f1161f40Douglas Gregorclass FieldDecl; 31ecdcb883cbc6bb4a2445dc6f02d58d9bdb54a0edDouglas Gregorclass InclusionDirective; 3236897b05ca2886e287f01802614bc10cbadcec22Douglas Gregorclass LabelStmt; 33572feb2a190b5e8b04fb06c4ac50ee0f61e93ff0Douglas Gregorclass MacroDefinition; 349e5bb85ac899eeab7c21b5ff9030c3da6ff4837bChandler Carruthclass MacroExpansion; 35283cae37b03047c14ef918503bc46b08405c3b69Douglas Gregorclass NamedDecl; 362e331b938b38057e333fab0ba841130ea8467794Douglas Gregorclass ObjCInterfaceDecl; 3778db0cdd49ec24034a5b2a4210fcda03a0919a81Douglas Gregorclass ObjCProtocolDecl; 381f60d9ea523fc321d811fe880ba9a1ec74fa8f9bDouglas Gregorclass OverloadedTemplateStorage; 391f60d9ea523fc321d811fe880ba9a1ec74fa8f9bDouglas Gregorclass OverloadExpr; 4016c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenekclass Stmt; 410b36e614aa19df72885d5e0de996f7fbb9874ec3Douglas Gregorclass TemplateDecl; 421f60d9ea523fc321d811fe880ba9a1ec74fa8f9bDouglas Gregorclass TemplateName; 437d0d40e58807f73e06ff5eb637a48e9f978b0e2aDouglas Gregorclass TypeDecl; 44011d8b93b7cfa8492b8a9c909a850d6577e08dcaDouglas Gregorclass VarDecl; 451f60d9ea523fc321d811fe880ba9a1ec74fa8f9bDouglas Gregor 4616c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremeneknamespace cxcursor { 47671436e9e2794c56f3c2e62739d225571493af37Argyrios Kyrtzidis 48671436e9e2794c56f3c2e62739d225571493af37Argyrios KyrtzidisCXCursor getCursor(CXTranslationUnit, SourceLocation); 4916c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenek 50a60ed47da13393796d8552b9fdca12abbb3eea42Ted KremenekCXCursor MakeCXCursor(const clang::Attr *A, clang::Decl *Parent, 51a60ed47da13393796d8552b9fdca12abbb3eea42Ted Kremenek CXTranslationUnit TU); 52a60ed47da13393796d8552b9fdca12abbb3eea42Ted KremenekCXCursor MakeCXCursor(clang::Decl *D, CXTranslationUnit TU, 53aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis SourceRange RegionOfInterest = SourceRange(), 54007a7c9d8dcdb2e9cd94b6075108bfc4c90e6ccdTed Kremenek bool FirstInDeclGroup = true); 55a60ed47da13393796d8552b9fdca12abbb3eea42Ted KremenekCXCursor MakeCXCursor(clang::Stmt *S, clang::Decl *Parent, 56aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis CXTranslationUnit TU, 57aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis SourceRange RegionOfInterest = SourceRange()); 58e77f443dbca8cdc23e5aa94a2653367e4a7cbe47Ted KremenekCXCursor MakeCXCursorInvalid(CXCursorKind K); 5916c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenek 602e331b938b38057e333fab0ba841130ea8467794Douglas Gregor/// \brief Create an Objective-C superclass reference at the given location. 612e331b938b38057e333fab0ba841130ea8467794Douglas GregorCXCursor MakeCursorObjCSuperClassRef(ObjCInterfaceDecl *Super, 62b2cd48756119f4d8d2a865b4b3e0e8efd02e26a0Douglas Gregor SourceLocation Loc, 63a60ed47da13393796d8552b9fdca12abbb3eea42Ted Kremenek CXTranslationUnit TU); 642e331b938b38057e333fab0ba841130ea8467794Douglas Gregor 652e331b938b38057e333fab0ba841130ea8467794Douglas Gregor/// \brief Unpack an ObjCSuperClassRef cursor into the interface it references 662e331b938b38057e333fab0ba841130ea8467794Douglas Gregor/// and optionally the location where the reference occurred. 672e331b938b38057e333fab0ba841130ea8467794Douglas Gregorstd::pair<ObjCInterfaceDecl *, SourceLocation> 6878db0cdd49ec24034a5b2a4210fcda03a0919a81Douglas Gregor getCursorObjCSuperClassRef(CXCursor C); 6978db0cdd49ec24034a5b2a4210fcda03a0919a81Douglas Gregor 7078db0cdd49ec24034a5b2a4210fcda03a0919a81Douglas Gregor/// \brief Create an Objective-C protocol reference at the given location. 714e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios KyrtzidisCXCursor MakeCursorObjCProtocolRef(const ObjCProtocolDecl *Proto, 724e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis SourceLocation Loc, 73a60ed47da13393796d8552b9fdca12abbb3eea42Ted Kremenek CXTranslationUnit TU); 7478db0cdd49ec24034a5b2a4210fcda03a0919a81Douglas Gregor 7578db0cdd49ec24034a5b2a4210fcda03a0919a81Douglas Gregor/// \brief Unpack an ObjCProtocolRef cursor into the protocol it references 7678db0cdd49ec24034a5b2a4210fcda03a0919a81Douglas Gregor/// and optionally the location where the reference occurred. 7778db0cdd49ec24034a5b2a4210fcda03a0919a81Douglas Gregorstd::pair<ObjCProtocolDecl *, SourceLocation> 7878db0cdd49ec24034a5b2a4210fcda03a0919a81Douglas Gregor getCursorObjCProtocolRef(CXCursor C); 792e331b938b38057e333fab0ba841130ea8467794Douglas Gregor 801adb082a709f7b588f03672999294e061234b2cfDouglas Gregor/// \brief Create an Objective-C class reference at the given location. 814e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios KyrtzidisCXCursor MakeCursorObjCClassRef(const ObjCInterfaceDecl *Class, 824e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis SourceLocation Loc, 83a60ed47da13393796d8552b9fdca12abbb3eea42Ted Kremenek CXTranslationUnit TU); 841adb082a709f7b588f03672999294e061234b2cfDouglas Gregor 851adb082a709f7b588f03672999294e061234b2cfDouglas Gregor/// \brief Unpack an ObjCClassRef cursor into the class it references 861adb082a709f7b588f03672999294e061234b2cfDouglas Gregor/// and optionally the location where the reference occurred. 871adb082a709f7b588f03672999294e061234b2cfDouglas Gregorstd::pair<ObjCInterfaceDecl *, SourceLocation> 881adb082a709f7b588f03672999294e061234b2cfDouglas Gregor getCursorObjCClassRef(CXCursor C); 891adb082a709f7b588f03672999294e061234b2cfDouglas Gregor 907d0d40e58807f73e06ff5eb637a48e9f978b0e2aDouglas Gregor/// \brief Create a type reference at the given location. 914e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios KyrtzidisCXCursor MakeCursorTypeRef(const TypeDecl *Type, SourceLocation Loc, 92a60ed47da13393796d8552b9fdca12abbb3eea42Ted Kremenek CXTranslationUnit TU); 930b36e614aa19df72885d5e0de996f7fbb9874ec3Douglas Gregor 947d0d40e58807f73e06ff5eb637a48e9f978b0e2aDouglas Gregor/// \brief Unpack a TypeRef cursor into the class it references 957d0d40e58807f73e06ff5eb637a48e9f978b0e2aDouglas Gregor/// and optionally the location where the reference occurred. 967d0d40e58807f73e06ff5eb637a48e9f978b0e2aDouglas Gregorstd::pair<TypeDecl *, SourceLocation> getCursorTypeRef(CXCursor C); 977d0d40e58807f73e06ff5eb637a48e9f978b0e2aDouglas Gregor 980b36e614aa19df72885d5e0de996f7fbb9874ec3Douglas Gregor/// \brief Create a reference to a template at the given location. 99b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios KyrtzidisCXCursor MakeCursorTemplateRef(const TemplateDecl *Template, SourceLocation Loc, 100a60ed47da13393796d8552b9fdca12abbb3eea42Ted Kremenek CXTranslationUnit TU); 1010b36e614aa19df72885d5e0de996f7fbb9874ec3Douglas Gregor 1020b36e614aa19df72885d5e0de996f7fbb9874ec3Douglas Gregor/// \brief Unpack a TemplateRef cursor into the template it references and 1030b36e614aa19df72885d5e0de996f7fbb9874ec3Douglas Gregor/// the location where the reference occurred. 1040b36e614aa19df72885d5e0de996f7fbb9874ec3Douglas Gregorstd::pair<TemplateDecl *, SourceLocation> getCursorTemplateRef(CXCursor C); 1056931900f43cea558c6974075256c07728dbfecc6Douglas Gregor 1066931900f43cea558c6974075256c07728dbfecc6Douglas Gregor/// \brief Create a reference to a namespace or namespace alias at the given 1076931900f43cea558c6974075256c07728dbfecc6Douglas Gregor/// location. 108b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios KyrtzidisCXCursor MakeCursorNamespaceRef(const NamedDecl *NS, SourceLocation Loc, 109a60ed47da13393796d8552b9fdca12abbb3eea42Ted Kremenek CXTranslationUnit TU); 1106931900f43cea558c6974075256c07728dbfecc6Douglas Gregor 1116931900f43cea558c6974075256c07728dbfecc6Douglas Gregor/// \brief Unpack a NamespaceRef cursor into the namespace or namespace alias 1126931900f43cea558c6974075256c07728dbfecc6Douglas Gregor/// it references and the location where the reference occurred. 1136931900f43cea558c6974075256c07728dbfecc6Douglas Gregorstd::pair<NamedDecl *, SourceLocation> getCursorNamespaceRef(CXCursor C); 1146931900f43cea558c6974075256c07728dbfecc6Douglas Gregor 115011d8b93b7cfa8492b8a9c909a850d6577e08dcaDouglas Gregor/// \brief Create a reference to a variable at the given location. 116011d8b93b7cfa8492b8a9c909a850d6577e08dcaDouglas GregorCXCursor MakeCursorVariableRef(const VarDecl *Var, SourceLocation Loc, 117011d8b93b7cfa8492b8a9c909a850d6577e08dcaDouglas Gregor CXTranslationUnit TU); 118011d8b93b7cfa8492b8a9c909a850d6577e08dcaDouglas Gregor 119011d8b93b7cfa8492b8a9c909a850d6577e08dcaDouglas Gregor/// \brief Unpack a VariableRef cursor into the variable it references and the 120011d8b93b7cfa8492b8a9c909a850d6577e08dcaDouglas Gregor/// location where the where the reference occurred. 121011d8b93b7cfa8492b8a9c909a850d6577e08dcaDouglas Gregorstd::pair<VarDecl *, SourceLocation> getCursorVariableRef(CXCursor C); 122011d8b93b7cfa8492b8a9c909a850d6577e08dcaDouglas Gregor 123a67e03fdf1ae8a1f92463a307d0b6281f1161f40Douglas Gregor/// \brief Create a reference to a field at the given location. 124b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios KyrtzidisCXCursor MakeCursorMemberRef(const FieldDecl *Field, SourceLocation Loc, 125a60ed47da13393796d8552b9fdca12abbb3eea42Ted Kremenek CXTranslationUnit TU); 126a67e03fdf1ae8a1f92463a307d0b6281f1161f40Douglas Gregor 127a67e03fdf1ae8a1f92463a307d0b6281f1161f40Douglas Gregor/// \brief Unpack a MemberRef cursor into the field it references and the 128a67e03fdf1ae8a1f92463a307d0b6281f1161f40Douglas Gregor/// location where the reference occurred. 129a67e03fdf1ae8a1f92463a307d0b6281f1161f40Douglas Gregorstd::pair<FieldDecl *, SourceLocation> getCursorMemberRef(CXCursor C); 130a67e03fdf1ae8a1f92463a307d0b6281f1161f40Douglas Gregor 1313064ef9e604d19a0cfd0d8e3ed3055bfd83f88fdTed Kremenek/// \brief Create a CXX base specifier cursor. 1322957e6f8c4c2e58a4b9cb639949fea801970fe36Argyrios KyrtzidisCXCursor MakeCursorCXXBaseSpecifier(const CXXBaseSpecifier *B, 133a60ed47da13393796d8552b9fdca12abbb3eea42Ted Kremenek CXTranslationUnit TU); 1343064ef9e604d19a0cfd0d8e3ed3055bfd83f88fdTed Kremenek 1353064ef9e604d19a0cfd0d8e3ed3055bfd83f88fdTed Kremenek/// \brief Unpack a CXXBaseSpecifier cursor into a CXXBaseSpecifier. 1363064ef9e604d19a0cfd0d8e3ed3055bfd83f88fdTed KremenekCXXBaseSpecifier *getCursorCXXBaseSpecifier(CXCursor C); 1373064ef9e604d19a0cfd0d8e3ed3055bfd83f88fdTed Kremenek 1389f1e3ff3b3095967e2b92b57a53524e2d6bb141cDouglas Gregor/// \brief Create a preprocessing directive cursor. 139a60ed47da13393796d8552b9fdca12abbb3eea42Ted KremenekCXCursor MakePreprocessingDirectiveCursor(SourceRange Range, 140a60ed47da13393796d8552b9fdca12abbb3eea42Ted Kremenek CXTranslationUnit TU); 1419f1e3ff3b3095967e2b92b57a53524e2d6bb141cDouglas Gregor 1429f1e3ff3b3095967e2b92b57a53524e2d6bb141cDouglas Gregor/// \brief Unpack a given preprocessing directive to retrieve its source range. 1439f1e3ff3b3095967e2b92b57a53524e2d6bb141cDouglas GregorSourceRange getCursorPreprocessingDirective(CXCursor C); 1444807231938d8aff28de09f78f301f9ba5845e5e4Douglas Gregor 145572feb2a190b5e8b04fb06c4ac50ee0f61e93ff0Douglas Gregor/// \brief Create a macro definition cursor. 146a60ed47da13393796d8552b9fdca12abbb3eea42Ted KremenekCXCursor MakeMacroDefinitionCursor(MacroDefinition *, CXTranslationUnit TU); 147572feb2a190b5e8b04fb06c4ac50ee0f61e93ff0Douglas Gregor 148572feb2a190b5e8b04fb06c4ac50ee0f61e93ff0Douglas Gregor/// \brief Unpack a given macro definition cursor to retrieve its 149572feb2a190b5e8b04fb06c4ac50ee0f61e93ff0Douglas Gregor/// source range. 150572feb2a190b5e8b04fb06c4ac50ee0f61e93ff0Douglas GregorMacroDefinition *getCursorMacroDefinition(CXCursor C); 151572feb2a190b5e8b04fb06c4ac50ee0f61e93ff0Douglas Gregor 1529e5bb85ac899eeab7c21b5ff9030c3da6ff4837bChandler Carruth/// \brief Create a macro expansion cursor. 1539e5bb85ac899eeab7c21b5ff9030c3da6ff4837bChandler CarruthCXCursor MakeMacroExpansionCursor(MacroExpansion *, 1549e5bb85ac899eeab7c21b5ff9030c3da6ff4837bChandler Carruth CXTranslationUnit TU); 1554807231938d8aff28de09f78f301f9ba5845e5e4Douglas Gregor 1569e5bb85ac899eeab7c21b5ff9030c3da6ff4837bChandler Carruth/// \brief Unpack a given macro expansion cursor to retrieve its 1574807231938d8aff28de09f78f301f9ba5845e5e4Douglas Gregor/// source range. 1589e5bb85ac899eeab7c21b5ff9030c3da6ff4837bChandler CarruthMacroExpansion *getCursorMacroExpansion(CXCursor C); 1594807231938d8aff28de09f78f301f9ba5845e5e4Douglas Gregor 160ecdcb883cbc6bb4a2445dc6f02d58d9bdb54a0edDouglas Gregor/// \brief Create an inclusion directive cursor. 161a60ed47da13393796d8552b9fdca12abbb3eea42Ted KremenekCXCursor MakeInclusionDirectiveCursor(InclusionDirective *, 162a60ed47da13393796d8552b9fdca12abbb3eea42Ted Kremenek CXTranslationUnit TU); 163ecdcb883cbc6bb4a2445dc6f02d58d9bdb54a0edDouglas Gregor 164ecdcb883cbc6bb4a2445dc6f02d58d9bdb54a0edDouglas Gregor/// \brief Unpack a given inclusion directive cursor to retrieve its 165ecdcb883cbc6bb4a2445dc6f02d58d9bdb54a0edDouglas Gregor/// source range. 166ecdcb883cbc6bb4a2445dc6f02d58d9bdb54a0edDouglas GregorInclusionDirective *getCursorInclusionDirective(CXCursor C); 167ecdcb883cbc6bb4a2445dc6f02d58d9bdb54a0edDouglas Gregor 16836897b05ca2886e287f01802614bc10cbadcec22Douglas Gregor/// \brief Create a label reference at the given location. 169a60ed47da13393796d8552b9fdca12abbb3eea42Ted KremenekCXCursor MakeCursorLabelRef(LabelStmt *Label, SourceLocation Loc, 170a60ed47da13393796d8552b9fdca12abbb3eea42Ted Kremenek CXTranslationUnit TU); 17136897b05ca2886e287f01802614bc10cbadcec22Douglas Gregor 17236897b05ca2886e287f01802614bc10cbadcec22Douglas Gregor/// \brief Unpack a label reference into the label statement it refers to and 17336897b05ca2886e287f01802614bc10cbadcec22Douglas Gregor/// the location of the reference. 17436897b05ca2886e287f01802614bc10cbadcec22Douglas Gregorstd::pair<LabelStmt *, SourceLocation> getCursorLabelRef(CXCursor C); 1751f60d9ea523fc321d811fe880ba9a1ec74fa8f9bDouglas Gregor 1761f60d9ea523fc321d811fe880ba9a1ec74fa8f9bDouglas Gregor/// \brief Create a overloaded declaration reference cursor for an expression. 177a60ed47da13393796d8552b9fdca12abbb3eea42Ted KremenekCXCursor MakeCursorOverloadedDeclRef(OverloadExpr *E, CXTranslationUnit TU); 1781f60d9ea523fc321d811fe880ba9a1ec74fa8f9bDouglas Gregor 1791f60d9ea523fc321d811fe880ba9a1ec74fa8f9bDouglas Gregor/// \brief Create a overloaded declaration reference cursor for a declaration. 1801f60d9ea523fc321d811fe880ba9a1ec74fa8f9bDouglas GregorCXCursor MakeCursorOverloadedDeclRef(Decl *D, SourceLocation Location, 181a60ed47da13393796d8552b9fdca12abbb3eea42Ted Kremenek CXTranslationUnit TU); 1821f60d9ea523fc321d811fe880ba9a1ec74fa8f9bDouglas Gregor 1831f60d9ea523fc321d811fe880ba9a1ec74fa8f9bDouglas Gregor/// \brief Create a overloaded declaration reference cursor for a template name. 1841f60d9ea523fc321d811fe880ba9a1ec74fa8f9bDouglas GregorCXCursor MakeCursorOverloadedDeclRef(TemplateName Template, 185a60ed47da13393796d8552b9fdca12abbb3eea42Ted Kremenek SourceLocation Location, 186a60ed47da13393796d8552b9fdca12abbb3eea42Ted Kremenek CXTranslationUnit TU); 1871f60d9ea523fc321d811fe880ba9a1ec74fa8f9bDouglas Gregor 1881f60d9ea523fc321d811fe880ba9a1ec74fa8f9bDouglas Gregor/// \brief Internal storage for an overloaded declaration reference cursor; 1891f60d9ea523fc321d811fe880ba9a1ec74fa8f9bDouglas Gregortypedef llvm::PointerUnion3<OverloadExpr *, Decl *, 1901f60d9ea523fc321d811fe880ba9a1ec74fa8f9bDouglas Gregor OverloadedTemplateStorage *> 1911f60d9ea523fc321d811fe880ba9a1ec74fa8f9bDouglas Gregor OverloadedDeclRefStorage; 1921f60d9ea523fc321d811fe880ba9a1ec74fa8f9bDouglas Gregor 1931f60d9ea523fc321d811fe880ba9a1ec74fa8f9bDouglas Gregor/// \brief Unpack an overloaded declaration reference into an expression, 1941f60d9ea523fc321d811fe880ba9a1ec74fa8f9bDouglas Gregor/// declaration, or template name along with the source location. 1951f60d9ea523fc321d811fe880ba9a1ec74fa8f9bDouglas Gregorstd::pair<OverloadedDeclRefStorage, SourceLocation> 1961f60d9ea523fc321d811fe880ba9a1ec74fa8f9bDouglas Gregor getCursorOverloadedDeclRef(CXCursor C); 19736897b05ca2886e287f01802614bc10cbadcec22Douglas Gregor 198283cae37b03047c14ef918503bc46b08405c3b69Douglas GregorDecl *getCursorDecl(CXCursor Cursor); 199283cae37b03047c14ef918503bc46b08405c3b69Douglas GregorExpr *getCursorExpr(CXCursor Cursor); 200283cae37b03047c14ef918503bc46b08405c3b69Douglas GregorStmt *getCursorStmt(CXCursor Cursor); 20195f33555a6d51b6537a9ed3968c3d1c2e4991b51Ted KremenekAttr *getCursorAttr(CXCursor Cursor); 2028ccac3de1335f1cfd7cea56ba1cefcf0b724ce3fArgyrios KyrtzidisDecl *getCursorParentDecl(CXCursor Cursor); 20395f33555a6d51b6537a9ed3968c3d1c2e4991b51Ted Kremenek 204f46034af49435a4d1a0085a4738343122aeb6521Douglas GregorASTContext &getCursorContext(CXCursor Cursor); 205b2cd48756119f4d8d2a865b4b3e0e8efd02e26a0Douglas GregorASTUnit *getCursorASTUnit(CXCursor Cursor); 206a60ed47da13393796d8552b9fdca12abbb3eea42Ted KremenekCXTranslationUnit getCursorTU(CXCursor Cursor); 207b11be041e4f05519a2eabf6a99429ba6110f1ca9Argyrios Kyrtzidis 208b11be041e4f05519a2eabf6a99429ba6110f1ca9Argyrios Kyrtzidisvoid getOverriddenCursors(CXCursor cursor, 209b11be041e4f05519a2eabf6a99429ba6110f1ca9Argyrios Kyrtzidis SmallVectorImpl<CXCursor> &overridden); 210b11be041e4f05519a2eabf6a99429ba6110f1ca9Argyrios Kyrtzidis 211aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis/// \brief Returns a index/location pair for a selector identifier if the cursor 212aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis/// points to one. 213aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidisstd::pair<int, SourceLocation> getSelectorIdentifierIndexAndLoc(CXCursor); 214aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidisstatic inline int getSelectorIdentifierIndex(CXCursor cursor) { 215aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis return getSelectorIdentifierIndexAndLoc(cursor).first; 216aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis} 217aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidisstatic inline SourceLocation getSelectorIdentifierLoc(CXCursor cursor) { 218aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis return getSelectorIdentifierIndexAndLoc(cursor).second; 219aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis} 220aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis 221aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios KyrtzidisCXCursor getSelectorIdentifierCursor(int SelIdx, CXCursor cursor); 222aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis 223aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidisstatic inline CXCursor getTypeRefedCallExprCursor(CXCursor cursor) { 224aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis CXCursor newCursor = cursor; 225aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis if (cursor.kind == CXCursor_CallExpr) 226aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis newCursor.xdata = 1; 227aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis return newCursor; 228aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis} 229aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis 230aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios KyrtzidisCXCursor getTypeRefCursor(CXCursor cursor); 231aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis 232b6a4ac41353476ed771d02ae6a96c2663625ffcdArgyrios Kyrtzidis/// \brief Generate a USR for \arg D and put it in \arg Buf. 233b6a4ac41353476ed771d02ae6a96c2663625ffcdArgyrios Kyrtzidis/// \returns true if no USR was computed or the result should be ignored, 234b6a4ac41353476ed771d02ae6a96c2663625ffcdArgyrios Kyrtzidis/// false otherwise. 2354e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidisbool getDeclCursorUSR(const Decl *D, SmallVectorImpl<char> &Buf); 236b6a4ac41353476ed771d02ae6a96c2663625ffcdArgyrios Kyrtzidis 237283cae37b03047c14ef918503bc46b08405c3b69Douglas Gregorbool operator==(CXCursor X, CXCursor Y); 238283cae37b03047c14ef918503bc46b08405c3b69Douglas Gregor 239283cae37b03047c14ef918503bc46b08405c3b69Douglas Gregorinline bool operator!=(CXCursor X, CXCursor Y) { 240283cae37b03047c14ef918503bc46b08405c3b69Douglas Gregor return !(X == Y); 241283cae37b03047c14ef918503bc46b08405c3b69Douglas Gregor} 242283cae37b03047c14ef918503bc46b08405c3b69Douglas Gregor 243007a7c9d8dcdb2e9cd94b6075108bfc4c90e6ccdTed Kremenek/// \brief Return true if the cursor represents a declaration that is the 244007a7c9d8dcdb2e9cd94b6075108bfc4c90e6ccdTed Kremenek/// first in a declaration group. 245007a7c9d8dcdb2e9cd94b6075108bfc4c90e6ccdTed Kremenekbool isFirstInDeclGroup(CXCursor C); 246007a7c9d8dcdb2e9cd94b6075108bfc4c90e6ccdTed Kremenek 24716c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenek}} // end namespace: clang::cxcursor 24816c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenek 24916c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenek#endif 250