diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2009-05-08 20:20:55 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2009-05-08 20:20:55 +0000 |
commit | c001e89b920504154bd0b1832e6feacd28fbfa58 (patch) | |
tree | 700611cf6fa89c5d07e81d42bf84c5fac3f11d30 /lib/Sema/SemaDeclObjC.cpp | |
parent | 238a31824070185d7f0dae1a6d8270ab69073309 (diff) |
Refactoring of my last patch.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@71248 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema/SemaDeclObjC.cpp')
-rw-r--r-- | lib/Sema/SemaDeclObjC.cpp | 39 |
1 files changed, 23 insertions, 16 deletions
diff --git a/lib/Sema/SemaDeclObjC.cpp b/lib/Sema/SemaDeclObjC.cpp index 34afdedba7..981d13c15e 100644 --- a/lib/Sema/SemaDeclObjC.cpp +++ b/lib/Sema/SemaDeclObjC.cpp @@ -19,6 +19,26 @@ #include "clang/Parse/DeclSpec.h" using namespace clang; +bool Sema::DiagnosePropertyAccessorMismatch(ObjCPropertyDecl *property, + ObjCMethodDecl *GetterMethod, + SourceLocation Loc) { + if (GetterMethod && + GetterMethod->getResultType() != property->getType()) { + AssignConvertType result = Incompatible; + if (Context.isObjCObjectPointerType(property->getType())) + result = CheckAssignmentConstraints(property->getType(), + GetterMethod->getResultType()); + if (result != Compatible) { + Diag(Loc, diag::warn_accessor_property_type_mismatch) + << property->getDeclName() + << GetterMethod->getSelector(); + Diag(GetterMethod->getLocation(), diag::note_declared_at); + return true; + } + } + return false; +} + /// ActOnStartOfObjCMethodDef - This routine sets up parameters; invisible /// and user declared, in the method definition's AST. void Sema::ActOnStartOfObjCMethodDef(Scope *FnBodyScope, DeclPtrTy D) { @@ -1312,22 +1332,9 @@ void Sema::ProcessPropertyDecl(ObjCPropertyDecl *property, GetterMethod = CD->getInstanceMethod(Context, property->getGetterName()); SetterMethod = CD->getInstanceMethod(Context, property->getSetterName()); - - if (GetterMethod && - GetterMethod->getResultType() != property->getType()) { - AssignConvertType result = Incompatible; - if (Context.isObjCObjectPointerType(property->getType())) - result = CheckAssignmentConstraints(property->getType(), - GetterMethod->getResultType()); - if (result != Compatible) { - Diag(property->getLocation(), - diag::warn_accessor_property_type_mismatch) - << property->getDeclName() - << GetterMethod->getSelector(); - Diag(GetterMethod->getLocation(), diag::note_declared_at); - } - } - + DiagnosePropertyAccessorMismatch(property, GetterMethod, + property->getLocation()); + if (SetterMethod) { if (Context.getCanonicalType(SetterMethod->getResultType()) != Context.VoidTy) |