diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2013-04-18 22:15:49 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2013-04-18 22:15:49 +0000 |
commit | 9adfd8aabbdbe7ce06663c98d3c5e8eda29e6ed1 (patch) | |
tree | bee78fe3be48ff7052fd0f6e308715328b20e160 /clang/tools/libclang/CIndex.cpp | |
parent | 82656cb200b1cf91a95b16a14676ce81bddc890b (diff) | |
download | bcm5719-llvm-9adfd8aabbdbe7ce06663c98d3c5e8eda29e6ed1.tar.gz bcm5719-llvm-9adfd8aabbdbe7ce06663c98d3c5e8eda29e6ed1.zip |
[libclang] Introduce clang_Cursor_getObjCPropertyAttributes to query the written attributes in a property declaration.
rdar://13684512
llvm-svn: 179803
Diffstat (limited to 'clang/tools/libclang/CIndex.cpp')
-rw-r--r-- | clang/tools/libclang/CIndex.cpp | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/clang/tools/libclang/CIndex.cpp b/clang/tools/libclang/CIndex.cpp index 95b49fcd254..fd13401173f 100644 --- a/clang/tools/libclang/CIndex.cpp +++ b/clang/tools/libclang/CIndex.cpp @@ -5919,6 +5919,35 @@ CXFile clang_getIncludedFile(CXCursor cursor) { return const_cast<FileEntry *>(ID->getFile()); } +unsigned clang_Cursor_getObjCPropertyAttributes(CXCursor C, unsigned reserved) { + if (C.kind != CXCursor_ObjCPropertyDecl) + return CXObjCPropertyAttr_noattr; + + unsigned Result = CXObjCPropertyAttr_noattr; + const ObjCPropertyDecl *PD = dyn_cast<ObjCPropertyDecl>(getCursorDecl(C)); + ObjCPropertyDecl::PropertyAttributeKind Attr = + PD->getPropertyAttributesAsWritten(); + +#define SET_CXOBJCPROP_ATTR(A) \ + if (Attr & ObjCPropertyDecl::OBJC_PR_##A) \ + Result |= CXObjCPropertyAttr_##A + SET_CXOBJCPROP_ATTR(readonly); + SET_CXOBJCPROP_ATTR(getter); + SET_CXOBJCPROP_ATTR(assign); + SET_CXOBJCPROP_ATTR(readwrite); + SET_CXOBJCPROP_ATTR(retain); + SET_CXOBJCPROP_ATTR(copy); + SET_CXOBJCPROP_ATTR(nonatomic); + SET_CXOBJCPROP_ATTR(setter); + SET_CXOBJCPROP_ATTR(atomic); + SET_CXOBJCPROP_ATTR(weak); + SET_CXOBJCPROP_ATTR(strong); + SET_CXOBJCPROP_ATTR(unsafe_unretained); +#undef SET_CXOBJCPROP_ATTR + + return Result; +} + CXSourceRange clang_Cursor_getCommentRange(CXCursor C) { if (!clang_isDeclaration(C.kind)) return clang_getNullRange(); |