clang  6.0.0svn
Functions | Variables
SemaObjCProperty.cpp File Reference
#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"
Include dependency graph for SemaObjCProperty.cpp:

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 bool isIncompatiblePropertyAttribute (unsigned Attr1, unsigned Attr2, ObjCPropertyDecl::PropertyAttributeKind Kind)
 
static bool areIncompatiblePropertyAttributes (unsigned Attr1, unsigned Attr2, unsigned Kinds)
 
static ObjCPropertyDeclSelectPropertyForSynthesisFromProtocols (Sema &S, SourceLocation AtLoc, ObjCInterfaceDecl *ClassDecl, ObjCPropertyDecl *Property)
 SelectPropertyForSynthesisFromProtocols - Finds the most appropriate property declaration that should be synthesised in all of the inherited protocols. 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
 

Function Documentation

◆ AddPropertyAttrs()

static void AddPropertyAttrs ( Sema S,
ObjCMethodDecl PropertyMethod,
ObjCPropertyDecl Property 
)
static

AddPropertyAttrs - Propagates attributes from a property to the implicitly-declared getter or setter for that property.

Definition at line 2282 of file SemaObjCProperty.cpp.

Referenced by clang::Sema::ProcessPropertyDecl().

◆ areIncompatiblePropertyAttributes()

static bool areIncompatiblePropertyAttributes ( unsigned  Attr1,
unsigned  Attr2,
unsigned  Kinds 
)
static

Definition at line 823 of file SemaObjCProperty.cpp.

◆ checkARCPropertyImpl()

static void checkARCPropertyImpl ( Sema S,
SourceLocation  propertyImplLoc,
ObjCPropertyDecl property,
ObjCIvarDecl ivar 
)
static

Definition at line 715 of file SemaObjCProperty.cpp.

◆ checkAtomicPropertyMismatch()

static void checkAtomicPropertyMismatch ( Sema S,
ObjCPropertyDecl OldProperty,
ObjCPropertyDecl NewProperty,
bool  PropagateAtomicity 
)
static

Check for a mismatch in the atomicity of the given properties.

Definition at line 344 of file SemaObjCProperty.cpp.

Referenced by clang::Sema::DiagnosePropertyMismatch().

◆ CheckPropertyAgainstProtocol()

static void CheckPropertyAgainstProtocol ( Sema S,
ObjCPropertyDecl Prop,
ObjCProtocolDecl Proto,
llvm::SmallPtrSetImpl< ObjCProtocolDecl *> &  Known 
)
static

Check this Objective-C property against a property declared in the given protocol.

Definition at line 110 of file SemaObjCProperty.cpp.

◆ checkPropertyDeclWithOwnership()

static void checkPropertyDeclWithOwnership ( Sema S,
ObjCPropertyDecl property 
)
static

Check the internal consistency of a property declaration with an explicit ownership qualifier.

Definition at line 66 of file SemaObjCProperty.cpp.

◆ CollectImmediateProperties()

static void CollectImmediateProperties ( ObjCContainerDecl CDecl,
ObjCContainerDecl::PropertyMap PropMap,
ObjCContainerDecl::PropertyMap SuperPropMap,
bool  CollectClassPropsOnly = false,
bool  IncludeProtocols = true 
)
static

CollectImmediateProperties - This routine collects all properties in the class and its conforming protocols; but not those in its super class.

Definition at line 1683 of file SemaObjCProperty.cpp.

References clang::NamedDecl::getIdentifier().

◆ CollectSuperClassPropertyImplementations()

static void CollectSuperClassPropertyImplementations ( ObjCInterfaceDecl CDecl,
ObjCInterfaceDecl::PropertyMap &  PropMap 
)
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 1750 of file SemaObjCProperty.cpp.

References clang::ObjCInterfaceDecl::getSuperClass().

◆ deducePropertyOwnershipFromType()

static unsigned deducePropertyOwnershipFromType ( Sema S,
QualType  T 
)
static

Definition at line 131 of file SemaObjCProperty.cpp.

◆ DiagnoseUnimplementedAccessor()

static void DiagnoseUnimplementedAccessor ( Sema S,
ObjCInterfaceDecl PrimaryClass,
Selector  Method,
ObjCImplDecl IMPDecl,
ObjCContainerDecl CDecl,
ObjCCategoryDecl C,
ObjCPropertyDecl Prop,
llvm::SmallPtrSet< const ObjCMethodDecl *, 8 > &  SMap 
)
static

Definition at line 1921 of file SemaObjCProperty.cpp.

◆ getImpliedARCOwnership()

static Qualifiers::ObjCLifetime getImpliedARCOwnership ( ObjCPropertyDecl::PropertyAttributeKind  attrs,
QualType  type 
)
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 setImpliedPropertyAttributeForReadOnlyProperty().

◆ getOwnershipRule()

static unsigned getOwnershipRule ( unsigned  attr)
static

◆ hasWrittenStorageAttribute()

static bool hasWrittenStorageAttribute ( ObjCPropertyDecl Prop,
ObjCPropertyQueryKind  QueryKind 
)
static

◆ isIncompatiblePropertyAttribute()

static bool isIncompatiblePropertyAttribute ( unsigned  Attr1,
unsigned  Attr2,
ObjCPropertyDecl::PropertyAttributeKind  Kind 
)
static

Definition at line 818 of file SemaObjCProperty.cpp.

◆ LocPropertyAttribute()

static bool LocPropertyAttribute ( ASTContext Context,
const char *  attrName,
SourceLocation  LParenLoc,
SourceLocation Loc 
)
static

◆ makePropertyAttributesAsWritten()

static ObjCPropertyDecl::PropertyAttributeKind makePropertyAttributesAsWritten ( unsigned  Attributes)
static

◆ SelectPropertyForSynthesisFromProtocols()

static ObjCPropertyDecl* SelectPropertyForSynthesisFromProtocols ( Sema S,
SourceLocation  AtLoc,
ObjCInterfaceDecl ClassDecl,
ObjCPropertyDecl Property 
)
static

SelectPropertyForSynthesisFromProtocols - Finds the most appropriate property declaration that should be synthesised in all of the inherited protocols.

It also diagnoses properties declared in inherited protocols with mismatched types or attributes, since any of them can be candidate for synthesis.

Definition at line 834 of file SemaObjCProperty.cpp.

◆ setImpliedPropertyAttributeForReadOnlyProperty()

static void setImpliedPropertyAttributeForReadOnlyProperty ( ObjCPropertyDecl property,
ObjCIvarDecl ivar 
)
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 795 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.

◆ SuperClassImplementsProperty()

static bool SuperClassImplementsProperty ( ObjCInterfaceDecl IDecl,
ObjCPropertyDecl Prop 
)
static

Variable Documentation

◆ OwnershipMask

const unsigned OwnershipMask
static
Initial value:
=
(ObjCPropertyDecl::OBJC_PR_assign |
ObjCPropertyDecl::OBJC_PR_retain |
ObjCPropertyDecl::OBJC_PR_copy |
ObjCPropertyDecl::OBJC_PR_weak |
ObjCPropertyDecl::OBJC_PR_strong |
ObjCPropertyDecl::OBJC_PR_unsafe_unretained)

Definition at line 156 of file SemaObjCProperty.cpp.

Referenced by getOwnershipRule(), and hasWrittenStorageAttribute().