diff --git a/src/shared/cplusplus/CheckDeclaration.cpp b/src/shared/cplusplus/CheckDeclaration.cpp index 5a0142f384b6a7c3bb525186d6fe88b5659182d4..6a81784360a2f59bb6eeeea9b38d0e7f9529d3bd 100644 --- a/src/shared/cplusplus/CheckDeclaration.cpp +++ b/src/shared/cplusplus/CheckDeclaration.cpp @@ -700,26 +700,26 @@ bool CheckDeclaration::visit(ObjCPropertyDeclarationAST *ast) if (!attrAst) continue; - const char *attrName = spell(attrAst->attribute_identifier_token); - if (!strcmp("getter", attrName)) { + Identifier *attrId = identifier(attrAst->attribute_identifier_token); + if (attrId == control()->objcGetterId()) { if (checkPropertyAttribute(attrAst, propAttrs, Getter)) { // TODO: find method declaration for getter } - } else if (!strcmp("setter", attrName)) { + } else if (attrId == control()->objcSetterId()) { if (checkPropertyAttribute(attrAst, propAttrs, Setter)) { // TODO: find method declaration for setter } - } else if (!strcmp("readwrite", attrName)) { + } else if (attrId == control()->objcReadwriteId()) { checkPropertyAttribute(attrAst, propAttrs, ReadWrite); - } else if (!strcmp("readonly", attrName)) { + } else if (attrId == control()->objcReadonlyId()) { checkPropertyAttribute(attrAst, propAttrs, ReadOnly); - } else if (!strcmp("assign", attrName)) { + } else if (attrId == control()->objcAssignId()) { checkPropertyAttribute(attrAst, propAttrs, Assign); - } else if (!strcmp("retain", attrName)) { + } else if (attrId == control()->objcRetainId()) { checkPropertyAttribute(attrAst, propAttrs, Retain); - } else if (!strcmp("copy", attrName)) { + } else if (attrId == control()->objcCopyId()) { checkPropertyAttribute(attrAst, propAttrs, Copy); - } else if (!strcmp("nonatomic", attrName)) { + } else if (attrId == control()->objcNonatomicId()) { checkPropertyAttribute(attrAst, propAttrs, NonAtomic); } } diff --git a/src/shared/cplusplus/Control.cpp b/src/shared/cplusplus/Control.cpp index 908bded13401914914639d4021e4fc6eee348530..fee0ee3d94200b88ce66f3f65e4312191659d28d 100644 --- a/src/shared/cplusplus/Control.cpp +++ b/src/shared/cplusplus/Control.cpp @@ -89,7 +89,16 @@ public: : control(control), translationUnit(0), diagnosticClient(0) - { } + { + objcGetterId = control->findOrInsertIdentifier("getter"); + objcSetterId = control->findOrInsertIdentifier("setter"); + objcReadwriteId = control->findOrInsertIdentifier("readwrite"); + objcReadonlyId = control->findOrInsertIdentifier("readonly"); + objcAssignId = control->findOrInsertIdentifier("assign"); + objcRetainId = control->findOrInsertIdentifier("retain"); + objcCopyId = control->findOrInsertIdentifier("copy"); + objcNonatomicId = control->findOrInsertIdentifier("nonatomic"); + } ~Data() { @@ -577,6 +586,16 @@ public: std::vector<ObjCForwardClassDeclaration *> objcForwardClassDeclarations; std::vector<ObjCForwardProtocolDeclaration *> objcForwardProtocolDeclarations; std::vector<ObjCMethod *> objcMethods; + + // ObjC context keywords: + Identifier *objcGetterId; + Identifier *objcSetterId; + Identifier *objcReadwriteId; + Identifier *objcReadonlyId; + Identifier *objcAssignId; + Identifier *objcRetainId; + Identifier *objcCopyId; + Identifier *objcNonatomicId; }; Control::Control() @@ -766,4 +785,26 @@ ObjCForwardProtocolDeclaration *Control::newObjCForwardProtocolDeclaration(unsig ObjCMethod *Control::newObjCMethod(unsigned sourceLocation, Name *name) { return d->newObjCMethod(sourceLocation, name); } +Identifier *Control::objcGetterId() const +{ return d->objcGetterId; } + +Identifier *Control::objcSetterId() const +{ return d->objcSetterId; } + +Identifier *Control::objcReadwriteId() const +{ return d->objcReadwriteId; } + +Identifier *Control::objcReadonlyId() const +{ return d->objcReadonlyId; } + +Identifier *Control::objcAssignId() const +{ return d->objcAssignId; } + +Identifier *Control::objcRetainId() const +{ return d->objcRetainId; } + +Identifier *Control::objcCopyId() const +{ return d->objcCopyId; } +Identifier *Control::objcNonatomicId() const +{ return d->objcNonatomicId; } diff --git a/src/shared/cplusplus/Control.h b/src/shared/cplusplus/Control.h index 615eab38f891525824da4d5efaf20ca4c4ba29c9..d4db273e4310de975ceff295e2cf18a20a51d7d2 100644 --- a/src/shared/cplusplus/Control.h +++ b/src/shared/cplusplus/Control.h @@ -169,6 +169,16 @@ public: /// Creates a new Objective-C method symbol. ObjCMethod *newObjCMethod(unsigned sourceLocation, Name *name = 0); + // Objective-C specific context keywords. + Identifier *objcGetterId() const; + Identifier *objcSetterId() const; + Identifier *objcReadwriteId() const; + Identifier *objcReadonlyId() const; + Identifier *objcAssignId() const; + Identifier *objcRetainId() const; + Identifier *objcCopyId() const; + Identifier *objcNonatomicId() const; + Identifier *findIdentifier(const char *chars, unsigned size) const; Identifier *findOrInsertIdentifier(const char *chars, unsigned size);