aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2010-05-18 22:32:15 +0000
committerTed Kremenek <kremenek@apple.com>2010-05-18 22:32:15 +0000
commitb12903e1a4b8d1b611b8c7e4f910665d628e68cd (patch)
tree1e9da56afa0fbb8ba13a8507beee7159a0769e74
parent23173d7f029f430611caceea72ae61ba6b80af1c (diff)
Add function 'clang_isTagDeclDefinition()' to allow clients of libclang to distinguish between
forward declarations and definitions of structs/classes/enums. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@104075 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/clang-c/Index.h6
-rw-r--r--tools/libclang/CIndex.cpp9
-rw-r--r--tools/libclang/libclang.darwin.exports1
-rw-r--r--tools/libclang/libclang.exports2
4 files changed, 18 insertions, 0 deletions
diff --git a/include/clang-c/Index.h b/include/clang-c/Index.h
index 3c69d0f292..fa35d058e5 100644
--- a/include/clang-c/Index.h
+++ b/include/clang-c/Index.h
@@ -1355,6 +1355,12 @@ CINDEX_LINKAGE unsigned clang_isCursorDefinition(CXCursor);
CINDEX_LINKAGE unsigned clang_CXXMethod_isStatic(CXCursor C);
/**
+ * \brief Determine if a given struct/class/enum declaration is a definition
+ * or just a forward declaration.
+ */
+CINDEX_LINKAGE unsigned clang_isTagDeclDefinition(CXCursor C);
+
+/**
* @}
*/
diff --git a/tools/libclang/CIndex.cpp b/tools/libclang/CIndex.cpp
index 6ea1619c3d..85383d0be0 100644
--- a/tools/libclang/CIndex.cpp
+++ b/tools/libclang/CIndex.cpp
@@ -2809,6 +2809,15 @@ unsigned clang_CXXMethod_isStatic(CXCursor C) {
CXXMethodDecl *D = dyn_cast<CXXMethodDecl>(cxcursor::getCursorDecl(C));
return (D && D->isStatic()) ? 1 : 0;
}
+
+unsigned clang_isTagDeclDefinition(CXCursor C) {
+ if (!clang_isDeclaration(C.kind))
+ return 0;
+
+ const TagDecl *D = dyn_cast<TagDecl>(cxcursor::getCursorDecl(C));
+ return D && D->isDefinition() ? 1 : 0;
+}
+
} // end: extern "C"
//===----------------------------------------------------------------------===//
diff --git a/tools/libclang/libclang.darwin.exports b/tools/libclang/libclang.darwin.exports
index 4b61bd34cb..1071a23d03 100644
--- a/tools/libclang/libclang.darwin.exports
+++ b/tools/libclang/libclang.darwin.exports
@@ -81,6 +81,7 @@ _clang_isInvalid
_clang_isPreprocessing
_clang_isReference
_clang_isStatement
+_clang_isTagDeclDefinition
_clang_isTranslationUnit
_clang_isUnexposed
_clang_setUseExternalASTGeneration
diff --git a/tools/libclang/libclang.exports b/tools/libclang/libclang.exports
index ad984f0e9d..b986aeb54c 100644
--- a/tools/libclang/libclang.exports
+++ b/tools/libclang/libclang.exports
@@ -81,8 +81,10 @@ clang_isInvalid
clang_isPreprocessing
clang_isReference
clang_isStatement
+clang_isTagDeclDefinition
clang_isTranslationUnit
clang_isUnexposed
clang_setUseExternalASTGeneration
clang_tokenize
clang_visitChildren
+