clang  11.0.0git
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 (ObjCPropertyAttribute::Kind 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 ObjCPropertyAttribute::Kind 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, ObjCPropertyAttribute::Kind 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 ObjCMethodDeclRedeclarePropertyAccessor (ASTContext &Context, ObjCImplementationDecl *Impl, ObjCMethodDecl *AccessorDecl, SourceLocation AtLoc, SourceLocation PropertyLoc)
 Create a synthesized property accessor stub inside the @implementation. 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 2374 of file SemaObjCProperty.cpp.

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

◆ areIncompatiblePropertyAttributes()

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

Definition at line 834 of file SemaObjCProperty.cpp.

◆ checkARCPropertyImpl()

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

Definition at line 728 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 343 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 107 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 64 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 1766 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 1833 of file SemaObjCProperty.cpp.

References clang::ObjCInterfaceDecl::getSuperClass().

◆ deducePropertyOwnershipFromType()

static unsigned deducePropertyOwnershipFromType ( Sema S,
QualType  T 
)
static

Definition at line 128 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 2006 of file SemaObjCProperty.cpp.

◆ getImpliedARCOwnership()

static Qualifiers::ObjCLifetime getImpliedARCOwnership ( ObjCPropertyAttribute::Kind  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::ObjCPropertyAttribute::kind_assign, clang::ObjCPropertyAttribute::kind_copy, clang::ObjCPropertyAttribute::kind_retain, clang::ObjCPropertyAttribute::kind_strong, clang::ObjCPropertyAttribute::kind_unsafe_unretained, clang::ObjCPropertyAttribute::kind_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,
ObjCPropertyAttribute::Kind  Kind 
)
static

Definition at line 829 of file SemaObjCProperty.cpp.

◆ LocPropertyAttribute()

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

◆ makePropertyAttributesAsWritten()

static ObjCPropertyAttribute::Kind makePropertyAttributesAsWritten ( unsigned  Attributes)
static

◆ RedeclarePropertyAccessor()

static ObjCMethodDecl* RedeclarePropertyAccessor ( ASTContext Context,
ObjCImplementationDecl Impl,
ObjCMethodDecl AccessorDecl,
SourceLocation  AtLoc,
SourceLocation  PropertyLoc 
)
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 845 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 807 of file SemaObjCProperty.cpp.

References getImpliedARCOwnership(), clang::QualType::getObjCLifetime(), clang::ObjCPropertyDecl::getPropertyAttributes(), clang::ValueDecl::getType(), clang::ObjCPropertyAttribute::kind_strong, clang::ObjCPropertyAttribute::kind_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