r180860 - [ObjC declaration documentation] declaration of

Jordan Rose jordan_rose at apple.com
Wed May 1 10:55:28 PDT 2013


I'm not sure it's right to remove 'const'—consider global string constant declarations:

extern NSString * const MyNotificationName;

I think you'll have to explicitly remove ObjC lifetime attrs only.

Jordan


On May 1, 2013, at 10:28 , Fariborz Jahanian <fjahanian at apple.com> wrote:

> Author: fjahanian
> Date: Wed May  1 12:28:37 2013
> New Revision: 180860
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=180860&view=rev
> Log:
> [ObjC declaration documentation] declaration of 
> types involving Objective-C pointers must have
> their arc qualifiers elided as they don't 
> add any additional info. // rdar://13757500.
> 
> Added:
>    cfe/trunk/test/Index/comment-unqualified-objc-pointer.m
> Modified:
>    cfe/trunk/include/clang/AST/Type.h
>    cfe/trunk/lib/AST/DeclPrinter.cpp
> 
> Modified: cfe/trunk/include/clang/AST/Type.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/Type.h?rev=180860&r1=180859&r2=180860&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang/AST/Type.h (original)
> +++ cfe/trunk/include/clang/AST/Type.h Wed May  1 12:28:37 2013
> @@ -853,6 +853,10 @@ public:
>     return *this;
>   }
> 
> +  /// getUnqualifiedObjCPointerType - Returns the unqualified version if
> +  /// Objective-C pointer type; otherwise, returns type as is.
> +  inline QualType getUnqualifiedObjCPointerType() const;
> +  
>   /// operator==/!= - Indicate whether the specified types and qualifiers are
>   /// identical.
>   friend bool operator==(const QualType &LHS, const QualType &RHS) {
> @@ -4648,6 +4652,11 @@ inline QualType QualType::getUnqualified
>   return QualType(getSplitUnqualifiedTypeImpl(*this).Ty, 0);
> }
> 
> +inline QualType QualType::getUnqualifiedObjCPointerType() const {
> +  return getTypePtr()->isObjCObjectPointerType() ?
> +                            getUnqualifiedType() : *this;
> +}
> +  
> inline SplitQualType QualType::getSplitUnqualifiedType() const {
>   if (!getTypePtr()->getCanonicalTypeInternal().hasLocalQualifiers())
>     return split();
> @@ -4679,7 +4688,7 @@ inline void QualType::removeLocalCVRQual
> inline unsigned QualType::getAddressSpace() const {
>   return getQualifiers().getAddressSpace();
> }
> -
> +  
> /// getObjCGCAttr - Return the gc attribute of this type.
> inline Qualifiers::GC QualType::getObjCGCAttr() const {
>   return getQualifiers().getObjCGCAttr();
> 
> Modified: cfe/trunk/lib/AST/DeclPrinter.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/DeclPrinter.cpp?rev=180860&r1=180859&r2=180860&view=diff
> ==============================================================================
> --- cfe/trunk/lib/AST/DeclPrinter.cpp (original)
> +++ cfe/trunk/lib/AST/DeclPrinter.cpp Wed May  1 12:28:37 2013
> @@ -617,7 +617,8 @@ void DeclPrinter::VisitFieldDecl(FieldDe
>   if (!Policy.SuppressSpecifiers && D->isModulePrivate())
>     Out << "__module_private__ ";
> 
> -  Out << D->getType().stream(Policy, D->getName());
> +  Out << D->getType().getUnqualifiedObjCPointerType().
> +            stream(Policy, D->getName());
> 
>   if (D->isBitField()) {
>     Out << " : ";
> @@ -661,7 +662,7 @@ void DeclPrinter::VisitVarDecl(VarDecl *
>       Out << "__module_private__ ";
>   }
> 
> -  QualType T = D->getType();
> +  QualType T = D->getType().getUnqualifiedObjCPointerType();
>   if (ParmVarDecl *Parm = dyn_cast<ParmVarDecl>(D))
>     T = Parm->getOriginalType();
>   T.print(Out, Policy, D->getName());
> @@ -910,7 +911,8 @@ void DeclPrinter::VisitObjCMethodDecl(Ob
>   else
>     Out << "+ ";
>   if (!OMD->getResultType().isNull())
> -    Out << '(' << OMD->getResultType().getAsString(Policy) << ")";
> +    Out << '(' << OMD->getResultType().getUnqualifiedObjCPointerType().
> +                    getAsString(Policy) << ")";
> 
>   std::string name = OMD->getSelector().getAsString();
>   std::string::size_type pos, lastPos = 0;
> @@ -919,7 +921,8 @@ void DeclPrinter::VisitObjCMethodDecl(Ob
>     // FIXME: selector is missing here!
>     pos = name.find_first_of(':', lastPos);
>     Out << " " << name.substr(lastPos, pos - lastPos);
> -    Out << ":(" << (*PI)->getType().getAsString(Policy) << ')' << **PI;
> +    Out << ":(" << (*PI)->getType().getUnqualifiedObjCPointerType().
> +                      getAsString(Policy) << ')' << **PI;
>     lastPos = pos + 1;
>   }
> 
> @@ -952,7 +955,8 @@ void DeclPrinter::VisitObjCImplementatio
>     Indentation += Policy.Indentation;
>     for (ObjCImplementationDecl::ivar_iterator I = OID->ivar_begin(),
>          E = OID->ivar_end(); I != E; ++I) {
> -      Indent() << I->getType().getAsString(Policy) << ' ' << **I << ";\n";
> +      Indent() << I->getType().getUnqualifiedObjCPointerType().
> +                    getAsString(Policy) << ' ' << **I << ";\n";
>     }
>     Indentation -= Policy.Indentation;
>     Out << "}\n";
> @@ -990,7 +994,8 @@ void DeclPrinter::VisitObjCInterfaceDecl
>     Indentation += Policy.Indentation;
>     for (ObjCInterfaceDecl::ivar_iterator I = OID->ivar_begin(),
>          E = OID->ivar_end(); I != E; ++I) {
> -      Indent() << I->getType().getAsString(Policy) << ' ' << **I << ";\n";
> +      Indent() << I->getType().getUnqualifiedObjCPointerType().
> +                    getAsString(Policy) << ' ' << **I << ";\n";
>     }
>     Indentation -= Policy.Indentation;
>     Out << "}\n";
> @@ -1041,7 +1046,8 @@ void DeclPrinter::VisitObjCCategoryDecl(
>     Indentation += Policy.Indentation;
>     for (ObjCCategoryDecl::ivar_iterator I = PID->ivar_begin(),
>          E = PID->ivar_end(); I != E; ++I) {
> -      Indent() << I->getType().getAsString(Policy) << ' ' << **I << ";\n";
> +      Indent() << I->getType().getUnqualifiedObjCPointerType().
> +                    getAsString(Policy) << ' ' << **I << ";\n";
>     }
>     Indentation -= Policy.Indentation;
>     Out << "}\n";
> @@ -1127,7 +1133,8 @@ void DeclPrinter::VisitObjCPropertyDecl(
>     (void) first; // Silence dead store warning due to idiomatic code.
>     Out << " )";
>   }
> -  Out << ' ' << PDecl->getType().getAsString(Policy) << ' ' << *PDecl;
> +  Out << ' ' << PDecl->getType().getUnqualifiedObjCPointerType().
> +                  getAsString(Policy) << ' ' << *PDecl;
>   if (Policy.PolishForDeclaration)
>     Out << ';';
> }
> 
> Added: cfe/trunk/test/Index/comment-unqualified-objc-pointer.m
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Index/comment-unqualified-objc-pointer.m?rev=180860&view=auto
> ==============================================================================
> --- cfe/trunk/test/Index/comment-unqualified-objc-pointer.m (added)
> +++ cfe/trunk/test/Index/comment-unqualified-objc-pointer.m Wed May  1 12:28:37 2013
> @@ -0,0 +1,36 @@
> +// RUN: rm -rf %t
> +// RUN: mkdir %t
> +// RUN: c-index-test -test-load-source all -comments-xml-schema=%S/../../bindings/xml/comment-xml-schema.rng -fobjc-arc %s > %t/out
> +// RUN: FileCheck %s < %t/out
> +// rdar://13757500
> +
> + at class NSString;
> +
> + at interface NSArray @end
> +
> + at interface NSMutableArray : NSArray 
> +{
> +//! This is the name.
> +  NSString *Name;
> +}
> +//! This is WithLabel comment.
> +- (NSString *)WithLabel:(NSString *)label;
> +// CHECK: <Declaration>- (NSString *)WithLabel:(NSString *)label;</Declaration> 
> +
> +//! This is a property to get the Name.
> + at property (copy) NSString *Name;
> +// CHECK: <Declaration>@property(readwrite, copy, atomic) NSString *Name;</Declaration>
> + at end
> +
> + at implementation NSMutableArray
> +{
> +//! This is private ivar
> +  NSString *NickName;
> +// CHECK: <Declaration>NSString *NickName</Declaration>
> +}
> +
> +- (NSString *)WithLabel:(NSString *)label {
> +    return 0;
> +}
> + at synthesize Name = Name;
> + at end
> 
> 
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20130501/6fa919c3/attachment.html>


More information about the cfe-commits mailing list