forked from OSchip/llvm-project
[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. llvm-svn: 180860
This commit is contained in:
parent
a69c905756
commit
9e0758442e
|
@ -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::getUnqualifiedType() const {
|
|||
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::removeLocalCVRQualifiers(unsigned Mask) {
|
|||
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();
|
||||
|
|
|
@ -617,7 +617,8 @@ void DeclPrinter::VisitFieldDecl(FieldDecl *D) {
|
|||
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 *D) {
|
|||
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(ObjCMethodDecl *OMD) {
|
|||
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(ObjCMethodDecl *OMD) {
|
|||
// 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::VisitObjCImplementationDecl(ObjCImplementationDecl *OID) {
|
|||
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(ObjCInterfaceDecl *OID) {
|
|||
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(ObjCCategoryDecl *PID) {
|
|||
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(ObjCPropertyDecl *PDecl) {
|
|||
(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 << ';';
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
||||
@class NSString;
|
||||
|
||||
@interface NSArray @end
|
||||
|
||||
@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.
|
||||
@property (copy) NSString *Name;
|
||||
// CHECK: <Declaration>@property(readwrite, copy, atomic) NSString *Name;</Declaration>
|
||||
@end
|
||||
|
||||
@implementation NSMutableArray
|
||||
{
|
||||
//! This is private ivar
|
||||
NSString *NickName;
|
||||
// CHECK: <Declaration>NSString *NickName</Declaration>
|
||||
}
|
||||
|
||||
- (NSString *)WithLabel:(NSString *)label {
|
||||
return 0;
|
||||
}
|
||||
@synthesize Name = Name;
|
||||
@end
|
Loading…
Reference in New Issue