CXCursor.h revision aed123ec3cc37e457fe20a6158fdadf8849ad916
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; 441f60d9ea523fc321d811fe880ba9a1ec74fa8f9bDouglas Gregor 4516c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremeneknamespace cxcursor { 46671436e9e2794c56f3c2e62739d225571493af37Argyrios Kyrtzidis 47671436e9e2794c56f3c2e62739d225571493af37Argyrios KyrtzidisCXCursor getCursor(CXTranslationUnit, SourceLocation); 4816c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenek 49a60ed47da13393796d8552b9fdca12abbb3eea42Ted KremenekCXCursor MakeCXCursor(const clang::Attr *A, clang::Decl *Parent, 50a60ed47da13393796d8552b9fdca12abbb3eea42Ted Kremenek CXTranslationUnit TU); 51a60ed47da13393796d8552b9fdca12abbb3eea42Ted KremenekCXCursor MakeCXCursor(clang::Decl *D, CXTranslationUnit TU, 52aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis SourceRange RegionOfInterest = SourceRange(), 53007a7c9d8dcdb2e9cd94b6075108bfc4c90e6ccdTed Kremenek bool FirstInDeclGroup = true); 54a60ed47da13393796d8552b9fdca12abbb3eea42Ted KremenekCXCursor MakeCXCursor(clang::Stmt *S, clang::Decl *Parent, 55aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis CXTranslationUnit TU, 56aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis SourceRange RegionOfInterest = SourceRange()); 57e77f443dbca8cdc23e5aa94a2653367e4a7cbe47Ted KremenekCXCursor MakeCXCursorInvalid(CXCursorKind K); 5816c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenek 592e331b938b38057e333fab0ba841130ea8467794Douglas Gregor/// \brief Create an Objective-C superclass reference at the given location. 602e331b938b38057e333fab0ba841130ea8467794Douglas GregorCXCursor MakeCursorObjCSuperClassRef(ObjCInterfaceDecl *Super, 61b2cd48756119f4d8d2a865b4b3e0e8efd02e26a0Douglas Gregor SourceLocation Loc, 62a60ed47da13393796d8552b9fdca12abbb3eea42Ted Kremenek CXTranslationUnit TU); 632e331b938b38057e333fab0ba841130ea8467794Douglas Gregor 642e331b938b38057e333fab0ba841130ea8467794Douglas Gregor/// \brief Unpack an ObjCSuperClassRef cursor into the interface it references 652e331b938b38057e333fab0ba841130ea8467794Douglas Gregor/// and optionally the location where the reference occurred. 662e331b938b38057e333fab0ba841130ea8467794Douglas Gregorstd::pair<ObjCInterfaceDecl *, SourceLocation> 6778db0cdd49ec24034a5b2a4210fcda03a0919a81Douglas Gregor getCursorObjCSuperClassRef(CXCursor C); 6878db0cdd49ec24034a5b2a4210fcda03a0919a81Douglas Gregor 6978db0cdd49ec24034a5b2a4210fcda03a0919a81Douglas Gregor/// \brief Create an Objective-C protocol reference at the given location. 70b2cd48756119f4d8d2a865b4b3e0e8efd02e26a0Douglas GregorCXCursor MakeCursorObjCProtocolRef(ObjCProtocolDecl *Proto, SourceLocation Loc, 71a60ed47da13393796d8552b9fdca12abbb3eea42Ted Kremenek CXTranslationUnit TU); 7278db0cdd49ec24034a5b2a4210fcda03a0919a81Douglas Gregor 7378db0cdd49ec24034a5b2a4210fcda03a0919a81Douglas Gregor/// \brief Unpack an ObjCProtocolRef cursor into the protocol it references 7478db0cdd49ec24034a5b2a4210fcda03a0919a81Douglas Gregor/// and optionally the location where the reference occurred. 7578db0cdd49ec24034a5b2a4210fcda03a0919a81Douglas Gregorstd::pair<ObjCProtocolDecl *, SourceLocation> 7678db0cdd49ec24034a5b2a4210fcda03a0919a81Douglas Gregor getCursorObjCProtocolRef(CXCursor C); 772e331b938b38057e333fab0ba841130ea8467794Douglas Gregor 781adb082a709f7b588f03672999294e061234b2cfDouglas Gregor/// \brief Create an Objective-C class reference at the given location. 79b2cd48756119f4d8d2a865b4b3e0e8efd02e26a0Douglas GregorCXCursor MakeCursorObjCClassRef(ObjCInterfaceDecl *Class, SourceLocation Loc, 80a60ed47da13393796d8552b9fdca12abbb3eea42Ted Kremenek CXTranslationUnit TU); 811adb082a709f7b588f03672999294e061234b2cfDouglas Gregor 821adb082a709f7b588f03672999294e061234b2cfDouglas Gregor/// \brief Unpack an ObjCClassRef cursor into the class it references 831adb082a709f7b588f03672999294e061234b2cfDouglas Gregor/// and optionally the location where the reference occurred. 841adb082a709f7b588f03672999294e061234b2cfDouglas Gregorstd::pair<ObjCInterfaceDecl *, SourceLocation> 851adb082a709f7b588f03672999294e061234b2cfDouglas Gregor getCursorObjCClassRef(CXCursor C); 861adb082a709f7b588f03672999294e061234b2cfDouglas Gregor 877d0d40e58807f73e06ff5eb637a48e9f978b0e2aDouglas Gregor/// \brief Create a type reference at the given location. 88a60ed47da13393796d8552b9fdca12abbb3eea42Ted KremenekCXCursor MakeCursorTypeRef(TypeDecl *Type, SourceLocation Loc, 89a60ed47da13393796d8552b9fdca12abbb3eea42Ted Kremenek CXTranslationUnit TU); 900b36e614aa19df72885d5e0de996f7fbb9874ec3Douglas Gregor 917d0d40e58807f73e06ff5eb637a48e9f978b0e2aDouglas Gregor/// \brief Unpack a TypeRef cursor into the class it references 927d0d40e58807f73e06ff5eb637a48e9f978b0e2aDouglas Gregor/// and optionally the location where the reference occurred. 937d0d40e58807f73e06ff5eb637a48e9f978b0e2aDouglas Gregorstd::pair<TypeDecl *, SourceLocation> getCursorTypeRef(CXCursor C); 947d0d40e58807f73e06ff5eb637a48e9f978b0e2aDouglas Gregor 950b36e614aa19df72885d5e0de996f7fbb9874ec3Douglas Gregor/// \brief Create a reference to a template at the given location. 960b36e614aa19df72885d5e0de996f7fbb9874ec3Douglas GregorCXCursor MakeCursorTemplateRef(TemplateDecl *Template, SourceLocation Loc, 97a60ed47da13393796d8552b9fdca12abbb3eea42Ted Kremenek CXTranslationUnit TU); 980b36e614aa19df72885d5e0de996f7fbb9874ec3Douglas Gregor 990b36e614aa19df72885d5e0de996f7fbb9874ec3Douglas Gregor/// \brief Unpack a TemplateRef cursor into the template it references and 1000b36e614aa19df72885d5e0de996f7fbb9874ec3Douglas Gregor/// the location where the reference occurred. 1010b36e614aa19df72885d5e0de996f7fbb9874ec3Douglas Gregorstd::pair<TemplateDecl *, SourceLocation> getCursorTemplateRef(CXCursor C); 1026931900f43cea558c6974075256c07728dbfecc6Douglas Gregor 1036931900f43cea558c6974075256c07728dbfecc6Douglas Gregor/// \brief Create a reference to a namespace or namespace alias at the given 1046931900f43cea558c6974075256c07728dbfecc6Douglas Gregor/// location. 105a60ed47da13393796d8552b9fdca12abbb3eea42Ted KremenekCXCursor MakeCursorNamespaceRef(NamedDecl *NS, SourceLocation Loc, 106a60ed47da13393796d8552b9fdca12abbb3eea42Ted Kremenek CXTranslationUnit TU); 1076931900f43cea558c6974075256c07728dbfecc6Douglas Gregor 1086931900f43cea558c6974075256c07728dbfecc6Douglas Gregor/// \brief Unpack a NamespaceRef cursor into the namespace or namespace alias 1096931900f43cea558c6974075256c07728dbfecc6Douglas Gregor/// it references and the location where the reference occurred. 1106931900f43cea558c6974075256c07728dbfecc6Douglas Gregorstd::pair<NamedDecl *, SourceLocation> getCursorNamespaceRef(CXCursor C); 1116931900f43cea558c6974075256c07728dbfecc6Douglas Gregor 112a67e03fdf1ae8a1f92463a307d0b6281f1161f40Douglas Gregor/// \brief Create a reference to a field at the given location. 113a67e03fdf1ae8a1f92463a307d0b6281f1161f40Douglas GregorCXCursor MakeCursorMemberRef(FieldDecl *Field, SourceLocation Loc, 114a60ed47da13393796d8552b9fdca12abbb3eea42Ted Kremenek CXTranslationUnit TU); 115a67e03fdf1ae8a1f92463a307d0b6281f1161f40Douglas Gregor 116a67e03fdf1ae8a1f92463a307d0b6281f1161f40Douglas Gregor/// \brief Unpack a MemberRef cursor into the field it references and the 117a67e03fdf1ae8a1f92463a307d0b6281f1161f40Douglas Gregor/// location where the reference occurred. 118a67e03fdf1ae8a1f92463a307d0b6281f1161f40Douglas Gregorstd::pair<FieldDecl *, SourceLocation> getCursorMemberRef(CXCursor C); 119a67e03fdf1ae8a1f92463a307d0b6281f1161f40Douglas Gregor 1203064ef9e604d19a0cfd0d8e3ed3055bfd83f88fdTed Kremenek/// \brief Create a CXX base specifier cursor. 121a60ed47da13393796d8552b9fdca12abbb3eea42Ted KremenekCXCursor MakeCursorCXXBaseSpecifier(CXXBaseSpecifier *B, 122a60ed47da13393796d8552b9fdca12abbb3eea42Ted Kremenek CXTranslationUnit TU); 1233064ef9e604d19a0cfd0d8e3ed3055bfd83f88fdTed Kremenek 1243064ef9e604d19a0cfd0d8e3ed3055bfd83f88fdTed Kremenek/// \brief Unpack a CXXBaseSpecifier cursor into a CXXBaseSpecifier. 1253064ef9e604d19a0cfd0d8e3ed3055bfd83f88fdTed KremenekCXXBaseSpecifier *getCursorCXXBaseSpecifier(CXCursor C); 1263064ef9e604d19a0cfd0d8e3ed3055bfd83f88fdTed Kremenek 1279f1e3ff3b3095967e2b92b57a53524e2d6bb141cDouglas Gregor/// \brief Create a preprocessing directive cursor. 128a60ed47da13393796d8552b9fdca12abbb3eea42Ted KremenekCXCursor MakePreprocessingDirectiveCursor(SourceRange Range, 129a60ed47da13393796d8552b9fdca12abbb3eea42Ted Kremenek CXTranslationUnit TU); 1309f1e3ff3b3095967e2b92b57a53524e2d6bb141cDouglas Gregor 1319f1e3ff3b3095967e2b92b57a53524e2d6bb141cDouglas Gregor/// \brief Unpack a given preprocessing directive to retrieve its source range. 1329f1e3ff3b3095967e2b92b57a53524e2d6bb141cDouglas GregorSourceRange getCursorPreprocessingDirective(CXCursor C); 1334807231938d8aff28de09f78f301f9ba5845e5e4Douglas Gregor 134572feb2a190b5e8b04fb06c4ac50ee0f61e93ff0Douglas Gregor/// \brief Create a macro definition cursor. 135a60ed47da13393796d8552b9fdca12abbb3eea42Ted KremenekCXCursor MakeMacroDefinitionCursor(MacroDefinition *, CXTranslationUnit TU); 136572feb2a190b5e8b04fb06c4ac50ee0f61e93ff0Douglas Gregor 137572feb2a190b5e8b04fb06c4ac50ee0f61e93ff0Douglas Gregor/// \brief Unpack a given macro definition cursor to retrieve its 138572feb2a190b5e8b04fb06c4ac50ee0f61e93ff0Douglas Gregor/// source range. 139572feb2a190b5e8b04fb06c4ac50ee0f61e93ff0Douglas GregorMacroDefinition *getCursorMacroDefinition(CXCursor C); 140572feb2a190b5e8b04fb06c4ac50ee0f61e93ff0Douglas Gregor 1419e5bb85ac899eeab7c21b5ff9030c3da6ff4837bChandler Carruth/// \brief Create a macro expansion cursor. 1429e5bb85ac899eeab7c21b5ff9030c3da6ff4837bChandler CarruthCXCursor MakeMacroExpansionCursor(MacroExpansion *, 1439e5bb85ac899eeab7c21b5ff9030c3da6ff4837bChandler Carruth CXTranslationUnit TU); 1444807231938d8aff28de09f78f301f9ba5845e5e4Douglas Gregor 1459e5bb85ac899eeab7c21b5ff9030c3da6ff4837bChandler Carruth/// \brief Unpack a given macro expansion cursor to retrieve its 1464807231938d8aff28de09f78f301f9ba5845e5e4Douglas Gregor/// source range. 1479e5bb85ac899eeab7c21b5ff9030c3da6ff4837bChandler CarruthMacroExpansion *getCursorMacroExpansion(CXCursor C); 1484807231938d8aff28de09f78f301f9ba5845e5e4Douglas Gregor 149ecdcb883cbc6bb4a2445dc6f02d58d9bdb54a0edDouglas Gregor/// \brief Create an inclusion directive cursor. 150a60ed47da13393796d8552b9fdca12abbb3eea42Ted KremenekCXCursor MakeInclusionDirectiveCursor(InclusionDirective *, 151a60ed47da13393796d8552b9fdca12abbb3eea42Ted Kremenek CXTranslationUnit TU); 152ecdcb883cbc6bb4a2445dc6f02d58d9bdb54a0edDouglas Gregor 153ecdcb883cbc6bb4a2445dc6f02d58d9bdb54a0edDouglas Gregor/// \brief Unpack a given inclusion directive cursor to retrieve its 154ecdcb883cbc6bb4a2445dc6f02d58d9bdb54a0edDouglas Gregor/// source range. 155ecdcb883cbc6bb4a2445dc6f02d58d9bdb54a0edDouglas GregorInclusionDirective *getCursorInclusionDirective(CXCursor C); 156ecdcb883cbc6bb4a2445dc6f02d58d9bdb54a0edDouglas Gregor 15736897b05ca2886e287f01802614bc10cbadcec22Douglas Gregor/// \brief Create a label reference at the given location. 158a60ed47da13393796d8552b9fdca12abbb3eea42Ted KremenekCXCursor MakeCursorLabelRef(LabelStmt *Label, SourceLocation Loc, 159a60ed47da13393796d8552b9fdca12abbb3eea42Ted Kremenek CXTranslationUnit TU); 16036897b05ca2886e287f01802614bc10cbadcec22Douglas Gregor 16136897b05ca2886e287f01802614bc10cbadcec22Douglas Gregor/// \brief Unpack a label reference into the label statement it refers to and 16236897b05ca2886e287f01802614bc10cbadcec22Douglas Gregor/// the location of the reference. 16336897b05ca2886e287f01802614bc10cbadcec22Douglas Gregorstd::pair<LabelStmt *, SourceLocation> getCursorLabelRef(CXCursor C); 1641f60d9ea523fc321d811fe880ba9a1ec74fa8f9bDouglas Gregor 1651f60d9ea523fc321d811fe880ba9a1ec74fa8f9bDouglas Gregor/// \brief Create a overloaded declaration reference cursor for an expression. 166a60ed47da13393796d8552b9fdca12abbb3eea42Ted KremenekCXCursor MakeCursorOverloadedDeclRef(OverloadExpr *E, CXTranslationUnit TU); 1671f60d9ea523fc321d811fe880ba9a1ec74fa8f9bDouglas Gregor 1681f60d9ea523fc321d811fe880ba9a1ec74fa8f9bDouglas Gregor/// \brief Create a overloaded declaration reference cursor for a declaration. 1691f60d9ea523fc321d811fe880ba9a1ec74fa8f9bDouglas GregorCXCursor MakeCursorOverloadedDeclRef(Decl *D, SourceLocation Location, 170a60ed47da13393796d8552b9fdca12abbb3eea42Ted Kremenek CXTranslationUnit TU); 1711f60d9ea523fc321d811fe880ba9a1ec74fa8f9bDouglas Gregor 1721f60d9ea523fc321d811fe880ba9a1ec74fa8f9bDouglas Gregor/// \brief Create a overloaded declaration reference cursor for a template name. 1731f60d9ea523fc321d811fe880ba9a1ec74fa8f9bDouglas GregorCXCursor MakeCursorOverloadedDeclRef(TemplateName Template, 174a60ed47da13393796d8552b9fdca12abbb3eea42Ted Kremenek SourceLocation Location, 175a60ed47da13393796d8552b9fdca12abbb3eea42Ted Kremenek CXTranslationUnit TU); 1761f60d9ea523fc321d811fe880ba9a1ec74fa8f9bDouglas Gregor 1771f60d9ea523fc321d811fe880ba9a1ec74fa8f9bDouglas Gregor/// \brief Internal storage for an overloaded declaration reference cursor; 1781f60d9ea523fc321d811fe880ba9a1ec74fa8f9bDouglas Gregortypedef llvm::PointerUnion3<OverloadExpr *, Decl *, 1791f60d9ea523fc321d811fe880ba9a1ec74fa8f9bDouglas Gregor OverloadedTemplateStorage *> 1801f60d9ea523fc321d811fe880ba9a1ec74fa8f9bDouglas Gregor OverloadedDeclRefStorage; 1811f60d9ea523fc321d811fe880ba9a1ec74fa8f9bDouglas Gregor 1821f60d9ea523fc321d811fe880ba9a1ec74fa8f9bDouglas Gregor/// \brief Unpack an overloaded declaration reference into an expression, 1831f60d9ea523fc321d811fe880ba9a1ec74fa8f9bDouglas Gregor/// declaration, or template name along with the source location. 1841f60d9ea523fc321d811fe880ba9a1ec74fa8f9bDouglas Gregorstd::pair<OverloadedDeclRefStorage, SourceLocation> 1851f60d9ea523fc321d811fe880ba9a1ec74fa8f9bDouglas Gregor getCursorOverloadedDeclRef(CXCursor C); 18636897b05ca2886e287f01802614bc10cbadcec22Douglas Gregor 187283cae37b03047c14ef918503bc46b08405c3b69Douglas GregorDecl *getCursorDecl(CXCursor Cursor); 188283cae37b03047c14ef918503bc46b08405c3b69Douglas GregorExpr *getCursorExpr(CXCursor Cursor); 189283cae37b03047c14ef918503bc46b08405c3b69Douglas GregorStmt *getCursorStmt(CXCursor Cursor); 19095f33555a6d51b6537a9ed3968c3d1c2e4991b51Ted KremenekAttr *getCursorAttr(CXCursor Cursor); 1918ccac3de1335f1cfd7cea56ba1cefcf0b724ce3fArgyrios KyrtzidisDecl *getCursorParentDecl(CXCursor Cursor); 19295f33555a6d51b6537a9ed3968c3d1c2e4991b51Ted Kremenek 193f46034af49435a4d1a0085a4738343122aeb6521Douglas GregorASTContext &getCursorContext(CXCursor Cursor); 194b2cd48756119f4d8d2a865b4b3e0e8efd02e26a0Douglas GregorASTUnit *getCursorASTUnit(CXCursor Cursor); 195a60ed47da13393796d8552b9fdca12abbb3eea42Ted KremenekCXTranslationUnit getCursorTU(CXCursor Cursor); 196b11be041e4f05519a2eabf6a99429ba6110f1ca9Argyrios Kyrtzidis 197b11be041e4f05519a2eabf6a99429ba6110f1ca9Argyrios Kyrtzidisvoid getOverriddenCursors(CXCursor cursor, 198b11be041e4f05519a2eabf6a99429ba6110f1ca9Argyrios Kyrtzidis SmallVectorImpl<CXCursor> &overridden); 199b11be041e4f05519a2eabf6a99429ba6110f1ca9Argyrios Kyrtzidis 200aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis/// \brief Returns a index/location pair for a selector identifier if the cursor 201aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis/// points to one. 202aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidisstd::pair<int, SourceLocation> getSelectorIdentifierIndexAndLoc(CXCursor); 203aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidisstatic inline int getSelectorIdentifierIndex(CXCursor cursor) { 204aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis return getSelectorIdentifierIndexAndLoc(cursor).first; 205aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis} 206aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidisstatic inline SourceLocation getSelectorIdentifierLoc(CXCursor cursor) { 207aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis return getSelectorIdentifierIndexAndLoc(cursor).second; 208aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis} 209aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis 210aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios KyrtzidisCXCursor getSelectorIdentifierCursor(int SelIdx, CXCursor cursor); 211aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis 212aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidisstatic inline CXCursor getTypeRefedCallExprCursor(CXCursor cursor) { 213aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis CXCursor newCursor = cursor; 214aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis if (cursor.kind == CXCursor_CallExpr) 215aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis newCursor.xdata = 1; 216aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis return newCursor; 217aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis} 218aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis 219aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios KyrtzidisCXCursor getTypeRefCursor(CXCursor cursor); 220aed123ec3cc37e457fe20a6158fdadf8849ad916Argyrios Kyrtzidis 221283cae37b03047c14ef918503bc46b08405c3b69Douglas Gregorbool operator==(CXCursor X, CXCursor Y); 222283cae37b03047c14ef918503bc46b08405c3b69Douglas Gregor 223283cae37b03047c14ef918503bc46b08405c3b69Douglas Gregorinline bool operator!=(CXCursor X, CXCursor Y) { 224283cae37b03047c14ef918503bc46b08405c3b69Douglas Gregor return !(X == Y); 225283cae37b03047c14ef918503bc46b08405c3b69Douglas Gregor} 226283cae37b03047c14ef918503bc46b08405c3b69Douglas Gregor 227007a7c9d8dcdb2e9cd94b6075108bfc4c90e6ccdTed Kremenek/// \brief Return true if the cursor represents a declaration that is the 228007a7c9d8dcdb2e9cd94b6075108bfc4c90e6ccdTed Kremenek/// first in a declaration group. 229007a7c9d8dcdb2e9cd94b6075108bfc4c90e6ccdTed Kremenekbool isFirstInDeclGroup(CXCursor C); 230007a7c9d8dcdb2e9cd94b6075108bfc4c90e6ccdTed Kremenek 23116c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenek}} // end namespace: clang::cxcursor 23216c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenek 23316c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenek#endif 234