Ping.
I apologize for the poorly named subject of this submission, but rather
than resubmit, I figured it would be better to continue the thread.
This patch fixes clang_getCursorExtent() when called with a CXCursor of
kind CXCursor_TranslationUnit.
Currently, the following snippet (using libclang) will return an empty
range:
CXCursor Cursor = clang_getTranslationUnitCursor(TranslationUnit);
CXSourceRange Range = clang_getCursorExtent(Cursor);
This patch will cause the range to include the entire file from which the
translation unit was created. I have a attached the fresh patch.
Thanks,
Clint
On Sat, Mar 10, 2012 at 8:40 PM, Clint Caywood <[email protected]>wrote:
> Hi folks,
>
> I'm new to this, but I've made a patch to libclang that allows it to
> properly get the range for a translation unit cursor (which I needed for a
> project I'm working on). It's pretty straightforward.
>
> Thanks,
> Clint
>
> Index: tools/libclang/CIndex.cpp
> ===================================================================
> --- tools/libclang/CIndex.cpp (revision 152526)
> +++ tools/libclang/CIndex.cpp (working copy)
> @@ -3869,6 +3869,15 @@
> return TU->mapRangeFromPreamble(Range);
> }
>
> + if (C.kind == CXCursor_TranslationUnit) {
> + ASTUnit *TU = getCursorASTUnit(C);
> + FileID MainID = TU->getSourceManager().getMainFileID();
> + SourceLocation Start =
> TU->getSourceManager().getLocForStartOfFile(MainID);
> + SourceLocation End =
> TU->getSourceManager().getLocForEndOfFile(MainID);
> + SourceRange Range(Start, End);
> + return TU->mapRangeFromPreamble(Range);
> + }
> +
> if (C.kind >= CXCursor_FirstDecl && C.kind <= CXCursor_LastDecl) {
> Decl *D = cxcursor::getCursorDecl(C);
> if (!D)
>
Index: tools/libclang/CIndex.cpp
===================================================================
--- tools/libclang/CIndex.cpp (revision 153025)
+++ tools/libclang/CIndex.cpp (working copy)
@@ -3869,6 +3869,15 @@
return TU->mapRangeFromPreamble(Range);
}
+ if (C.kind == CXCursor_TranslationUnit) {
+ ASTUnit *TU = getCursorASTUnit(C);
+ FileID MainID = TU->getSourceManager().getMainFileID();
+ SourceLocation Start = TU->getSourceManager().getLocForStartOfFile(MainID);
+ SourceLocation End = TU->getSourceManager().getLocForEndOfFile(MainID);
+ SourceRange Range(Start, End);
+ return TU->mapRangeFromPreamble(Range);
+ }
+
if (C.kind >= CXCursor_FirstDecl && C.kind <= CXCursor_LastDecl) {
Decl *D = cxcursor::getCursorDecl(C);
if (!D)
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits