diff options
| author | Ted Kremenek <kremenek@apple.com> | 2009-10-22 17:22:53 +0000 |
|---|---|---|
| committer | Ted Kremenek <kremenek@apple.com> | 2009-10-22 17:22:53 +0000 |
| commit | a96b72a4ca723812473418563062aa5596ac72b2 (patch) | |
| tree | 7f3faa7132340d550c4fa82411b18d0dd95a004c /clang | |
| parent | 8de31d0e80d707f75bd3b2693cd2e9bf14dbf91f (diff) | |
| download | bcm5719-llvm-a96b72a4ca723812473418563062aa5596ac72b2.tar.gz bcm5719-llvm-a96b72a4ca723812473418563062aa5596ac72b2.zip | |
Split clang_getCursor() into clang_getCursor() and clang_getCursorWithHint().
llvm-svn: 84873
Diffstat (limited to 'clang')
| -rw-r--r-- | clang/include/clang-c/Index.h | 21 | ||||
| -rw-r--r-- | clang/tools/CIndex/CIndex.cpp | 17 | ||||
| -rw-r--r-- | clang/tools/CIndex/CIndex.exports | 2 | ||||
| -rw-r--r-- | clang/tools/c-index-test/c-index-test.c | 8 |
4 files changed, 39 insertions, 9 deletions
diff --git a/clang/include/clang-c/Index.h b/clang/include/clang-c/Index.h index 644b2e29412..44cbe0efff8 100644 --- a/clang/include/clang-c/Index.h +++ b/clang/include/clang-c/Index.h @@ -251,13 +251,24 @@ const char *clang_getDeclSource(CXDecl); /** Usage: clang_getCursor() will translate a source/line/column position into an AST cursor (to derive semantic information from the source code). - If 'RelativeToDecl' is NULL, the entire translation unit will be searched. - Note that searching the entire translation unit can be slow. - Otherwise, the "search" for the AST cursor will start at 'RelativeToDecl'. */ CXCursor clang_getCursor(CXTranslationUnit, const char *source_name, - unsigned line, unsigned column, - CXDecl RelativeToDecl); + unsigned line, unsigned column); + +/** + Usage: clang_getCursorWithHint() provides the same functionality as + clang_getCursor() except that it takes an option 'hint' argument. + The 'hint' is a temporary CXLookupHint object (whose lifetime is managed by + the caller) that should be initialized with clang_initCXLookupHint(). + + FIXME: Add a better comment once getCursorWithHint() has more functionality. + */ +typedef CXCursor CXLookupHint; +CXCursor clang_getCursorWithHint(CXTranslationUnit, const char *source_name, + unsigned line, unsigned column, + CXLookupHint *hint); + +void clang_initCXLookupHint(CXLookupHint *hint); enum CXCursorKind clang_getCursorKind(CXCursor); unsigned clang_isDeclaration(enum CXCursorKind); diff --git a/clang/tools/CIndex/CIndex.cpp b/clang/tools/CIndex/CIndex.cpp index e6e63b8ef18..cbc3085a27e 100644 --- a/clang/tools/CIndex/CIndex.cpp +++ b/clang/tools/CIndex/CIndex.cpp @@ -695,13 +695,26 @@ static enum CXCursorKind TranslateKind(Decl *D) { // // CXCursor Operations. // +void clang_initCXLookupHint(CXLookupHint *hint) { + memset(hint, 0, sizeof(*hint)); +} + CXCursor clang_getCursor(CXTranslationUnit CTUnit, const char *source_name, - unsigned line, unsigned column, - CXDecl RelativeToDecl) + unsigned line, unsigned column) { + return clang_getCursorWithHint(CTUnit, source_name, line, column, NULL); +} + +CXCursor clang_getCursorWithHint(CXTranslationUnit CTUnit, + const char *source_name, + unsigned line, unsigned column, + CXLookupHint *hint) { assert(CTUnit && "Passed null CXTranslationUnit"); ASTUnit *CXXUnit = static_cast<ASTUnit *>(CTUnit); + // FIXME: Make this better. + CXDecl RelativeToDecl = hint ? hint->decl : NULL; + FileManager &FMgr = CXXUnit->getFileManager(); const FileEntry *File = FMgr.getFile(source_name, source_name+strlen(source_name)); diff --git a/clang/tools/CIndex/CIndex.exports b/clang/tools/CIndex/CIndex.exports index ea647b46a62..e9d44a0dc91 100644 --- a/clang/tools/CIndex/CIndex.exports +++ b/clang/tools/CIndex/CIndex.exports @@ -7,6 +7,7 @@ _clang_getCursorFromDecl _clang_getCursorKind _clang_getCursorLine _clang_getCursorSource +_clang_getCursorWithHint _clang_getDeclarationName _clang_getDeclSpelling _clang_getDeclLine @@ -20,6 +21,7 @@ _clang_loadTranslationUnit _clang_createTranslationUnit _clang_createTranslationUnitFromSourceFile _clang_disposeTranslationUnit +_clang_initCXLookupHint _clang_isDeclaration _clang_isReference _clang_isDefinition diff --git a/clang/tools/c-index-test/c-index-test.c b/clang/tools/c-index-test/c-index-test.c index b458216f70d..5cbc2fae53f 100644 --- a/clang/tools/c-index-test/c-index-test.c +++ b/clang/tools/c-index-test/c-index-test.c @@ -60,9 +60,13 @@ static void TranslationUnitVisitor(CXTranslationUnit Unit, CXCursor Cursor, curColumn = 1; } else if (*startBuf != '\t') curColumn++; + + CXLookupHint hint; + clang_initCXLookupHint(&hint); + hint.decl = Cursor.decl; - Ref = clang_getCursor(Unit, clang_getCursorSource(Cursor), - curLine, curColumn, Cursor.decl); + Ref = clang_getCursorWithHint(Unit, clang_getCursorSource(Cursor), + curLine, curColumn, &hint); if (Ref.kind == CXCursor_NoDeclFound) { /* Nothing found here; that's fine. */ } else if (Ref.kind != CXCursor_FunctionDecl) { |

