diff options
Diffstat (limited to 'clang')
| -rw-r--r-- | clang/AST/ASTContext.cpp | 13 | ||||
| -rw-r--r-- | clang/AST/Type.cpp | 6 | ||||
| -rw-r--r-- | clang/Sema/SemaExpr.cpp | 7 | ||||
| -rw-r--r-- | clang/include/clang/AST/Type.h | 20 | 
4 files changed, 17 insertions, 29 deletions
| diff --git a/clang/AST/ASTContext.cpp b/clang/AST/ASTContext.cpp index 322f34ccf2d..4351b89e960 100644 --- a/clang/AST/ASTContext.cpp +++ b/clang/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/clang/AST/Type.cpp b/clang/AST/Type.cpp index 4befdcb5425..b1da04b0a31 100644 --- a/clang/AST/Type.cpp +++ b/clang/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/clang/Sema/SemaExpr.cpp b/clang/Sema/SemaExpr.cpp index b48703d8a1c..1d8b8834353 100644 --- a/clang/Sema/SemaExpr.cpp +++ b/clang/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/clang/include/clang/AST/Type.h b/clang/include/clang/AST/Type.h index d6dc5f7d6bc..da448917804 100644 --- a/clang/include/clang/AST/Type.h +++ b/clang/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) {  | 

