diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2007-12-13 20:47:42 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2007-12-13 20:47:42 +0000 |
commit | 06cef25d0b8c383217413f061441c7ea40d1052b (patch) | |
tree | da1a5f1d7096233fd2d26699e29a7ecf94201536 | |
parent | 4d83220c8f32dda189b66096ca6ddca149fda690 (diff) |
Patch to make ObjcQualifiedInterfaceType inherit ObjcInterfaceType
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@45014 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | AST/ASTContext.cpp | 13 | ||||
-rw-r--r-- | AST/Type.cpp | 6 | ||||
-rw-r--r-- | Sema/SemaExpr.cpp | 7 | ||||
-rw-r--r-- | include/clang/AST/Type.h | 20 |
4 files changed, 17 insertions, 29 deletions
diff --git a/AST/ASTContext.cpp b/AST/ASTContext.cpp index 322f34ccf2..4351b89e96 100644 --- a/AST/ASTContext.cpp +++ b/AST/ASTContext.cpp @@ -687,7 +687,7 @@ QualType ASTContext::getTypedefType(TypedefDecl *Decl) { QualType ASTContext::getObjcInterfaceType(ObjcInterfaceDecl *Decl) { if (Decl->TypeForDecl) return QualType(Decl->TypeForDecl, 0); - Decl->TypeForDecl = new ObjcInterfaceType(Decl); + Decl->TypeForDecl = new ObjcInterfaceType(Type::ObjcInterface, Decl); Types.push_back(Decl->TypeForDecl); return QualType(Decl->TypeForDecl, 0); } @@ -697,11 +697,8 @@ QualType ASTContext::getObjcInterfaceType(ObjcInterfaceDecl *Decl) { /// the conforming protocol list. QualType ASTContext::getObjcQualifiedInterfaceType(ObjcInterfaceDecl *Decl, ObjcProtocolDecl **Protocols, unsigned NumProtocols) { - ObjcInterfaceType *IType = - cast<ObjcInterfaceType>(getObjcInterfaceType(Decl)); - llvm::FoldingSetNodeID ID; - ObjcQualifiedInterfaceType::Profile(ID, IType, Protocols, NumProtocols); + ObjcQualifiedInterfaceType::Profile(ID, Protocols, NumProtocols); void *InsertPos = 0; if (ObjcQualifiedInterfaceType *QT = @@ -710,7 +707,7 @@ QualType ASTContext::getObjcQualifiedInterfaceType(ObjcInterfaceDecl *Decl, // No Match; ObjcQualifiedInterfaceType *QType = - new ObjcQualifiedInterfaceType(IType, Protocols, NumProtocols); + new ObjcQualifiedInterfaceType(Decl, Protocols, NumProtocols); Types.push_back(QType); ObjcQualifiedInterfaceTypes.InsertNode(QType, InsertPos); return QualType(QType, 0); @@ -1204,8 +1201,8 @@ bool ASTContext::QualifiedInterfaceTypesAreCompatible(QualType lhs, ObjcQualifiedInterfaceType *rhsQI = dyn_cast<ObjcQualifiedInterfaceType>(rhs.getCanonicalType().getTypePtr()); assert(rhsQI && "QualifiedInterfaceTypesAreCompatible - bad rhs type"); - if (!interfaceTypesAreCompatible(QualType(lhsQI->getInterfaceType(), 0), - QualType(rhsQI->getInterfaceType(), 0))) + if (!interfaceTypesAreCompatible(getObjcInterfaceType(lhsQI->getDecl()), + getObjcInterfaceType(rhsQI->getDecl()))) return false; /* All protocols in lhs must have a presense in rhs. */ for (unsigned i =0; i < lhsQI->getNumProtocols(); i++) { diff --git a/AST/Type.cpp b/AST/Type.cpp index 4befdcb542..b1da04b0a3 100644 --- a/AST/Type.cpp +++ b/AST/Type.cpp @@ -529,16 +529,14 @@ void FunctionTypeProto::Profile(llvm::FoldingSetNodeID &ID) { } void ObjcQualifiedInterfaceType::Profile(llvm::FoldingSetNodeID &ID, - ObjcInterfaceType *interfaceType, ObjcProtocolDecl **protocols, unsigned NumProtocols) { - ID.AddPointer(interfaceType); for (unsigned i = 0; i != NumProtocols; i++) ID.AddPointer(protocols[i]); } void ObjcQualifiedInterfaceType::Profile(llvm::FoldingSetNodeID &ID) { - Profile(ID, getInterfaceType(), &Protocols[0], getNumProtocols()); + Profile(ID, &Protocols[0], getNumProtocols()); } /// LookThroughTypedefs - Return the ultimate type this typedef corresponds to @@ -770,7 +768,7 @@ void ObjcQualifiedInterfaceType::getAsStringInternal( std::string &InnerString) const { if (!InnerString.empty()) // Prefix the basic type, e.g. 'typedefname X'. InnerString = ' ' + InnerString; - std::string ObjcQIString = getInterfaceType()->getDecl()->getName(); + std::string ObjcQIString = getDecl()->getName(); ObjcQIString += '<'; int num = getNumProtocols(); for (int i = 0; i < num; i++) { diff --git a/Sema/SemaExpr.cpp b/Sema/SemaExpr.cpp index b48703d8a1..1d8b883435 100644 --- a/Sema/SemaExpr.cpp +++ b/Sema/SemaExpr.cpp @@ -540,8 +540,7 @@ ActOnMemberReferenceExpr(ExprTy *Base, SourceLocation OpLoc, if (isa<ObjcInterfaceType>(BaseType.getCanonicalType())) IFace = dyn_cast<ObjcInterfaceType>(BaseType)->getDecl(); else - IFace = dyn_cast<ObjcQualifiedInterfaceType>(BaseType) - ->getInterfaceType()->getDecl(); + IFace = dyn_cast<ObjcQualifiedInterfaceType>(BaseType)->getDecl(); ObjcInterfaceDecl *clsDeclared; if (ObjcIvarDecl *IV = IFace->lookupInstanceVariable(&Member, clsDeclared)) return new ObjCIvarRefExpr(IV, IV->getType(), MemberLoc, BaseExpr, @@ -2300,9 +2299,7 @@ Sema::ExprResult Sema::ActOnInstanceMessage( ObjcInterfaceDecl* ClassDecl; if (ObjcQualifiedInterfaceType *QIT = dyn_cast<ObjcQualifiedInterfaceType>(receiverType)) { - ObjcInterfaceType * OITypePtr = QIT->getInterfaceType(); - - ClassDecl = OITypePtr->getDecl(); + ClassDecl = QIT->getDecl(); Method = ClassDecl->lookupInstanceMethod(Sel); if (!Method) { // search protocols diff --git a/include/clang/AST/Type.h b/include/clang/AST/Type.h index d6dc5f7d6b..da44891780 100644 --- a/include/clang/AST/Type.h +++ b/include/clang/AST/Type.h @@ -899,9 +899,9 @@ protected: class ObjcInterfaceType : public Type { ObjcInterfaceDecl *Decl; - - ObjcInterfaceType(ObjcInterfaceDecl *D) : - Type(ObjcInterface, QualType()), Decl(D) { } +protected: + ObjcInterfaceType(TypeClass tc, ObjcInterfaceDecl *D) : + Type(tc, QualType()), Decl(D) { } friend class ASTContext; // ASTContext creates these. public: @@ -919,23 +919,20 @@ public: /// conforming to a list of protocols; such as, INTF<Proto1, Proto2, Proto1>. /// Duplicate protocols are removed and protocol list is canonicalized to be in /// alphabetical order. -class ObjcQualifiedInterfaceType : public Type, public llvm::FoldingSetNode { - // Interface type for this protocol conforming object type - ObjcInterfaceType *InterfaceType; - +class ObjcQualifiedInterfaceType : public ObjcInterfaceType, + public llvm::FoldingSetNode { + // List of protocols for this protocol conforming object type // List is sorted on protocol name. No protocol is enterred more than once. llvm::SmallVector<ObjcProtocolDecl*, 8> Protocols; - ObjcQualifiedInterfaceType(ObjcInterfaceType *T, + ObjcQualifiedInterfaceType(ObjcInterfaceDecl *D, ObjcProtocolDecl **Protos, unsigned NumP) : - Type(ObjcQualifiedInterface, QualType()), InterfaceType(T), + ObjcInterfaceType(ObjcQualifiedInterface, D), Protocols(Protos, Protos+NumP) { } friend class ASTContext; // ASTContext creates these. public: - ObjcInterfaceType *getInterfaceType() const { return InterfaceType; } - ObjcProtocolDecl *getProtocols(unsigned i) const { return Protocols[i]; } @@ -947,7 +944,6 @@ public: void Profile(llvm::FoldingSetNodeID &ID); static void Profile(llvm::FoldingSetNodeID &ID, - ObjcInterfaceType *interfaceType, ObjcProtocolDecl **protocols, unsigned NumProtocols); static bool classof(const Type *T) { |