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