From 56f755efe8f5c367b284347c73b9221ca0160de1 Mon Sep 17 00:00:00 2001 From: Erik Verbruggen <erik.verbruggen@nokia.com> Date: Tue, 20 Oct 2009 12:47:54 +0200 Subject: [PATCH] Changed ObjC context keyword comparison to use identifiers. --- src/shared/cplusplus/CheckDeclaration.cpp | 18 +++++----- src/shared/cplusplus/Control.cpp | 43 ++++++++++++++++++++++- src/shared/cplusplus/Control.h | 10 ++++++ 3 files changed, 61 insertions(+), 10 deletions(-) diff --git a/src/shared/cplusplus/CheckDeclaration.cpp b/src/shared/cplusplus/CheckDeclaration.cpp index 5a0142f384b..6a81784360a 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 908bded1340..fee0ee3d942 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 615eab38f89..d4db273e431 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); -- GitLab