From d2fc7277be6aff4056db2b3e1ce9da73037ffc1d Mon Sep 17 00:00:00 2001 From: Douglas Gregor Date: Wed, 20 Jan 2010 00:23:15 +0000 Subject: Introduce a special cursor kind for the translation unit, to serve as the root of the conceptual cursor hierarchy (just like we do with declarations). This will be used when we get to unify clang_loadTranslationUnit() and clang_loadDeclaration() into something more generally useful. llvm-svn: 93954 --- clang/tools/CIndex/CIndex.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'clang/tools/CIndex/CIndex.cpp') diff --git a/clang/tools/CIndex/CIndex.cpp b/clang/tools/CIndex/CIndex.cpp index 032dd126f69..8dfaa4cbe12 100644 --- a/clang/tools/CIndex/CIndex.cpp +++ b/clang/tools/CIndex/CIndex.cpp @@ -565,6 +565,11 @@ CXString clang_getTranslationUnitSpelling(CXTranslationUnit CTUnit) { true); } +CXCursor clang_getTranslationUnitCursor(CXTranslationUnit TU) { + CXCursor Result = { CXCursor_TranslationUnit, { TU, 0, 0 } }; + return Result; +} + void clang_loadTranslationUnit(CXTranslationUnit CTUnit, CXTranslationUnitIterator callback, CXClientData CData) { @@ -803,6 +808,9 @@ static Decl *getDeclFromExpr(Stmt *E) { extern "C" { CXString clang_getCursorSpelling(CXCursor C) { assert(getCursorDecl(C) && "CXCursor has null decl"); + if (clang_isTranslationUnit(C.kind)) + return clang_getTranslationUnitSpelling(C.data[0]); + if (clang_isReference(C.kind)) { switch (C.kind) { case CXCursor_ObjCSuperClassRef: { @@ -867,6 +875,7 @@ const char *clang_getCursorKindSpelling(enum CXCursorKind Kind) { case CXCursor_InvalidFile: return "InvalidFile"; case CXCursor_NoDeclFound: return "NoDeclFound"; case CXCursor_NotImplemented: return "NotImplemented"; + case CXCursor_TranslationUnit: return "TranslationUnit"; } llvm_unreachable("Unhandled CXCursorKind"); @@ -947,6 +956,10 @@ unsigned clang_isStatement(enum CXCursorKind K) { return K >= CXCursor_FirstStmt && K <= CXCursor_LastStmt; } +unsigned clang_isTranslationUnit(enum CXCursorKind K) { + return K == CXCursor_TranslationUnit; +} + CXCursorKind clang_getCursorKind(CXCursor C) { return C.kind; } -- cgit v1.2.3