A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://clang.llvm.org/doxygen/SemaObjCProperty_8cpp_source.html below:

clang: lib/Sema/SemaObjCProperty.cpp Source File

23#include "llvm/ADT/DenseSet.h" 25using namespace clang

;

54 type

->isObjCRetainableType()) {

69

=

property

->getType().getObjCLifetime();

75 if

(!expectedLifetime) {

89 property

->setPropertyAttributes(

attr

);

93 if

(propertyLifetime == expectedLifetime)

return

;

95 property

->setInvalidDecl();

97

diag::err_arc_inconsistent_property_ownership)

98

<<

property

->getDeclName()

108

llvm::SmallPtrSetImpl<ObjCProtocolDecl *> &Known) {

110 if

(!Known.insert(Proto).second)

128 if

(S.

getLangOpts

().getGC() != LangOptions::NonGC) {

129 if

(

T

.isObjCGCWeak())

134

}

else if

(

auto

ownership =

T

.getObjCLifetime()) {

146

llvm_unreachable(

"bad qualifier"

);

194 if

(CDecl->IsClassExtension()) {

199

isReadWrite, Attributes,

201 T

, TSI, MethodImplKind);

219

(isa<ObjCInterfaceDecl>(ClassDecl) ||

220

isa<ObjCProtocolDecl>(ClassDecl)));

229 bool

FoundInSuper =

false

;

235

FoundInSuper =

true

;

238

CurrentInterfaceDecl = Super;

243 for

(

auto

*

P

: CurrentInterfaceDecl->

protocols

()) {

248 for

(

auto

*

P

: IFace->all_referenced_protocols()) {

252

}

else if

(

ObjCCategoryDecl

*Cat = dyn_cast<ObjCCategoryDecl>(ClassDecl)) {

256 if

(!Cat->IsClassExtension())

257 for

(

auto

*

P

: Cat->protocols())

271 unsigned

attributesAsWritten = 0;

310

std::pair<FileID, unsigned> locInfo =

SM

.getDecomposedLoc(LParenLoc);

312 bool

invalidTemp =

false

;

313

StringRef file =

SM

.getBufferData(locInfo.first, &invalidTemp);

316 const char

*tokenBegin = file.data() + locInfo.second;

319 Lexer

lexer(

SM

.getLocForStartOfFile(locInfo.first),

321

file.begin(), tokenBegin, file.end());

329

}

while

(Tok.

isNot

(tok::r_paren));

337 bool

PropagateAtomicity) {

343 if

(OldIsAtomic == NewIsAtomic)

return

;

349 auto

Attrs =

Property

->getPropertyAttributes();

358 if

(

Property

->getPropertyAttributesAsWritten() &

369 if

(PropagateAtomicity &&

372

Attrs = Attrs & ~AtomicityMask;

384 if

((OldIsAtomic && isImplicitlyReadonlyAtomic(OldProperty)) ||

385

(NewIsAtomic && isImplicitlyReadonlyAtomic(NewProperty)))

391 if

(

auto Category

= dyn_cast<ObjCCategoryDecl>(OldDC))

392

OldContextName =

Category

->getClassInterface()->getIdentifier();

394

OldContextName = cast<ObjCContainerDecl>(OldDC)->getIdentifier();

406 unsigned

&Attributes,

const unsigned

AttributesAsWritten,

QualType T

,

421 bool

isClassProperty =

431 if

(PIDecl && isa<ObjCCategoryDecl>(PIDecl->

getDeclContext

())) {

432 Diag

(AtLoc, diag::err_duplicate_property);

442 if

(!(PIDecl->

isReadOnly

() && isReadWrite)) {

451

? diag::err_use_continuation_class_redeclaration_readwrite

452

: diag::err_use_continuation_class;

463 Diag

(AtLoc, diag::warn_property_redecl_getter_mismatch)

474 unsigned

ExistingOwnership

477 if

(ExistingOwnership && NewOwnership != ExistingOwnership) {

480 Diag

(AtLoc, diag::warn_property_attr_mismatch);

485

Attributes = (Attributes & ~OwnershipMask) | ExistingOwnership;

494 Diag

(AtLoc, diag::warn_property_implicitly_mismatched);

502

FD, GetterSel, GetterNameLoc,

503

SetterSel, SetterNameLoc,

505

Attributes, AttributesAsWritten,

506 T

, TSI, MethodImplKind, DC);

516 bool

IncompatibleObjC =

false

;

526 if

(!isa<ObjCObjectPointerType>(PrimaryClassPropertyT) ||

527

!isa<ObjCObjectPointerType>(ClassExtPropertyT) ||

529

PrimaryClassPropertyT, ConvertedType,

530

IncompatibleObjC)) ||

533

diag::err_type_mismatch_continuation_class) << PDecl->

getType

();

553 const unsigned

Attributes,

const unsigned

AttributesAsWritten,

QualType T

,

583 Diag

(AtLoc, diag::warn_implements_nscopying) << PropertyId;

601

LParenLoc,

T

, TInfo);

603 bool

isClassProperty =

610 Diag

(prevDecl->getLocation(), diag::note_property_declare);

620 Diag

(AtLoc, diag::err_property_type) <<

T

;

675 if

(MethodImplKind == tok::objc_required)

677 else if

(MethodImplKind == tok::objc_optional)

690

CDecl->

hasAttr

<ObjCDirectMembersAttr>()) {

691 if

(isa<ObjCProtocolDecl>(CDecl)) {

692 Diag

(PDecl->

getLocation

(), diag::err_objc_direct_on_protocol) <<

true

;

718 if

(propertyLifetime == ivarLifetime)

return

;

744 switch

(propertyLifetime) {

746

S.

Diag

(ivar->

getLocation

(), diag::err_arc_strong_property_ownership)

747

<<

property

->getDeclName()

754

<<

property

->getDeclName()

759

S.

Diag

(ivar->

getLocation

(), diag::err_arc_assign_property_ownership)

760

<<

property

->getDeclName() << ivar->

getDeclName

()

761

<< ((

property

->getPropertyAttributesAsWritten() &

766

llvm_unreachable(

"properties cannot be autoreleasing"

);

774 if

(propertyImplLoc.

isValid

())

775

S.

Diag

(propertyImplLoc, diag::note_property_synthesize);

807 return

(Attr1 & Kind) != (Attr2 & Kind);

812 return

((Attr1 & Kinds) != 0) != ((Attr2 & Kinds) != 0);

824

assert(isa<ObjCProtocolDecl>(

Property

->getDeclContext()) &&

825 "Expected a property from a protocol"

);

830

PDecl->collectInheritedProtocolProperties(

Property

, ProtocolSet,

835 for

(

const auto

*PI : SDecl->all_referenced_protocols()) {

837

PDecl->collectInheritedProtocolProperties(

Property

, ProtocolSet,

840

SDecl = SDecl->getSuperClass();

844 if

(Properties.empty())

848 size_t

SelectedIndex = 0;

849 for

(

const auto

&Prop : llvm::enumerate(Properties)) {

851 if

(

Property

->isReadOnly() && !Prop.value()->isReadOnly()) {

853

SelectedIndex = Prop.index();

856 if

(

Property

!= OriginalProperty) {

858

Properties[SelectedIndex] = OriginalProperty;

862 unsigned

OriginalAttributes =

Property

->getPropertyAttributesAsWritten();

864

IncompatibleType = 0,

865

HasNoExpectedAttribute,

866

HasUnexpectedAttribute,

872 struct

MismatchingProperty {

875

StringRef AttributeName;

880 unsigned Attr

= Prop->getPropertyAttributesAsWritten();

881 if

(

Attr

!= OriginalAttributes) {

882 auto Diag

= [&](

bool

OriginalHasAttribute, StringRef AttributeName) {

883

MismatchKind Kind = OriginalHasAttribute ? HasNoExpectedAttribute

884

: HasUnexpectedAttribute;

885

Mismatches.push_back({Prop, Kind, AttributeName});

903

OriginalAttributes,

Attr

,

908 "retain (or strong)"

);

917 if

(

Property

->getGetterName() != Prop->getGetterName()) {

918

Mismatches.push_back({Prop, DifferentGetter,

""

});

921 if

(!

Property

->isReadOnly() && !Prop->isReadOnly() &&

922 Property

->getSetterName() != Prop->getSetterName()) {

923

Mismatches.push_back({Prop, DifferentSetter,

""

});

928 bool

IncompatibleObjC =

false

;

931

|| IncompatibleObjC) {

932

Mismatches.push_back({Prop, IncompatibleType,

""

});

938 if

(Mismatches.empty())

943 bool

HasIncompatibleAttributes =

false

;

944 for

(

const auto

&

Note

: Mismatches)

945

HasIncompatibleAttributes =

946 Note

.Kind != IncompatibleType ?

true

: HasIncompatibleAttributes;

950 Property

!= OriginalProperty || HasIncompatibleAttributes

951

? diag::err_protocol_property_mismatch

952

: diag::warn_protocol_property_mismatch);

953 Diag

<< Mismatches[0].Kind;

954 switch

(Mismatches[0].Kind) {

955 case

IncompatibleType:

958 case

HasNoExpectedAttribute:

959 case

HasUnexpectedAttribute:

960 Diag

<< Mismatches[0].AttributeName;

962 case

DifferentGetter:

965 case

DifferentSetter:

970 for

(

const auto

&

Note

: Mismatches) {

972

S.

Diag

(

Note

.Prop->getLocation(), diag::note_protocol_property_declare)

974 switch

(

Note

.Kind) {

975 case

IncompatibleType:

978 case

HasNoExpectedAttribute:

979 case

HasUnexpectedAttribute:

982 case

DifferentGetter:

983 Diag

<<

Note

.Prop->getGetterName();

985 case

DifferentSetter:

986 Diag

<<

Note

.Prop->getSetterName();

991

S.

Diag

(AtLoc, diag::note_property_synthesize);

1013 auto

OrigClass =

Category

->getClassInterface();

1016 return

OrigProp->getPropertyAttributesAsWritten() &

OwnershipMask

;

1020 for

(

const auto

*Proto : OrigClass->all_referenced_protocols()) {

1023 return

OrigProp->getPropertyAttributesAsWritten() &

OwnershipMask

;

1038 Decl

->getSelector(),

Decl

->getReturnType(),

1039 Decl

->getReturnTypeSourceInfo(), Impl,

Decl

->isInstanceMethod(),

1040 Decl

->isVariadic(),

Decl

->isPropertyAccessor(),

1042 Decl

->getImplementationControl(),

Decl

->hasRelatedResultType());

1049 Decl

->getSelectorLocs(SelLocs);

1068 if

(!ClassImpDecl) {

1069 Diag

(AtLoc, diag::err_missing_property_context);

1073

PropertyIvarLoc = PropertyLoc;

1083 if

((IC = dyn_cast<ObjCImplementationDecl>(ClassImpDecl))) {

1088 "ActOnPropertyImplDecl - @implementation without @interface"

);

1093 Diag

(PropertyLoc, diag::err_bad_property_decl) << IDecl->

getDeclName

();

1096 if

(property->isClassProperty() && Synthesize) {

1097 Diag

(PropertyLoc, diag::err_synthesize_on_class_property) << PropertyId;

1100 unsigned

PIkind =

property

->getPropertyAttributesAsWritten();

1104 Diag

(AtLoc, diag::warn_implicit_atomic_property);

1107 Diag

(property->getLocation(), diag::note_property_declare);

1111

dyn_cast<ObjCCategoryDecl>(property->getDeclContext())) {

1112 if

(!CD->IsClassExtension()) {

1113 Diag

(PropertyLoc, diag::err_category_property) << CD->getDeclName();

1114 Diag

(property->getLocation(), diag::note_property_declare);

1119

property->hasAttr<IBOutletAttr>() && !AtLoc.

isValid

()) {

1120 bool

ReadWriteProperty =

false

;

1126

PIkind = ExtProp->getPropertyAttributesAsWritten();

1128

ReadWriteProperty =

true

;

1134 if

(!ReadWriteProperty) {

1135 Diag

(property->getLocation(), diag::warn_auto_readonly_iboutlet_property)

1139

property->getLParenLoc(), readonlyLoc)) {

1142 SourceRange

ReadonlySourceRange(readonlyLoc, endLoc);

1143 Diag

(property->getLocation(),

1144

diag::note_auto_readonly_iboutlet_fixup_suggest) <<

1149 if

(Synthesize && isa<ObjCProtocolDecl>(property->getDeclContext()))

1153

}

else if

((CatImplClass = dyn_cast<ObjCCategoryImplDecl>(ClassImpDecl))) {

1155 Diag

(AtLoc, diag::err_synthesize_category_decl);

1160 Diag

(AtLoc, diag::err_missing_property_interface);

1171 property

=

Category

->FindPropertyDeclaration(PropertyId, QueryKind);

1173 Diag

(PropertyLoc, diag::err_bad_category_property_decl)

1178 Diag

(AtLoc, diag::err_bad_property_context);

1182 bool

CompleteTypeErr =

false

;

1183 bool

compat =

true

;

1188

PropertyIvar = PropertyId;

1192 QualType

PropType =

property

->getType();

1196

diag::err_incomplete_synthesized_property,

1197

property->getDeclName())) {

1198 Diag

(property->getLocation(), diag::note_property_declare);

1199

CompleteTypeErr =

true

;

1203

(property->getPropertyAttributesAsWritten() &

1211 bool

isARCWeak =

false

;

1217 Diag

(PropertyDiagLoc, diag::err_gc_weak_property_strong_type);

1218 Diag

(property->getLocation(), diag::note_property_declare);

1230 Diag

(PropertyDiagLoc,

1232

? diag::err_synthesizing_arc_weak_property_disabled

1233

: diag::err_synthesizing_arc_weak_property_no_runtime);

1234 Diag

(property->getLocation(), diag::note_property_declare);

1236

CompleteTypeErr =

true

;

1243 Diag

(property->getLocation(),

1244

diag::err_arc_weak_unavailable_property)

1245

<< PropertyIvarType;

1264 Diag

(PropertyDiagLoc,

1265

diag::warn_autosynthesis_property_ivar_match)

1266

<< PropertyId << (Ivar ==

nullptr

) << PropertyIvar

1268 Diag

(property->getLocation(), diag::note_property_declare);

1276 if

((

getLangOpts

().ObjCAutoRefCount || isARCWeak) &&

1284 Diag

(PropertyDiagLoc,

1285

diag::err_arc_objc_property_default_assign_on_object);

1286 Diag

(property->getLocation(), diag::note_property_declare);

1290

assert(lifetime &&

"no lifetime for property?"

);

1299

PropertyIvarLoc,PropertyIvarLoc, PropertyIvar,

1300

PropertyIvarType,

nullptr

,

1302

(

Expr

*)

nullptr

,

true

);

1304

diag::err_abstract_type_in_decl,

1306 Diag

(property->getLocation(), diag::note_property_declare);

1308

CompleteTypeErr =

true

;

1310 if

(!CompleteTypeErr) {

1313 Diag

(PropertyIvarLoc, diag::err_synthesize_variable_sized_ivar)

1314

<< PropertyIvarType;

1315

CompleteTypeErr =

true

;

1318 if

(CompleteTypeErr)

1320

ClassImpDecl->

addDecl

(Ivar);

1324 Diag

(PropertyDiagLoc, diag::err_missing_property_ivar_decl)

1330 Diag

(PropertyDiagLoc, diag::err_ivar_in_superclass_use)

1331

<<

property

->getDeclName() << Ivar->

getDeclName

()

1337 property

->setPropertyIvarDecl(Ivar);

1342 if

(!Context.

hasSameType

(PropertyIvarType, IvarType)) {

1343 if

(isa<ObjCObjectPointerType>(PropertyIvarType)

1344

&& isa<ObjCObjectPointerType>(IvarType))

1350

PropertyIvarLoc, PropertyIvarType, IvarType) ==

1354 Diag

(PropertyDiagLoc, diag::err_property_ivar_type)

1355

<<

property

->getDeclName() << PropType

1367 if

(lhsType != rhsType &&

1369 Diag

(PropertyDiagLoc, diag::err_property_ivar_type)

1370

<<

property

->getDeclName() << PropType

1379 Diag

(PropertyDiagLoc, diag::err_weak_property)

1380

<<

property

->getDeclName() << Ivar->

getDeclName

();

1385 if

((property->getType()->isObjCObjectPointerType() ||

1388 Diag

(PropertyDiagLoc, diag::err_strong_property)

1389

<<

property

->getDeclName() << Ivar->

getDeclName

();

1393 if

(

getLangOpts

().ObjCAutoRefCount || isARCWeak ||

1396

}

else if

(PropertyIvar)

1398 Diag

(PropertyDiagLoc, diag::err_dynamic_property_ivar_decl);

1400

assert (property &&

"ActOnPropertyImplDecl - property declaration missing"

);

1405

Ivar, PropertyIvarLoc);

1407 if

(CompleteTypeErr || !compat)

1410 if

(

ObjCMethodDecl

*getterMethod = property->getGetterMethodDecl()) {

1411

getterMethod->createImplicitParams(Context, IDecl);

1417

getterMethod->getSelector(), getterMethod->isInstanceMethod());

1436

Context, SelfDecl->

getType

(), CK_LValueToRValue, SelfExpr,

nullptr

,

1443

LoadSelfExpr,

true

,

true

);

1446

getterMethod->getReturnType()),

1447

PropertyDiagLoc, IvarRefExpr);

1455 if

(property->hasAttr<NSReturnsNotRetainedAttr>() &&

1456

!getterMethod->hasAttr<NSReturnsNotRetainedAttr>()) {

1457 Diag

(getterMethod->getLocation(),

1458

diag::warn_property_getter_owning_mismatch);

1459 Diag

(property->getLocation(), diag::note_property_declare);

1461 if

(

getLangOpts

().ObjCAutoRefCount && Synthesize)

1462 switch

(getterMethod->getMethodFamily()) {

1467 Diag

(getterMethod->getLocation(), diag::err_arc_illegal_method_def)

1468

<< 1 << getterMethod->getSelector();

1475 if

(

ObjCMethodDecl

*setterMethod = property->getSetterMethodDecl()) {

1476

setterMethod->createImplicitParams(Context, IDecl);

1481

setterMethod->getSelector(), setterMethod->isInstanceMethod());

1484

AtLoc, PropertyLoc);

1498

Context, SelfDecl->

getType

(), CK_LValueToRValue, SelfExpr,

nullptr

,

1505

LoadSelfExpr,

true

,

true

);

1514 if

(property->getPropertyAttributes() &

1518

dyn_cast_or_null<CXXOperatorCallExpr>(

callExpr

))

1519 if

(

const FunctionDecl

*FuncDecl = CXXCE->getDirectCallee())

1520 if

(!FuncDecl->isTrivial())

1521 if

(property->getType()->isReferenceType()) {

1522 Diag

(PropertyDiagLoc,

1523

diag::err_atomic_property_nontrivial_assign_op)

1524

<<

property

->getType();

1525 Diag

(FuncDecl->getBeginLoc(), diag::note_callee_decl)

1537 Diag

(PropertyLoc, diag::err_duplicate_ivar_use)

1538

<< PropertyId << PPIDecl->getPropertyDecl()->getIdentifier()

1540 Diag

(PPIDecl->getLocation(), diag::note_previous_use);

1545 Diag

(PropertyLoc, diag::err_property_implemented) << PropertyId;

1546 Diag

(PPIDecl->getLocation(), diag::note_previous_declaration);

1561 if

(PropertyIvar && PropertyIvar != PropertyId)

1576 Diag

(PropertyDiagLoc, diag::err_duplicate_ivar_use)

1577

<< PropertyId << PPIDecl->getPropertyDecl()->getIdentifier()

1579 Diag

(PPIDecl->getLocation(), diag::note_previous_use);

1584 Diag

(PropertyDiagLoc, diag::err_property_implemented) << PropertyId;

1585 Diag

(PPIDecl->getLocation(), diag::note_previous_declaration);

1594 Diag

(PropertyLoc, diag::err_objc_direct_dynamic_property);

1596

diag::note_previous_declaration);

1613 bool

OverridingProtocolProperty) {

1621 if

(!OverridingProtocolProperty &&

1627 Diag

(

Property

->getLocation(), diag::warn_readonly_property)

1628

<<

Property

->getDeclName() << inheritedName;

1631 Diag

(

Property

->getLocation(), diag::warn_property_attribute)

1632

<<

Property

->getDeclName() <<

"copy"

<< inheritedName;

1638 bool

CStrong = (CAttrRetain != 0);

1639 bool

SStrong = (SAttrRetain != 0);

1640 if

(CStrong != SStrong)

1641 Diag

(

Property

->getLocation(), diag::warn_property_attribute)

1642

<<

Property

->getDeclName() <<

"retain (or strong)"

<< inheritedName;

1655 Diag

(

Property

->getLocation(), diag::warn_property_attribute)

1656

<<

Property

->getDeclName() <<

"setter"

<< inheritedName;

1660 Diag

(

Property

->getLocation(), diag::warn_property_attribute)

1661

<<

Property

->getDeclName() <<

"getter"

<< inheritedName;

1673 bool

IncompatibleObjC =

false

;

1676

IncompatibleObjC) ||

1678 Diag

(

Property

->getLocation(), diag::warn_property_types_are_incompatible)

1679

<<

Property

->getType() << SuperProperty->

getType

() << inheritedName;

1693 property

->getType().getNonReferenceType().getAtomicUnqualifiedType();

1694 bool

compat = Context.

hasSameType

(PropertyRValueType, GetterType);

1698 if

((propertyObjCPtr =

1704 Diag

(

Loc

, diag::err_property_accessor_type)

1705

<<

property

->getDeclName() << PropertyRValueType

1719 Diag

(

Loc

, diag::warn_accessor_property_type_mismatch)

1720

<<

property

->getDeclName()

1735 bool

CollectClassPropsOnly =

false

,

1736 bool

IncludeProtocols =

true

) {

1738 for

(

auto

*Prop : IDecl->properties()) {

1739 if

(CollectClassPropsOnly && !Prop->isClassProperty())

1741

PropMap[std::make_pair(Prop->getIdentifier(), Prop->isClassProperty())] =

1746 for

(

auto

*Ext : IDecl->visible_extensions())

1748

CollectClassPropsOnly, IncludeProtocols);

1750 if

(IncludeProtocols) {

1752 for

(

auto

*PI : IDecl->all_referenced_protocols())

1754

CollectClassPropsOnly);

1758 for

(

auto

*Prop : CATDecl->properties()) {

1759 if

(CollectClassPropsOnly && !Prop->isClassProperty())

1761

PropMap[std::make_pair(Prop->getIdentifier(), Prop->isClassProperty())] =

1764 if

(IncludeProtocols) {

1766 for

(

auto

*PI : CATDecl->protocols())

1768

CollectClassPropsOnly);

1772 for

(

auto

*Prop : PDecl->properties()) {

1773 if

(CollectClassPropsOnly && !Prop->isClassProperty())

1776

SuperPropMap[std::make_pair(Prop->getIdentifier(),

1777

Prop->isClassProperty())];

1780 if

(!PropertyFromSuper ||

1781

PropertyFromSuper->

getIdentifier

() != Prop->getIdentifier()) {

1783

PropMap[std::make_pair(Prop->getIdentifier(),

1784

Prop->isClassProperty())];

1790 for

(

auto

*PI : PDecl->protocols())

1792

CollectClassPropsOnly);

1803

SDecl->collectPropertiesToImplement(PropMap);

1804

SDecl = SDecl->getSuperClass();

1827

(

Property

->getPropertyIvarDecl() == IV))

1833 for

(

const auto

*

Property

: Ext->instance_properties())

1836

(

Property

->getPropertyIvarDecl() == IV))

1843 bool

SuperClassImplementsGetter =

false

;

1844 bool

SuperClassImplementsSetter =

false

;

1846

SuperClassImplementsSetter =

true

;

1851

SuperClassImplementsGetter =

true

;

1854

SuperClassImplementsSetter =

true

;

1855 if

(SuperClassImplementsGetter && SuperClassImplementsSetter)

1870 if

(PropMap.empty())

1875 for

(

const auto

&PropEntry : PropMap) {

1887 if

(ImpMethod && !ImpMethod->

getBody

()) {

1891 if

(ImpMethod && !ImpMethod->

getBody

())

1896 Diag

(Prop->

getLocation

(), diag::warn_no_autosynthesis_shared_ivar_property)

1898 if

(PID->getLocation().isValid())

1899 Diag

(PID->getLocation(), diag::note_property_synthesize);

1913

diag::warn_auto_synthesizing_protocol_property)

1917

(Twine(

"@synthesize "

) + Prop->

getName

() +

";\n\n"

).str();

1918 Diag

(AtEnd, diag::note_add_synthesize_directive)

1924 if

(PropInSuperClass) {

1933 Diag

(PropInSuperClass->

getLocation

(), diag::note_property_declare);

1935 Diag

(Prop->

getLocation

(), diag::warn_autosynthesis_property_in_superclass)

1937 Diag

(PropInSuperClass->

getLocation

(), diag::note_property_declare);

1961 if

(!

getLangOpts

().ObjCDefaultSynthProperties ||

1968 if

(!IDecl->isObjCRequiresPropertyDefs())

1987 if

(I ==

SMap

.end() &&

1988

(PrimaryClass ==

nullptr

||

1992

isa<ObjCCategoryDecl>(CDecl)

1994

? diag::warn_impl_required_in_category_for_class_property

1995

: diag::warn_setter_getter_impl_required_in_category)

1997

? diag::warn_impl_required_for_class_property

1998

: diag::warn_setter_getter_impl_required);

2001 if

(S.

LangOpts

.ObjCDefaultSynthProperties &&

2005

S.

Diag

(RID->getLocation(), diag::note_suppressed_class_declare);

2011 bool

SynthesizeProperties) {

2025 if

((IDecl =

C

->getClassInterface())) {

2034

SynthesizeProperties

);

2040

std::unique_ptr<ObjCContainerDecl::PropertyMap> LazyMap;

2043 if

(!PDecl->hasAttr<ObjCExplicitProtocolImplAttr>())

2061 for

(

auto

*PropDecl : PDecl->properties()) {

2062 if

((*LazyMap)[std::make_pair(PropDecl->getIdentifier(),

2063

PropDecl->isClassProperty())])

2065

PropMap[std::make_pair(PropDecl->getIdentifier(),

2066

PropDecl->isClassProperty())] = PropDecl;

2071 if

(PropMap.empty())

2074

llvm::DenseSet<ObjCPropertyDecl *> PropImplMap;

2076

PropImplMap.insert(I->getPropertyDecl());

2080 for

(

const auto

*I : IMPDecl->

methods

())

2085 if

(

C

&& !

C

->IsClassExtension())

2086 if

((PrimaryClass =

C

->getClassInterface()))

2092 for

(

const auto

*I : IMP->methods())

2096 for

(ObjCContainerDecl::PropertyMap::iterator

2097 P

= PropMap.begin(),

E

= PropMap.end();

P

!=

E

; ++

P

) {

2102

PropImplMap.count(Prop) ||

2108

IMPDecl, CDecl,

C

, Prop, InsMap);

2119 const auto

*

property

= propertyImpl->getPropertyDecl();

2122 if

(propertyImpl->getPropertyImplementation() ==

2124

(property->getPropertyAttributes() &

2126

property->getGetterMethodDecl() && property->getSetterMethodDecl()) {

2127 auto

*getterImpl = propertyImpl->getGetterMethodDecl();

2128 auto

*setterImpl = propertyImpl->getSetterMethodDecl();

2129 if

((!getterImpl || getterImpl->isSynthesizedAccessorStub()) &&

2130

(!setterImpl || setterImpl->isSynthesizedAccessorStub())) {

2135 Diag

(loc, diag::warn_null_resettable_setter)

2136

<< setterImpl->getSelector() <<

property

->getDeclName();

2149

PM[std::make_pair(Prop->getIdentifier(), Prop->isClassProperty())] = Prop;

2151 for

(

auto

*Prop : Ext->properties())

2152

PM[std::make_pair(Prop->getIdentifier(), Prop->isClassProperty())] = Prop;

2154 for

(ObjCContainerDecl::PropertyMap::iterator I = PM.begin(),

E

= PM.end();

2160 unsigned

Attributes =

Property

->getPropertyAttributes();

2161 unsigned

AttributesAsWritten =

Property

->getPropertyAttributesAsWritten();

2165

GetterMethod =

Property

->isClassProperty() ?

2168

SetterMethod =

Property

->isClassProperty() ?

2172

GetterMethod =

nullptr

;

2174

SetterMethod =

nullptr

;

2177

diag::warn_default_atomic_custom_getter_setter)

2178

<<

Property

->getIdentifier() << 0;

2179 Diag

(

Property

->getLocation(), diag::note_property_declare);

2183

diag::warn_default_atomic_custom_getter_setter)

2184

<<

Property

->getIdentifier() << 1;

2185 Diag

(

Property

->getLocation(), diag::note_property_declare);

2197

GetterMethod = PIDecl->getGetterMethodDecl();

2198

SetterMethod = PIDecl->getSetterMethodDecl();

2200

GetterMethod =

nullptr

;

2202

SetterMethod =

nullptr

;

2203 if

((

bool

)GetterMethod ^ (

bool

)SetterMethod) {

2206

: SetterMethod->getLocation());

2207 Diag

(MethodLoc, diag::warn_atomic_property_rule)

2208

<<

Property

->getIdentifier() << (GetterMethod !=

nullptr

)

2209

<< (SetterMethod !=

nullptr

);

2211 if

(

Property

->getLParenLoc().isValid() &&

2216

StringRef NonatomicStr = AttributesAsWritten?

"nonatomic, " 2219

diag::note_atomic_property_fixup_suggest)

2221

}

else if

(

Property

->getLParenLoc().isInvalid()) {

2224 Property

->getTypeSourceInfo()->getTypeLoc().getBeginLoc();

2226

diag::note_atomic_property_fixup_suggest)

2229 Diag

(MethodLoc, diag::note_atomic_property_fixup_suggest);

2230 Diag

(

Property

->getLocation(), diag::note_property_declare);

2241 for

(

const auto

*PID :

D

->property_impls()) {

2243 if

(PD && !PD->

hasAttr

<NSReturnsNotRetainedAttr>() &&

2263 for

(

auto

*getterRedecl : method->

redecls

()) {

2264 if

(getterRedecl->isImplicit())

2268

noteLoc = getterRedecl->getLocation();

2269

fixItLoc = getterRedecl->getEndLoc();

2274

tok::kw___attribute, tok::l_paren, tok::l_paren,

2277

tok::r_paren, tok::r_paren

2279

StringRef spelling =

"__attribute__((objc_method_family(none)))"

;

2281 if

(!macroName.empty())

2282

spelling = macroName;

2284 auto

noteDiag =

Diag

(noteLoc, diag::note_cocoa_naming_declare_family)

2288

fixItText += spelling;

2305 if

(I->getMethodFamily() ==

OMF_init

)

2306

InitSelSet.insert(I->getSelector());

2311

I = DesignatedInits.begin(),

E

= DesignatedInits.end(); I !=

E

; ++I) {

2316 bool

Ignore =

false

;

2322 if

(

auto

*IMD = Ext->getInstanceMethod(MD->

getSelector

())) {

2323

Ignore = IMD->isUnavailable();

2329

diag::warn_objc_implementation_missing_designated_init_override)

2331 Diag

(MD->

getLocation

(), diag::note_objc_designated_init_marked_here);

2342 for

(

const auto

*A :

Property

->attrs()) {

2343 if

(isa<DeprecatedAttr>(A) ||

2344

isa<UnavailableAttr>(A) ||

2345

isa<AvailabilityAttr>(A))

2361 bool

IsClassProperty =

property

->isClassProperty();

2362

GetterMethod = IsClassProperty ?

2370 if

(CatDecl->IsClassExtension())

2373

CatDecl->getClassInterface()->

2376

SetterMethod = IsClassProperty ?

2381 if

(CatDecl->IsClassExtension())

2384

CatDecl->getClassInterface()->

2391 if

(!GetterMethod) {

2393 auto

*ExistingGetter = CatDecl->getClassInterface()->lookupMethod(

2394

property->

getGetterName

(), !IsClassProperty,

true

,

false

, CatDecl);

2395 if

(ExistingGetter) {

2397 Diag

(property->

getLocation

(), diag::err_objc_direct_duplicate_decl)

2398

<<

property

->isDirectProperty() << 1

2399

<< ExistingGetter->isDirectMethod()

2400

<< ExistingGetter->getDeclName();

2401 Diag

(ExistingGetter->getLocation(), diag::note_previous_declaration);

2407 if

(!property->

isReadOnly

() && !SetterMethod) {

2409 auto

*ExistingSetter = CatDecl->getClassInterface()->lookupMethod(

2410

property->

getSetterName

(), !IsClassProperty,

true

,

false

, CatDecl);

2411 if

(ExistingSetter) {

2413 Diag

(property->

getLocation

(), diag::err_objc_direct_duplicate_decl)

2414

<<

property

->isDirectProperty() << 1

2415

<< ExistingSetter->isDirectMethod()

2416

<< ExistingSetter->getDeclName();

2417 Diag

(ExistingSetter->getLocation(), diag::note_previous_declaration);

2423 if

(!property->

isReadOnly

() && SetterMethod) {

2429

(*SetterMethod->

param_begin

())->getType().getNonReferenceType(),

2432

diag::warn_accessor_property_type_mismatch)

2433

<<

property

->getDeclName()

2445 if

(!GetterMethod) {

2453 QualType

resultTy =

property

->getType().getAtomicUnqualifiedType();

2462

modifiedTy, modifiedTy);

2468

!IsClassProperty,

false

,

2479

GetterMethod->

addAttr

(ObjCDirectAttr::CreateImplicit(Context,

Loc

));

2481 if

(property->

hasAttr

<NSReturnsNotRetainedAttr>())

2482

GetterMethod->

addAttr

(NSReturnsNotRetainedAttr::CreateImplicit(Context,

2485 if

(property->

hasAttr

<ObjCReturnsInnerPointerAttr>())

2487

ObjCReturnsInnerPointerAttr::CreateImplicit(Context,

Loc

));

2489 if

(

const

SectionAttr *SA = property->

getAttr

<SectionAttr>())

2490

GetterMethod->

addAttr

(SectionAttr::CreateImplicit(

2491

Context, SA->getName(),

Loc

, SectionAttr::GNU_section));

2504 property

->setGetterMethodDecl(GetterMethod);

2509 if

(!SetterMethod) {

2518

CD, !IsClassProperty,

2530 property

->getType().getUnqualifiedType().getAtomicUnqualifiedType();

2540

modifiedTy, modifiedTy);

2558

SetterMethod->

addAttr

(ObjCDirectAttr::CreateImplicit(Context,

Loc

));

2561 if

(

const

SectionAttr *SA = property->

getAttr

<SectionAttr>())

2562

SetterMethod->

addAttr

(SectionAttr::CreateImplicit(

2563

Context, SA->getName(),

Loc

, SectionAttr::GNU_section));

2578 property

->setSetterMethodDecl(SetterMethod);

2592 if

(!IsClassProperty) {

2605 if

(!CurrentClass) {

2607

CurrentClass = Cat->getClassInterface();

2608 else if

(

ObjCImplDecl

*Impl = dyn_cast<ObjCImplDecl>(CD))

2609

CurrentClass = Impl->getClassInterface();

2618 unsigned

&Attributes,

2619 bool

propertyInPrimaryClass) {

2626 Diag

(

Loc

, diag::err_objc_property_attr_mutually_exclusive)

2627

<<

"readonly"

<<

"readwrite"

;

2638

!PropertyDecl->

hasAttr

<ObjCNSObjectAttr>()) {

2639 Diag

(

Loc

, diag::err_objc_property_requires_object)

2644

:

"retain (or strong)"

);

2657 Diag

(

Loc

, diag::warn_objc_property_assign_on_object);

2663 Diag

(

Loc

, diag::err_objc_property_attr_mutually_exclusive)

2664

<<

"assign"

<<

"copy"

;

2665

Attributes &= ~ObjCPropertyAttribute::kind_copy;

2668 Diag

(

Loc

, diag::err_objc_property_attr_mutually_exclusive)

2669

<<

"assign"

<<

"retain"

;

2670

Attributes &= ~ObjCPropertyAttribute::kind_retain;

2673 Diag

(

Loc

, diag::err_objc_property_attr_mutually_exclusive)

2674

<<

"assign"

<<

"strong"

;

2675

Attributes &= ~ObjCPropertyAttribute::kind_strong;

2679 Diag

(

Loc

, diag::err_objc_property_attr_mutually_exclusive)

2680

<<

"assign"

<<

"weak"

;

2681

Attributes &= ~ObjCPropertyAttribute::kind_weak;

2683 if

(PropertyDecl->

hasAttr

<IBOutletCollectionAttr>())

2684 Diag

(

Loc

, diag::warn_iboutletcollection_property_assign);

2687 Diag

(

Loc

, diag::err_objc_property_attr_mutually_exclusive)

2688

<<

"unsafe_unretained"

<<

"copy"

;

2689

Attributes &= ~ObjCPropertyAttribute::kind_copy;

2692 Diag

(

Loc

, diag::err_objc_property_attr_mutually_exclusive)

2693

<<

"unsafe_unretained"

<<

"retain"

;

2694

Attributes &= ~ObjCPropertyAttribute::kind_retain;

2697 Diag

(

Loc

, diag::err_objc_property_attr_mutually_exclusive)

2698

<<

"unsafe_unretained"

<<

"strong"

;

2699

Attributes &= ~ObjCPropertyAttribute::kind_strong;

2703 Diag

(

Loc

, diag::err_objc_property_attr_mutually_exclusive)

2704

<<

"unsafe_unretained"

<<

"weak"

;

2705

Attributes &= ~ObjCPropertyAttribute::kind_weak;

2709 Diag

(

Loc

, diag::err_objc_property_attr_mutually_exclusive)

2710

<<

"copy"

<<

"retain"

;

2711

Attributes &= ~ObjCPropertyAttribute::kind_retain;

2714 Diag

(

Loc

, diag::err_objc_property_attr_mutually_exclusive)

2715

<<

"copy"

<<

"strong"

;

2716

Attributes &= ~ObjCPropertyAttribute::kind_strong;

2719 Diag

(

Loc

, diag::err_objc_property_attr_mutually_exclusive)

2720

<<

"copy"

<<

"weak"

;

2721

Attributes &= ~ObjCPropertyAttribute::kind_weak;

2725 Diag

(

Loc

, diag::err_objc_property_attr_mutually_exclusive) <<

"retain" 2727

Attributes &= ~ObjCPropertyAttribute::kind_retain;

2730 Diag

(

Loc

, diag::err_objc_property_attr_mutually_exclusive) <<

"strong" 2732

Attributes &= ~ObjCPropertyAttribute::kind_weak;

2739 Diag

(

Loc

, diag::err_objc_property_attr_mutually_exclusive)

2740

<<

"nonnull"

<<

"weak"

;

2746 Diag

(

Loc

, diag::err_objc_property_attr_mutually_exclusive) <<

"atomic" 2748

Attributes &= ~ObjCPropertyAttribute::kind_atomic;

2767 else if

(propertyInPrimaryClass) {

2772 Diag

(

Loc

, diag::warn_objc_property_no_assignment_attribute);

2776 Diag

(

Loc

, diag::warn_objc_property_default_assign_on_object);

2788 Diag

(

Loc

, diag::warn_objc_property_copy_missing_on_block);

2793 Diag

(

Loc

, diag::warn_objc_property_retain_of_block);

2797 Diag

(

Loc

, diag::warn_objc_readonly_property_has_setter);

llvm::DenseMap< const Stmt *, CFGBlock * > SMap

enum clang::sema::@1704::IndirectLocalPathEntry::EntryKind Kind

Defines the clang::Expr interface and subclasses for C++ expressions.

static DiagnosticBuilder Diag(DiagnosticsEngine *Diags, const LangOptions &Features, FullSourceLoc TokLoc, const char *TokBegin, const char *TokRangeBegin, const char *TokRangeEnd, unsigned DiagID)

Produce a diagnostic highlighting some portion of a literal.

Defines the clang::Preprocessor interface.

static bool SuperClassImplementsProperty(ObjCInterfaceDecl *IDecl, ObjCPropertyDecl *Prop)

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

static Qualifiers::ObjCLifetime getImpliedARCOwnership(ObjCPropertyAttribute::Kind attrs, QualType type)

getImpliedARCOwnership - Given a set of property attributes and a type, infer an expected lifetime.

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

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

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

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

static void checkPropertyDeclWithOwnership(Sema &S, ObjCPropertyDecl *property)

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

static unsigned deducePropertyOwnershipFromType(Sema &S, QualType T)

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 pro...

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

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

static void setImpliedPropertyAttributeForReadOnlyProperty(ObjCPropertyDecl *property, ObjCIvarDecl *ivar)

setImpliedPropertyAttributeForReadOnlyProperty - This routine evaludates life-time attributes for a '...

static unsigned getOwnershipRule(unsigned attr)

static ObjCMethodDecl * RedeclarePropertyAccessor(ASTContext &Context, ObjCImplementationDecl *Impl, ObjCMethodDecl *AccessorDecl, SourceLocation AtLoc, SourceLocation PropertyLoc)

Create a synthesized property accessor stub inside the @implementation.

static bool hasWrittenStorageAttribute(ObjCPropertyDecl *Prop, ObjCPropertyQueryKind QueryKind)

Determine whether any storage attributes were written on the property.

static void CollectSuperClassPropertyImplementations(ObjCInterfaceDecl *CDecl, ObjCInterfaceDecl::PropertyMap &PropMap)

CollectSuperClassPropertyImplementations - This routine collects list of properties to be implemented...

static const unsigned OwnershipMask

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

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

SelectPropertyForSynthesisFromProtocols - Finds the most appropriate property declaration that should...

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.

static ObjCPropertyAttribute::Kind makePropertyAttributesAsWritten(unsigned Attributes)

static bool isIncompatiblePropertyAttribute(unsigned Attr1, unsigned Attr2, ObjCPropertyAttribute::Kind Kind)

This file declares semantic analysis for Objective-C.

Defines the SourceManager interface.

Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...

SourceManager & getSourceManager()

QualType getAttributedType(attr::Kind attrKind, QualType modifiedType, QualType equivalentType, const Attr *attr=nullptr) const

CanQualType getCanonicalType(QualType T) const

Return the canonical (structural) type corresponding to the specified potentially non-canonical type ...

bool hasSameType(QualType T1, QualType T2) const

Determine whether the given types T1 and T2 are equivalent.

bool propertyTypesAreCompatible(QualType, QualType)

bool canAssignObjCInterfaces(const ObjCObjectPointerType *LHSOPT, const ObjCObjectPointerType *RHSOPT)

canAssignObjCInterfaces - Return true if the two interface types are compatible for assignment from R...

const LangOptions & getLangOpts() const

TypeSourceInfo * getTrivialTypeSourceInfo(QualType T, SourceLocation Loc=SourceLocation()) const

Allocate a TypeSourceInfo where all locations have been initialized to a given location,...

QualType getQualifiedType(SplitQualType split) const

Un-split a SplitQualType.

QualType getObjCObjectPointerType(QualType OIT) const

Return a ObjCObjectPointerType type for the given ObjCObjectType.

bool hasSameUnqualifiedType(QualType T1, QualType T2) const

Determine whether the given types are equivalent after cvr-qualifiers have been removed.

QualType getObjCGCQualType(QualType T, Qualifiers::GC gcAttr) const

Return the uniqued reference to the type for an Objective-C gc-qualified type.

Attr - This represents one attribute.

static std::optional< NullabilityKind > stripOuterNullability(QualType &T)

Strip off the top-level nullability annotation on the given type, if it's there.

A call to an overloaded operator written using operator syntax.

CanQual< T > getUnqualifiedType() const

Retrieve the unqualified form of this type.

The results of name lookup within a DeclContext.

DeclContext - This is used only as base class of specific decl types that can act as declaration cont...

void makeDeclVisibleInContext(NamedDecl *D)

Makes a declaration visible within this context.

void addDecl(Decl *D)

Add the declaration D into this context.

A reference to a declared variable, function, enum, etc.

Decl - This represents one declaration (or definition), e.g.

SourceLocation getEndLoc() const LLVM_READONLY

bool isImplicit() const

isImplicit - Indicates whether the declaration was implicitly generated by the implementation.

void setAttrs(const AttrVec &Attrs)

bool isUnavailable(std::string *Message=nullptr) const

Determine whether this declaration is marked 'unavailable'.

AvailabilityResult getAvailability(std::string *Message=nullptr, VersionTuple EnclosingVersion=VersionTuple(), StringRef *RealizedPlatform=nullptr) const

Determine the availability of the given declaration.

void setInvalidDecl(bool Invalid=true)

setInvalidDecl - Indicates the Decl had a semantic error.

bool isInvalidDecl() const

SourceLocation getLocation() const

redecl_range redecls() const

Returns an iterator range for all the redeclarations of the same decl.

DeclContext * getDeclContext()

SourceLocation getBeginLoc() const LLVM_READONLY

void setLexicalDeclContext(DeclContext *DC)

SourceLocation getIdentifierLoc() const

void setObjCWeakProperty(bool Val=true)

const IdentifierInfo * getIdentifier() const

This represents one expression.

Represents difference between two FPOptions values.

static FixItHint CreateReplacement(CharSourceRange RemoveRange, StringRef Code)

Create a code modification hint that replaces the given source range with the given code string.

static FixItHint CreateInsertion(SourceLocation InsertionLoc, StringRef Code, bool BeforePreviousInsertions=false)

Create a code modification hint that inserts the given code string at a specific location.

Represents a function declaration or definition.

One of these records is kept for each identifier that is lexed.

IdentifierInfo & get(StringRef Name)

Return the identifier token info for the specified named identifier.

static ImplicitCastExpr * Create(const ASTContext &Context, QualType T, CastKind Kind, Expr *Operand, const CXXCastPath *BasePath, ExprValueKind Cat, FPOptionsOverride FPO)

static InitializedEntity InitializeResult(SourceLocation ReturnLoc, QualType Type)

Create the initialization entity for the result of a function.

clang::ObjCRuntime ObjCRuntime

Lexer - This provides a simple interface that turns a text buffer into a stream of tokens.

bool LexFromRawLexer(Token &Result)

LexFromRawLexer - Lex a token from a designated raw lexer (one with no associated preprocessor object...

IdentifierInfo * getIdentifier() const

Get the identifier that names this declaration, if there is one.

StringRef getName() const

Get the name of identifier for this declaration as a StringRef.

DeclarationName getDeclName() const

Get the actual, stored name of the declaration, which may be a special name.

ObjCCategoryDecl - Represents a category declaration.

ObjCInterfaceDecl * getClassInterface()

ObjCCategoryImplDecl - An object of this class encapsulates a category @implementation declaration.

ObjCContainerDecl - Represents a container for method declarations.

ObjCMethodDecl * getMethod(Selector Sel, bool isInstance, bool AllowHidden=false) const

method_range methods() const

llvm::MapVector< std::pair< IdentifierInfo *, unsigned >, ObjCPropertyDecl * > PropertyMap

instmeth_range instance_methods() const

llvm::SmallDenseSet< const ObjCProtocolDecl *, 8 > ProtocolPropertySet

ObjCPropertyDecl * getProperty(const IdentifierInfo *Id, bool IsInstance) const

instprop_range instance_properties() const

ObjCPropertyDecl * FindPropertyDeclaration(const IdentifierInfo *PropertyId, ObjCPropertyQueryKind QueryKind) const

FindPropertyDeclaration - Finds declaration of the property given its name in 'PropertyId' and return...

ObjCMethodDecl * getClassMethod(Selector Sel, bool AllowHidden=false) const

prop_range properties() const

ObjCMethodDecl * getInstanceMethod(Selector Sel, bool AllowHidden=false) const

bool HasUserDeclaredSetterMethod(const ObjCPropertyDecl *P) const

This routine returns 'true' if a user declared setter method was found in the class,...

Captures information about "declaration specifiers" specific to Objective-C.

ObjCPropertyAttribute::Kind getPropertyAttributes() const

SourceLocation getGetterNameLoc() const

SourceLocation getSetterNameLoc() const

void addPropertyImplementation(ObjCPropertyImplDecl *property)

propimpl_range property_impls() const

ObjCPropertyImplDecl * FindPropertyImplDecl(IdentifierInfo *propertyId, ObjCPropertyQueryKind queryKind) const

FindPropertyImplDecl - This method looks up a previous ObjCPropertyImplDecl added to the list of thos...

const ObjCInterfaceDecl * getClassInterface() const

ObjCPropertyImplDecl * FindPropertyImplIvarDecl(IdentifierInfo *ivarId) const

FindPropertyImplIvarDecl - This method lookup the ivar in the list of properties implemented in this ...

ObjCImplementationDecl - Represents a class definition - this is where method definitions are specifi...

Represents an ObjC class declaration.

ObjCPropertyDecl * FindPropertyVisibleInPrimaryClass(const IdentifierInfo *PropertyId, ObjCPropertyQueryKind QueryKind) const

FindPropertyVisibleInPrimaryClass - Finds declaration of the property with name 'PropertyId' in the p...

ObjCIvarDecl * lookupInstanceVariable(IdentifierInfo *IVarName, ObjCInterfaceDecl *&ClassDeclared)

all_protocol_range all_referenced_protocols() const

visible_extensions_range visible_extensions() const

ObjCCategoryDecl * FindCategoryDeclaration(const IdentifierInfo *CategoryId) const

FindCategoryDeclaration - Finds category declaration in the list of categories for this class and ret...

protocol_range protocols() const

const ObjCInterfaceDecl * isObjCRequiresPropertyDefs() const

isObjCRequiresPropertyDefs - Checks that a class or one of its super classes must not be auto-synthes...

ObjCMethodDecl * lookupPropertyAccessor(const Selector Sel, const ObjCCategoryDecl *Cat, bool IsClassProperty) const

Lookup a setter or getter in the class hierarchy, including in all categories except for category pas...

ObjCMethodDecl * lookupMethod(Selector Sel, bool isInstance, bool shallowCategoryLookup=false, bool followSuper=true, const ObjCCategoryDecl *C=nullptr) const

lookupMethod - This method returns an instance/class method by looking in the class,...

bool ClassImplementsProtocol(ObjCProtocolDecl *lProto, bool lookupCategory, bool RHSIsQualifiedID=false)

ClassImplementsProtocol - Checks that 'lProto' protocol has been implemented in IDecl class,...

ObjCImplementationDecl * getImplementation() const

bool hasDesignatedInitializers() const

Returns true if this interface decl contains at least one initializer marked with the 'objc_designate...

void getDesignatedInitializers(llvm::SmallVectorImpl< const ObjCMethodDecl * > &Methods) const

Returns the designated initializers for the interface.

void collectPropertiesToImplement(PropertyMap &PM) const override

This routine collects list of properties to be implemented in the class.

bool isArcWeakrefUnavailable() const

isArcWeakrefUnavailable - Checks for a class or one of its super classes to be incompatible with __we...

ObjCInterfaceDecl * getSuperClass() const

known_extensions_range known_extensions() const

ObjCIvarDecl - Represents an ObjC instance variable.

AccessControl getAccessControl() const

bool getSynthesize() const

static ObjCIvarDecl * Create(ASTContext &C, ObjCContainerDecl *DC, SourceLocation StartLoc, SourceLocation IdLoc, const IdentifierInfo *Id, QualType T, TypeSourceInfo *TInfo, AccessControl ac, Expr *BW=nullptr, bool synthesized=false)

QualType getUsageType(QualType objectType) const

Retrieve the type of this instance variable when viewed as a member of a specific object type.

ObjCIvarRefExpr - A reference to an ObjC instance variable.

ObjCMethodDecl - Represents an instance or class method declaration.

void setDefined(bool isDefined)

unsigned param_size() const

void setSelfDecl(ImplicitParamDecl *SD)

bool isPropertyAccessor() const

static ObjCMethodDecl * Create(ASTContext &C, SourceLocation beginLoc, SourceLocation endLoc, Selector SelInfo, QualType T, TypeSourceInfo *ReturnTInfo, DeclContext *contextDecl, bool isInstance=true, bool isVariadic=false, bool isPropertyAccessor=false, bool isSynthesizedAccessorStub=false, bool isImplicitlyDeclared=false, bool isDefined=false, ObjCImplementationControl impControl=ObjCImplementationControl::None, bool HasRelatedResultType=false)

param_const_iterator param_begin() const

void setCmdDecl(ImplicitParamDecl *CD)

Stmt * getBody() const override

Retrieve the body of this method, if it has one.

void setMethodParams(ASTContext &C, ArrayRef< ParmVarDecl * > Params, ArrayRef< SourceLocation > SelLocs={})

Sets the method's parameters and selector source locations.

bool isSynthesizedAccessorStub() const

void setPropertyAccessor(bool isAccessor)

Selector getSelector() const

bool isInstanceMethod() const

ObjCMethodFamily getMethodFamily() const

Determines the family of this method.

void createImplicitParams(ASTContext &Context, const ObjCInterfaceDecl *ID)

createImplicitParams - Used to lazily create the self and cmd implicit parameters.

QualType getReturnType() const

ParmVarDecl *const * param_iterator

bool isClassMethod() const

ObjCInterfaceDecl * getClassInterface()

Represents a pointer to an Objective C object.

Represents one property declaration in an Objective-C interface.

ObjCPropertyQueryKind getQueryKind() const

bool isClassProperty() const

void setPropertyImplementation(PropertyControl pc)

void setSetterName(Selector Sel, SourceLocation Loc=SourceLocation())

ObjCMethodDecl * getGetterMethodDecl() const

bool isInstanceProperty() const

void setPropertyAttributes(ObjCPropertyAttribute::Kind PRVal)

bool isReadOnly() const

isReadOnly - Return true iff the property has a setter.

static ObjCPropertyDecl * findPropertyDecl(const DeclContext *DC, const IdentifierInfo *propertyID, ObjCPropertyQueryKind queryKind)

Lookup a property by name in the specified DeclContext.

bool isDirectProperty() const

Selector getSetterName() const

void setPropertyAttributesAsWritten(ObjCPropertyAttribute::Kind PRVal)

void overwritePropertyAttributes(unsigned PRVal)

Selector getGetterName() const

ObjCPropertyAttribute::Kind getPropertyAttributesAsWritten() const

IdentifierInfo * getDefaultSynthIvarName(ASTContext &Ctx) const

Get the default name of the synthesized ivar.

ObjCPropertyAttribute::Kind getPropertyAttributes() const

static ObjCPropertyDecl * Create(ASTContext &C, DeclContext *DC, SourceLocation L, const IdentifierInfo *Id, SourceLocation AtLocation, SourceLocation LParenLocation, QualType T, TypeSourceInfo *TSI, PropertyControl propControl=None)

void setGetterName(Selector Sel, SourceLocation Loc=SourceLocation())

PropertyControl getPropertyImplementation() const

ObjCPropertyImplDecl - Represents implementation declaration of a property in a class or category imp...

Kind getPropertyImplementation() const

void setSetterMethodDecl(ObjCMethodDecl *MD)

ObjCPropertyDecl * getPropertyDecl() const

void setSetterCXXAssignment(Expr *setterCXXAssignment)

static ObjCPropertyImplDecl * Create(ASTContext &C, DeclContext *DC, SourceLocation atLoc, SourceLocation L, ObjCPropertyDecl *property, Kind PK, ObjCIvarDecl *ivarDecl, SourceLocation ivarLoc)

void setGetterMethodDecl(ObjCMethodDecl *MD)

void setGetterCXXConstructor(Expr *getterCXXConstructor)

Represents an Objective-C protocol declaration.

ObjCProtocolDecl * getDefinition()

Retrieve the definition of this protocol, if any.

protocol_range protocols() const

The basic abstraction for the target Objective-C runtime.

bool isNonFragile() const

Does this runtime follow the set of implied behaviors for a "non-fragile" ABI?

bool allowsDirectDispatch() const

Does this runtime supports direct dispatch.

bool isFragile() const

The inverse of isNonFragile(): does this runtime follow the set of implied behaviors for a "fragile" ...

Represents a parameter to a function.

static ParmVarDecl * Create(ASTContext &C, DeclContext *DC, SourceLocation StartLoc, SourceLocation IdLoc, const IdentifierInfo *Id, QualType T, TypeSourceInfo *TInfo, StorageClass S, Expr *DefArg)

Engages in a tight little dance with the lexer to efficiently preprocess tokens.

IdentifierInfo * getIdentifierInfo(StringRef Name) const

Return information about the specified preprocessor identifier token.

StringRef getLastMacroWithSpelling(SourceLocation Loc, ArrayRef< TokenValue > Tokens) const

Return the name of the macro defined before Loc that has spelling Tokens.

A (possibly-)qualified type.

Qualifiers::ObjCLifetime getObjCLifetime() const

Returns lifetime attribute of this type.

QualType getNonReferenceType() const

If Type is a reference type (e.g., const int&), returns the type that the reference refers to ("const...

SplitQualType split() const

Divides a QualType into its unqualified type and a set of local qualifiers.

bool isObjCGCStrong() const

true when Type is objc's strong.

bool isObjCGCWeak() const

true when Type is objc's weak.

The collection of all-type qualifiers we support.

@ OCL_Strong

Assigning into this object requires the old value to be released and the new value to be retained.

@ OCL_ExplicitNone

This object can be modified without requiring retains or releases.

@ OCL_None

There is no lifetime qualification on this type.

@ OCL_Weak

Reading or writing from this object requires a barrier call.

@ OCL_Autoreleasing

Assigning into this object requires a lifetime extension.

bool hasObjCLifetime() const

void addObjCLifetime(ObjCLifetime type)

void setObjCLifetime(ObjCLifetime type)

bool hasFlexibleArrayMember() const

A helper class that allows the use of isa/cast/dyncast to detect TagType objects of structs/unions/cl...

RecordDecl * getDecl() const

Scope - A scope is a transient data structure that is used while parsing the program.

Smart pointer class that efficiently represents Objective-C method names.

SemaDiagnosticBuilder Diag(SourceLocation Loc, unsigned DiagID, bool DeferHint=false)

Emit a diagnostic.

ASTContext & getASTContext() const

const LangOptions & getLangOpts() const

void DefaultSynthesizeProperties(Scope *S, ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl, SourceLocation AtEnd)

DefaultSynthesizeProperties - This routine default synthesizes all properties which must be synthesiz...

bool DiagnosePropertyAccessorMismatch(ObjCPropertyDecl *PD, ObjCMethodDecl *Getter, SourceLocation Loc)

void ProcessPropertyDecl(ObjCPropertyDecl *property)

Process the specified property declaration and create decls for the setters and getters as needed.

ObjCPropertyDecl * HandlePropertyInClassExtension(Scope *S, SourceLocation AtLoc, SourceLocation LParenLoc, FieldDeclarator &FD, Selector GetterSel, SourceLocation GetterNameLoc, Selector SetterSel, SourceLocation SetterNameLoc, const bool isReadWrite, unsigned &Attributes, const unsigned AttributesAsWritten, QualType T, TypeSourceInfo *TSI, tok::ObjCKeywordKind MethodImplKind)

Called by ActOnProperty to handle @property declarations in class extensions.

void diagnoseNullResettableSynthesizedSetters(const ObjCImplDecl *impDecl)

Diagnose any null-resettable synthesized setters.

ObjCPropertyDecl * CreatePropertyDecl(Scope *S, ObjCContainerDecl *CDecl, SourceLocation AtLoc, SourceLocation LParenLoc, FieldDeclarator &FD, Selector GetterSel, SourceLocation GetterNameLoc, Selector SetterSel, SourceLocation SetterNameLoc, const bool isReadWrite, const unsigned Attributes, const unsigned AttributesAsWritten, QualType T, TypeSourceInfo *TSI, tok::ObjCKeywordKind MethodImplKind, DeclContext *lexicalDC=nullptr)

Called by ActOnProperty and HandlePropertyInClassExtension to handle creating the ObjcPropertyDecl fo...

bool CheckARCMethodDecl(ObjCMethodDecl *method)

Check a method declaration for compatibility with the Objective-C ARC conventions.

bool IvarBacksCurrentMethodAccessor(ObjCInterfaceDecl *IFace, ObjCMethodDecl *Method, ObjCIvarDecl *IV)

IvarBacksCurrentMethodAccessor - This routine returns 'true' if 'IV' is an ivar synthesized for 'Meth...

void DiagnoseOwningPropertyGetterSynthesis(const ObjCImplementationDecl *D)

Decl * ActOnProperty(Scope *S, SourceLocation AtLoc, SourceLocation LParenLoc, FieldDeclarator &FD, ObjCDeclSpec &ODS, Selector GetterSel, Selector SetterSel, tok::ObjCKeywordKind MethodImplKind, DeclContext *lexicalDC=nullptr)

void DiagnoseUnimplementedProperties(Scope *S, ObjCImplDecl *IMPDecl, ObjCContainerDecl *CDecl, bool SynthesizeProperties)

DiagnoseUnimplementedProperties - This routine warns on those properties which must be implemented by...

void AtomicPropertySetterGetterRules(ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl)

AtomicPropertySetterGetterRules - This routine enforces the rule (via warning) when atomic property h...

Decl * ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool ImplKind, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind)

ActOnPropertyImplDecl - This routine performs semantic checks and builds the AST node for a property ...

void DiagnoseMissingDesignatedInitOverrides(const ObjCImplementationDecl *ImplD, const ObjCInterfaceDecl *IFD)

ObjCProtocolDecl * LookupProtocol(IdentifierInfo *II, SourceLocation IdLoc, RedeclarationKind Redecl=RedeclarationKind::NotForRedeclaration)

Find the protocol with the given name, if any.

void CheckObjCPropertyAttributes(Decl *PropertyPtrTy, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass)

Ensure attributes are consistent with type.

void AddFactoryMethodToGlobalPool(ObjCMethodDecl *Method, bool impl=false)

AddFactoryMethodToGlobalPool - Same as above, but for factory methods.

void DiagnosePropertyMismatch(ObjCPropertyDecl *Property, ObjCPropertyDecl *SuperProperty, const IdentifierInfo *Name, bool OverridingProtocolProperty)

DiagnosePropertyMismatch - Compares two properties for their attributes and types and warns on a vari...

void CheckObjCMethodOverrides(ObjCMethodDecl *ObjCMethod, ObjCInterfaceDecl *CurrentClass, ResultTypeCompatibilityKind RTC)

void AddInstanceMethodToGlobalPool(ObjCMethodDecl *Method, bool impl=false)

AddInstanceMethodToGlobalPool - All instance methods in a translation unit are added to a global pool...

RAII object to handle the state changes required to synthesize a function body.

Sema - This implements semantic analysis and AST building for C.

Preprocessor & getPreprocessor() const

bool isObjCPointerConversion(QualType FromType, QualType ToType, QualType &ConvertedType, bool &IncompatibleObjC)

isObjCPointerConversion - Determines whether this is an Objective-C pointer conversion.

SourceLocation getLocForEndOfToken(SourceLocation Loc, unsigned Offset=0)

Calls Lexer::getLocForEndOfToken()

const LangOptions & getLangOpts() const

bool RequireNonAbstractType(SourceLocation Loc, QualType T, TypeDiagnoser &Diagnoser)

const LangOptions & LangOpts

DeclContext * CurContext

CurContext - This is the current declaration context of parsing.

void ActOnDocumentableDecl(Decl *D)

Should be called on all declarations that might have attached documentation comments.

@ Compatible

Compatible - the types are compatible according to the standard.

void MarkDeclRefReferenced(DeclRefExpr *E, const Expr *Base=nullptr)

Perform reference-marking and odr-use handling for a DeclRefExpr.

TypeSourceInfo * GetTypeForDeclarator(Declarator &D)

GetTypeForDeclarator - Convert the type for the specified declarator to Type instances.

bool RequireCompleteType(SourceLocation Loc, QualType T, CompleteTypeKind Kind, TypeDiagnoser &Diagnoser)

Ensure that the type T is a complete type.

Expr * MaybeCreateExprWithCleanups(Expr *SubExpr)

MaybeCreateExprWithCleanups - If the current full-expression requires any cleanups,...

ExprResult PerformCopyInitialization(const InitializedEntity &Entity, SourceLocation EqualLoc, ExprResult Init, bool TopLevelOfInitList=false, bool AllowExplicit=false)

void ProcessDeclAttributes(Scope *S, Decl *D, const Declarator &PD)

ProcessDeclAttributes - Given a declarator (PD) with attributes indicated in it, apply them to D.

ExprResult BuildBinOp(Scope *S, SourceLocation OpLoc, BinaryOperatorKind Opc, Expr *LHSExpr, Expr *RHSExpr)

@ AbstractSynthesizedIvarType

void ProcessAPINotes(Decl *D)

Map any API notes provided for this declaration to attributes on the declaration.

AssignConvertType CheckAssignmentConstraints(SourceLocation Loc, QualType LHSType, QualType RHSType)

CheckAssignmentConstraints - Perform type checking for assignment, argument passing,...

Encodes a location in the source.

bool isValid() const

Return true if this is a valid SourceLocation object.

SourceLocation getLocWithOffset(IntTy Offset) const

Return a source location with the specified offset from this SourceLocation.

This class handles loading and caching of source files into memory.

A trivial tuple used to represent a source range.

Stores token information for comparing actual tokens with predefined values.

Token - This structure provides full information about a lexed token.

SourceLocation getLocation() const

Return a source location identifier for the specified offset in the current file.

bool is(tok::TokenKind K) const

is/isNot - Predicates to check if this token is a specific kind, as in "if (Tok.is(tok::l_brace)) {....

bool isNot(tok::TokenKind K) const

StringRef getRawIdentifier() const

getRawIdentifier - For a raw identifier token (i.e., an identifier lexed in raw mode),...

SourceLocation getEndLoc() const

Get the end source location.

SourceLocation getBeginLoc() const

Get the begin source location.

A container of type source information.

TypeLoc getTypeLoc() const

Return the TypeLoc wrapper for the type source info.

QualType getType() const

Return the type wrapped by this type source info.

bool isBlockPointerType() const

bool isArithmeticType() const

const T * castAs() const

Member-template castAs<specific type>.

bool isObjCObjectType() const

bool isFunctionType() const

bool isObjCObjectPointerType() const

bool isObjCQualifiedClassType() const

bool isObjCClassType() const

const T * getAs() const

Member-template getAs<specific type>'.

bool isObjCARCImplicitlyUnretainedType() const

Determines if this type, which must satisfy isObjCLifetimeType(), is implicitly __unsafe_unretained r...

bool isRecordType() const

bool isObjCRetainableType() const

std::optional< NullabilityKind > getNullability() const

Determine the nullability of the given type.

void setType(QualType newType)

@ kind_nullability

Indicates that the nullability of the type was spelled with a property attribute rather than a type q...

const internal::VariadicAllOfMatcher< Attr > attr

Matches attributes.

const internal::VariadicDynCastAllOfMatcher< Stmt, CallExpr > callExpr

Matches call expressions.

const internal::VariadicAllOfMatcher< Type > type

Matches Types in the clang AST.

ObjCKeywordKind

Provides a namespace for Objective-C keywords which start with an '@'.

The JSON file list parser is used to communicate input to InstallAPI.

@ Nullable

Values of this type can be null.

@ Unspecified

Whether values of this type can be null is (explicitly) unspecified.

@ NonNull

Values of this type can never be null.

ObjCMethodFamily

A family of Objective-C methods.

@ Property

The type of a property.

@ VK_PRValue

A pr-value expression (in the C++11 taxonomy) produces a temporary value.

@ VK_LValue

An l-value expression is a reference to an object with independent storage.

const FunctionProtoType * T

bool declaresSameEntity(const Decl *D1, const Decl *D2)

Determine whether two declarations declare the same entity.

This little struct is used to capture information about structure field declarators,...

A std::pair-like structure for storing a qualified type split into its local qualifiers and its local...

Qualifiers Quals

The local qualifiers.


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4