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