CXCursor.h revision 2e331b938b38057e333fab0ba841130ea8467794
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 1516c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenek#define LLVM_CLANG_CXCursor_H 1616c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenek 1716c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenek#include "clang-c/Index.h" 182e331b938b38057e333fab0ba841130ea8467794Douglas Gregor#include "clang/Basic/SourceLocation.h" 192e331b938b38057e333fab0ba841130ea8467794Douglas Gregor#include <utility> 2016c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenek 2116c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremeneknamespace clang { 2216c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenek 2316c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenekclass Decl; 24283cae37b03047c14ef918503bc46b08405c3b69Douglas Gregorclass Expr; 25283cae37b03047c14ef918503bc46b08405c3b69Douglas Gregorclass NamedDecl; 262e331b938b38057e333fab0ba841130ea8467794Douglas Gregorclass ObjCInterfaceDecl; 2716c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenekclass Stmt; 2816c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenek 2916c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremeneknamespace cxcursor { 3016c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenek 3116c440a377b7ec8b722a2e2c7c864f75c95bd305Ted KremenekCXCursor MakeCXCursor(CXCursorKind K, clang::Decl *D); 3216c440a377b7ec8b722a2e2c7c864f75c95bd305Ted KremenekCXCursor MakeCXCursor(CXCursorKind K, clang::Decl *D, clang::Stmt *S); 33edc8aa68ef91aeea686c5aadf64ef902c38318ddTed KremenekCXCursor MakeCXCursor(clang::Decl *D); 3416c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenek 352e331b938b38057e333fab0ba841130ea8467794Douglas Gregor/// \brief Create an Objective-C superclass reference at the given location. 362e331b938b38057e333fab0ba841130ea8467794Douglas GregorCXCursor MakeCursorObjCSuperClassRef(ObjCInterfaceDecl *Super, 372e331b938b38057e333fab0ba841130ea8467794Douglas Gregor SourceLocation Loc); 382e331b938b38057e333fab0ba841130ea8467794Douglas Gregor 392e331b938b38057e333fab0ba841130ea8467794Douglas Gregor/// \brief Unpack an ObjCSuperClassRef cursor into the interface it references 402e331b938b38057e333fab0ba841130ea8467794Douglas Gregor/// and optionally the location where the reference occurred. 412e331b938b38057e333fab0ba841130ea8467794Douglas Gregorstd::pair<ObjCInterfaceDecl *, SourceLocation> 422e331b938b38057e333fab0ba841130ea8467794Douglas GregorgetCursorObjCSuperClassRef(CXCursor C); 432e331b938b38057e333fab0ba841130ea8467794Douglas Gregor 44283cae37b03047c14ef918503bc46b08405c3b69Douglas GregorDecl *getCursorDecl(CXCursor Cursor); 45283cae37b03047c14ef918503bc46b08405c3b69Douglas GregorExpr *getCursorExpr(CXCursor Cursor); 46283cae37b03047c14ef918503bc46b08405c3b69Douglas GregorStmt *getCursorStmt(CXCursor Cursor); 47283cae37b03047c14ef918503bc46b08405c3b69Douglas GregorDecl *getCursorReferringDecl(CXCursor Cursor); 48283cae37b03047c14ef918503bc46b08405c3b69Douglas GregorNamedDecl *getCursorInterfaceParent(CXCursor Cursor); 49283cae37b03047c14ef918503bc46b08405c3b69Douglas Gregor 50283cae37b03047c14ef918503bc46b08405c3b69Douglas Gregorbool operator==(CXCursor X, CXCursor Y); 51283cae37b03047c14ef918503bc46b08405c3b69Douglas Gregor 52283cae37b03047c14ef918503bc46b08405c3b69Douglas Gregorinline bool operator!=(CXCursor X, CXCursor Y) { 53283cae37b03047c14ef918503bc46b08405c3b69Douglas Gregor return !(X == Y); 54283cae37b03047c14ef918503bc46b08405c3b69Douglas Gregor} 55283cae37b03047c14ef918503bc46b08405c3b69Douglas Gregor 5616c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenek}} // end namespace: clang::cxcursor 5716c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenek 5816c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenek#endif 59