diff options
author | Chris Lattner <sabre@nondot.org> | 2008-04-07 01:30:37 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2008-04-07 01:30:37 +0000 |
commit | 439dbadeada35a73e0b182270456ed76dda635d4 (patch) | |
tree | a3b1779ffbc3a678f8545559ab2ea5df25ebeb7e /lib/AST/ASTContext.cpp | |
parent | 368eefa081d12f0a265ee90ee8ec61b54168d57d (diff) |
simplify the logic in ASTContext::objcTypesAreCompatible
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@49302 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/AST/ASTContext.cpp')
-rw-r--r-- | lib/AST/ASTContext.cpp | 28 |
1 files changed, 14 insertions, 14 deletions
diff --git a/lib/AST/ASTContext.cpp b/lib/AST/ASTContext.cpp index 12eb5a15de..36c0a4dc6f 100644 --- a/lib/AST/ASTContext.cpp +++ b/lib/AST/ASTContext.cpp @@ -1422,23 +1422,23 @@ bool ASTContext::builtinTypesAreCompatible(QualType lhs, QualType rhs) { /// are of different class; one is interface type or is /// a qualified interface type and the other type is of a different class. /// Example, II or II<P>. -bool ASTContext::objcTypesAreCompatible(QualType lhs, QualType rhs) { - if (lhs->isObjCInterfaceType() && isObjCIdType(rhs)) +bool ASTContext::objcTypesAreCompatible(QualType LHS, QualType RHS) { + // ID is compatible with all interface types. + if (LHS->isObjCInterfaceType() && isObjCIdType(RHS)) return true; - else if (isObjCIdType(lhs) && rhs->isObjCInterfaceType()) + else if (isObjCIdType(LHS) && RHS->isObjCInterfaceType()) return true; - if (const ObjCInterfaceType *lhsIT = lhs->getAsObjCInterfaceType()) { - const ObjCQualifiedInterfaceType *rhsQI = - rhs->getAsObjCQualifiedInterfaceType(); - if (!isa<ObjCQualifiedInterfaceType>(lhsIT)) - return rhsQI && (lhsIT->getDecl() == rhsQI->getDecl()); - } - if (const ObjCInterfaceType *rhsIT = rhs->getAsObjCInterfaceType()) { - const ObjCQualifiedInterfaceType *lhsQI = - lhs->getAsObjCQualifiedInterfaceType(); - if (!isa<ObjCQualifiedInterfaceType>(rhsIT)) - return lhsQI && (rhsIT->getDecl() == lhsQI->getDecl()); + // II is compatible with II<P> if the base is the same. Otherwise, no two + // qualified interface types are the same. + if (const ObjCInterfaceType *LHSIT = LHS->getAsObjCInterfaceType()) { + if (const ObjCInterfaceType *RHSIT = RHS->getAsObjCInterfaceType()) { + // If the base decls match and one is a qualified interface and one isn't, + // then they are compatible. + return LHSIT->getDecl() == RHSIT->getDecl() && + isa<ObjCQualifiedInterfaceType>(LHSIT) != + isa<ObjCQualifiedInterfaceType>(RHSIT); + } } return false; } |