clang
3.9.0
|
#include "clang/Sema/SemaInternal.h"
#include "clang/AST/ASTMutationListener.h"
#include "clang/AST/DeclObjC.h"
#include "clang/AST/ExprCXX.h"
#include "clang/AST/ExprObjC.h"
#include "clang/Basic/SourceManager.h"
#include "clang/Lex/Lexer.h"
#include "clang/Lex/Preprocessor.h"
#include "clang/Sema/Initialization.h"
#include "llvm/ADT/DenseSet.h"
#include "llvm/ADT/SmallString.h"
Go to the source code of this file.
Functions | |
static Qualifiers::ObjCLifetime | getImpliedARCOwnership (ObjCPropertyDecl::PropertyAttributeKind attrs, QualType type) |
getImpliedARCOwnership - Given a set of property attributes and a type, infer an expected lifetime. More... | |
static void | checkPropertyDeclWithOwnership (Sema &S, ObjCPropertyDecl *property) |
Check the internal consistency of a property declaration with an explicit ownership qualifier. More... | |
static void | CheckPropertyAgainstProtocol (Sema &S, ObjCPropertyDecl *Prop, ObjCProtocolDecl *Proto, llvm::SmallPtrSetImpl< ObjCProtocolDecl * > &Known) |
Check this Objective-C property against a property declared in the given protocol. More... | |
static unsigned | deducePropertyOwnershipFromType (Sema &S, QualType T) |
static unsigned | getOwnershipRule (unsigned attr) |
static ObjCPropertyDecl::PropertyAttributeKind | makePropertyAttributesAsWritten (unsigned Attributes) |
static bool | LocPropertyAttribute (ASTContext &Context, const char *attrName, SourceLocation LParenLoc, SourceLocation &Loc) |
static void | checkAtomicPropertyMismatch (Sema &S, ObjCPropertyDecl *OldProperty, ObjCPropertyDecl *NewProperty, bool PropagateAtomicity) |
Check for a mismatch in the atomicity of the given properties. More... | |
static void | checkARCPropertyImpl (Sema &S, SourceLocation propertyImplLoc, ObjCPropertyDecl *property, ObjCIvarDecl *ivar) |
static void | setImpliedPropertyAttributeForReadOnlyProperty (ObjCPropertyDecl *property, ObjCIvarDecl *ivar) |
setImpliedPropertyAttributeForReadOnlyProperty - This routine evaludates life-time attributes for a 'readonly' property with no known lifetime of its own, using backing 'ivar's attribute, if any. More... | |
static void | DiagnosePropertyMismatchDeclInProtocols (Sema &S, SourceLocation AtLoc, ObjCInterfaceDecl *ClassDecl, ObjCPropertyDecl *Property) |
DiagnosePropertyMismatchDeclInProtocols - diagnose properties declared in inherited protocols with mismatched types. More... | |
static bool | hasWrittenStorageAttribute (ObjCPropertyDecl *Prop, ObjCPropertyQueryKind QueryKind) |
Determine whether any storage attributes were written on the property. More... | |
static void | CollectImmediateProperties (ObjCContainerDecl *CDecl, ObjCContainerDecl::PropertyMap &PropMap, ObjCContainerDecl::PropertyMap &SuperPropMap, bool CollectClassPropsOnly=false, bool IncludeProtocols=true) |
CollectImmediateProperties - This routine collects all properties in the class and its conforming protocols; but not those in its super class. More... | |
static void | CollectSuperClassPropertyImplementations (ObjCInterfaceDecl *CDecl, ObjCInterfaceDecl::PropertyMap &PropMap) |
CollectSuperClassPropertyImplementations - This routine collects list of properties to be implemented in super class(s) and also coming from their conforming protocols. More... | |
static bool | SuperClassImplementsProperty (ObjCInterfaceDecl *IDecl, ObjCPropertyDecl *Prop) |
static void | DiagnoseUnimplementedAccessor (Sema &S, ObjCInterfaceDecl *PrimaryClass, Selector Method, ObjCImplDecl *IMPDecl, ObjCContainerDecl *CDecl, ObjCCategoryDecl *C, ObjCPropertyDecl *Prop, llvm::SmallPtrSet< const ObjCMethodDecl *, 8 > &SMap) |
static void | AddPropertyAttrs (Sema &S, ObjCMethodDecl *PropertyMethod, ObjCPropertyDecl *Property) |
AddPropertyAttrs - Propagates attributes from a property to the implicitly-declared getter or setter for that property. More... | |
Variables | |
static const unsigned | OwnershipMask |
|
static |
AddPropertyAttrs - Propagates attributes from a property to the implicitly-declared getter or setter for that property.
Definition at line 2129 of file SemaObjCProperty.cpp.
References clang::Sema::Context.
Referenced by clang::Sema::ProcessPropertyDecl().
|
static |
Definition at line 707 of file SemaObjCProperty.cpp.
References clang::Sema::Context, clang::Sema::Diag(), clang::ObjCIvarDecl::getAccessControl(), clang::NamedDecl::getDeclName(), getImpliedARCOwnership(), clang::Sema::getLangOpts(), clang::QualType::getObjCLifetime(), clang::ObjCPropertyDecl::getPropertyAttributes(), clang::ASTContext::getQualifiedType(), clang::ValueDecl::getType(), clang::Qualifiers::hasObjCLifetime(), clang::Type::isObjCARCImplicitlyUnretainedType(), clang::SourceLocation::isValid(), clang::ObjCPropertyDecl::OBJC_PR_assign, clang::Qualifiers::OCL_Autoreleasing, clang::Qualifiers::OCL_ExplicitNone, clang::Qualifiers::OCL_None, clang::Qualifiers::OCL_Strong, clang::Qualifiers::OCL_Weak, clang::ObjCIvarDecl::Private, clang::SplitQualType::Quals, clang::Qualifiers::setObjCLifetime(), clang::ValueDecl::setType(), and clang::QualType::split().
Referenced by clang::Sema::ActOnPropertyImplDecl().
|
static |
Check for a mismatch in the atomicity of the given properties.
Definition at line 342 of file SemaObjCProperty.cpp.
References Category, clang::Sema::Diag(), clang::NamedDecl::getDeclName(), clang::getIdentifier(), clang::ObjCPropertyDecl::getPropertyAttributes(), clang::ObjCPropertyDecl::getPropertyAttributesAsWritten(), clang::ObjCPropertyDecl::OBJC_PR_atomic, clang::ObjCPropertyDecl::OBJC_PR_nonatomic, clang::ObjCPropertyDecl::OBJC_PR_readonly, clang::ObjCPropertyDecl::overwritePropertyAttributes(), and clang::Property.
Referenced by clang::Sema::DiagnosePropertyMismatch(), and clang::Sema::HandlePropertyInClassExtension().
|
static |
Check this Objective-C property against a property declared in the given protocol.
Definition at line 110 of file SemaObjCProperty.cpp.
References clang::Sema::DiagnosePropertyMismatch(), clang::NamedDecl::getDeclName(), clang::NamedDecl::getIdentifier(), I, clang::DeclContext::lookup(), P, clang::ObjCProtocolDecl::protocols(), and clang::DeclContextLookupResult::size().
Referenced by clang::Sema::ActOnProperty().
|
static |
Check the internal consistency of a property declaration with an explicit ownership qualifier.
Definition at line 66 of file SemaObjCProperty.cpp.
References clang::Sema::Diag(), clang::NamedDecl::getDeclName(), getImpliedARCOwnership(), clang::ObjCPropertyDecl::getType(), clang::ObjCPropertyDecl::OBJC_PR_strong, clang::ObjCPropertyDecl::OBJC_PR_unsafe_unretained, clang::ObjCPropertyDecl::OBJC_PR_weak, clang::Qualifiers::OCL_ExplicitNone, clang::Qualifiers::OCL_None, clang::Qualifiers::OCL_Strong, and clang::Qualifiers::OCL_Weak.
Referenced by clang::Sema::ActOnProperty().
|
static |
CollectImmediateProperties - This routine collects all properties in the class and its conforming protocols; but not those in its super class.
Definition at line 1536 of file SemaObjCProperty.cpp.
References clang::NamedDecl::getIdentifier().
Referenced by clang::Sema::DiagnoseUnimplementedProperties().
|
static |
CollectSuperClassPropertyImplementations - This routine collects list of properties to be implemented in super class(s) and also coming from their conforming protocols.
Definition at line 1603 of file SemaObjCProperty.cpp.
References clang::ObjCInterfaceDecl::getSuperClass().
Referenced by clang::Sema::DefaultSynthesizeProperties(), and clang::Sema::DiagnoseUnimplementedProperties().
Definition at line 131 of file SemaObjCProperty.cpp.
References clang::ObjCDeclSpec::DQ_PR_strong, clang::ObjCDeclSpec::DQ_PR_unsafe_unretained, clang::ObjCDeclSpec::DQ_PR_weak, clang::Sema::getLangOpts(), clang::QualType::getObjCLifetime(), clang::QualType::isObjCGCWeak(), clang::LangOptions::NonGC, clang::Qualifiers::OCL_Autoreleasing, clang::Qualifiers::OCL_ExplicitNone, clang::Qualifiers::OCL_None, clang::Qualifiers::OCL_Strong, and clang::Qualifiers::OCL_Weak.
Referenced by clang::Sema::ActOnProperty().
|
static |
DiagnosePropertyMismatchDeclInProtocols - diagnose properties declared in inherited protocols with mismatched types.
Since any of them can be candidate for synthesis.
Definition at line 813 of file SemaObjCProperty.cpp.
References clang::ObjCInterfaceDecl::all_referenced_protocols(), clang::Sema::Context, clang::Sema::Diag(), E, clang::ASTContext::getCanonicalType(), clang::ObjCProtocolDecl::getDefinition(), clang::ObjCInterfaceDecl::getSuperClass(), clang::ObjCPropertyDecl::getType(), I, clang::Sema::isObjCPointerConversion(), clang::SourceLocation::isValid(), and clang::ASTContext::propertyTypesAreCompatible().
Referenced by clang::Sema::ActOnPropertyImplDecl().
|
static |
Definition at line 1768 of file SemaObjCProperty.cpp.
References clang::Sema::Diag(), clang::NamedDecl::getDeclName(), I, ID, clang::ObjCPropertyDecl::isClassProperty(), clang::ObjCRuntime::isNonFragile(), clang::Sema::LangOpts, clang::ObjCInterfaceDecl::lookupPropertyAccessor(), and clang::LangOptions::ObjCRuntime.
Referenced by clang::Sema::DiagnoseUnimplementedProperties().
|
static |
getImpliedARCOwnership - Given a set of property attributes and a type, infer an expected lifetime.
The type's ownership qualification is not considered.
Returns OCL_None if the attributes as stated do not imply an ownership. Never returns OCL_Autoreleasing.
Definition at line 39 of file SemaObjCProperty.cpp.
References clang::Type::isObjCRetainableType(), clang::ObjCPropertyDecl::OBJC_PR_assign, clang::ObjCPropertyDecl::OBJC_PR_copy, clang::ObjCPropertyDecl::OBJC_PR_retain, clang::ObjCPropertyDecl::OBJC_PR_strong, clang::ObjCPropertyDecl::OBJC_PR_unsafe_unretained, clang::ObjCPropertyDecl::OBJC_PR_weak, clang::Qualifiers::OCL_ExplicitNone, clang::Qualifiers::OCL_None, clang::Qualifiers::OCL_Strong, and clang::Qualifiers::OCL_Weak.
Referenced by clang::Sema::ActOnPropertyImplDecl(), checkARCPropertyImpl(), checkPropertyDeclWithOwnership(), and setImpliedPropertyAttributeForReadOnlyProperty().
Definition at line 164 of file SemaObjCProperty.cpp.
References clang::ObjCPropertyDecl::OBJC_PR_assign, clang::ObjCPropertyDecl::OBJC_PR_unsafe_unretained, and OwnershipMask.
Referenced by clang::Sema::ActOnProperty(), clang::Sema::CheckObjCPropertyAttributes(), clang::Sema::CreatePropertyDecl(), clang::Sema::DiagnosePropertyMismatch(), and clang::Sema::HandlePropertyInClassExtension().
|
static |
Determine whether any storage attributes were written on the property.
Definition at line 859 of file SemaObjCProperty.cpp.
References Category, clang::NamedDecl::getDeclName(), clang::NamedDecl::getIdentifier(), clang::ObjCPropertyDecl::getPropertyAttributesAsWritten(), clang::ObjCPropertyDecl::isReadOnly(), and OwnershipMask.
Referenced by clang::Sema::ActOnPropertyImplDecl().
|
static |
Definition at line 312 of file SemaObjCProperty.cpp.
References clang::SourceManager::getBufferData(), clang::SourceManager::getDecomposedLoc(), clang::ASTContext::getLangOpts(), clang::SourceManager::getLocForStartOfFile(), clang::ASTContext::getSourceManager(), clang::SourceLocation::isMacroID(), and SM.
Referenced by clang::Sema::ActOnPropertyImplDecl().
|
static |
Definition at line 280 of file SemaObjCProperty.cpp.
References clang::ObjCDeclSpec::DQ_PR_assign, clang::ObjCDeclSpec::DQ_PR_atomic, clang::ObjCDeclSpec::DQ_PR_class, clang::ObjCDeclSpec::DQ_PR_copy, clang::ObjCDeclSpec::DQ_PR_getter, clang::ObjCDeclSpec::DQ_PR_nonatomic, clang::ObjCDeclSpec::DQ_PR_readonly, clang::ObjCDeclSpec::DQ_PR_readwrite, clang::ObjCDeclSpec::DQ_PR_retain, clang::ObjCDeclSpec::DQ_PR_setter, clang::ObjCDeclSpec::DQ_PR_strong, clang::ObjCDeclSpec::DQ_PR_unsafe_unretained, clang::ObjCDeclSpec::DQ_PR_weak, clang::ObjCPropertyDecl::OBJC_PR_assign, clang::ObjCPropertyDecl::OBJC_PR_atomic, clang::ObjCPropertyDecl::OBJC_PR_class, clang::ObjCPropertyDecl::OBJC_PR_copy, clang::ObjCPropertyDecl::OBJC_PR_getter, clang::ObjCPropertyDecl::OBJC_PR_nonatomic, clang::ObjCPropertyDecl::OBJC_PR_readonly, clang::ObjCPropertyDecl::OBJC_PR_readwrite, clang::ObjCPropertyDecl::OBJC_PR_retain, clang::ObjCPropertyDecl::OBJC_PR_setter, clang::ObjCPropertyDecl::OBJC_PR_strong, clang::ObjCPropertyDecl::OBJC_PR_unsafe_unretained, and clang::ObjCPropertyDecl::OBJC_PR_weak.
Referenced by clang::Sema::CreatePropertyDecl().
|
static |
setImpliedPropertyAttributeForReadOnlyProperty - This routine evaludates life-time attributes for a 'readonly' property with no known lifetime of its own, using backing 'ivar's attribute, if any.
If no backing 'ivar', property's life-time is assumed 'strong'.
Definition at line 787 of file SemaObjCProperty.cpp.
References getImpliedARCOwnership(), clang::QualType::getObjCLifetime(), clang::ObjCPropertyDecl::getPropertyAttributes(), clang::ValueDecl::getType(), clang::ObjCPropertyDecl::OBJC_PR_strong, clang::ObjCPropertyDecl::OBJC_PR_weak, clang::Qualifiers::OCL_None, clang::Qualifiers::OCL_Strong, and clang::Qualifiers::OCL_Weak.
Referenced by clang::Sema::ActOnPropertyImplDecl().
|
static |
Definition at line 1646 of file SemaObjCProperty.cpp.
References clang::ObjCPropertyDecl::getGetterName(), clang::ObjCContainerDecl::getInstanceMethod(), clang::ObjCPropertyDecl::getPropertyAttributes(), clang::ObjCPropertyDecl::getSetterName(), clang::ObjCInterfaceDecl::getSuperClass(), and clang::ObjCPropertyDecl::OBJC_PR_readonly.
Referenced by clang::Sema::DefaultSynthesizeProperties().
|
static |
Definition at line 156 of file SemaObjCProperty.cpp.
Referenced by getOwnershipRule(), clang::Sema::HandlePropertyInClassExtension(), and hasWrittenStorageAttribute().