summaryrefslogtreecommitdiff
path: root/src/shared/cplusplus
diff options
context:
space:
mode:
authorErik Verbruggen <erik.verbruggen@nokia.com>2010-05-26 13:49:06 +0200
committerErik Verbruggen <erik.verbruggen@nokia.com>2010-05-26 13:49:06 +0200
commit51fbf9695ccb07e853c04ac77d31926ada2afaa2 (patch)
tree18be1e094a77338fa6dd4054a1d060530b49df93 /src/shared/cplusplus
parent9e89f36cd93633c02f7767a589921bc7c4da8e23 (diff)
downloadqt-creator-51fbf9695ccb07e853c04ac77d31926ada2afaa2.tar.gz
Added support for the GCC "unavailable" attribute.
Diffstat (limited to 'src/shared/cplusplus')
-rw-r--r--src/shared/cplusplus/CheckSpecifier.cpp6
-rw-r--r--src/shared/cplusplus/Control.cpp5
-rw-r--r--src/shared/cplusplus/Control.h1
-rw-r--r--src/shared/cplusplus/FullySpecifiedType.cpp7
-rw-r--r--src/shared/cplusplus/FullySpecifiedType.h4
5 files changed, 22 insertions, 1 deletions
diff --git a/src/shared/cplusplus/CheckSpecifier.cpp b/src/shared/cplusplus/CheckSpecifier.cpp
index f2c60c57de..183962f66d 100644
--- a/src/shared/cplusplus/CheckSpecifier.cpp
+++ b/src/shared/cplusplus/CheckSpecifier.cpp
@@ -439,8 +439,12 @@ bool CheckSpecifier::visit(TypeofSpecifierAST *ast)
bool CheckSpecifier::visit(AttributeAST *ast)
{
if (ast->identifier_token) {
- if (identifier(ast->identifier_token) == control()->deprecatedId())
+ const Identifier *id = identifier(ast->identifier_token);
+
+ if (id == control()->deprecatedId())
_fullySpecifiedType.setDeprecated(true);
+ else if (id == control()->unavailableId())
+ _fullySpecifiedType.setUnavailable(true);
}
return false;
}
diff --git a/src/shared/cplusplus/Control.cpp b/src/shared/cplusplus/Control.cpp
index a456bcc209..14c07a0f25 100644
--- a/src/shared/cplusplus/Control.cpp
+++ b/src/shared/cplusplus/Control.cpp
@@ -516,6 +516,7 @@ public:
std::vector<Symbol *> symbols;
const Identifier *deprecatedId;
+ const Identifier *unavailableId;
// ObjC context keywords:
const Identifier *objcGetterId;
const Identifier *objcSetterId;
@@ -532,6 +533,7 @@ Control::Control()
d = new Data(this);
d->deprecatedId = findOrInsertIdentifier("deprecated");
+ d->unavailableId = findOrInsertIdentifier("unavailable");
d->objcGetterId = findOrInsertIdentifier("getter");
d->objcSetterId = findOrInsertIdentifier("setter");
@@ -736,6 +738,9 @@ ObjCPropertyDeclaration *Control::newObjCPropertyDeclaration(unsigned sourceLoca
const Identifier *Control::deprecatedId() const
{ return d->deprecatedId; }
+const Identifier *Control::unavailableId() const
+{ return d->unavailableId; }
+
const Identifier *Control::objcGetterId() const
{ return d->objcGetterId; }
diff --git a/src/shared/cplusplus/Control.h b/src/shared/cplusplus/Control.h
index d46c7093ae..187dc10a0e 100644
--- a/src/shared/cplusplus/Control.h
+++ b/src/shared/cplusplus/Control.h
@@ -177,6 +177,7 @@ public:
ObjCPropertyDeclaration *newObjCPropertyDeclaration(unsigned sourceLocation, const Name *name);
const Identifier *deprecatedId() const;
+ const Identifier *unavailableId() const;
// Objective-C specific context keywords.
const Identifier *objcGetterId() const;
const Identifier *objcSetterId() const;
diff --git a/src/shared/cplusplus/FullySpecifiedType.cpp b/src/shared/cplusplus/FullySpecifiedType.cpp
index ac49493b50..da6c16a54a 100644
--- a/src/shared/cplusplus/FullySpecifiedType.cpp
+++ b/src/shared/cplusplus/FullySpecifiedType.cpp
@@ -87,6 +87,7 @@ FullySpecifiedType FullySpecifiedType::qualifiedType() const
ty.setExplicit(false);
ty.setDeprecated(false);
+ ty.setUnavailable(false);
return ty;
}
@@ -180,6 +181,12 @@ bool FullySpecifiedType::isDeprecated() const
void FullySpecifiedType::setDeprecated(bool isDeprecated)
{ f._isDeprecated = isDeprecated; }
+bool FullySpecifiedType::isUnavailable() const
+{ return f._isUnavailable; }
+
+void FullySpecifiedType::setUnavailable(bool isUnavailable)
+{ f._isUnavailable = isUnavailable; }
+
bool FullySpecifiedType::isEqualTo(const FullySpecifiedType &other) const
{
if (_flags != other._flags)
diff --git a/src/shared/cplusplus/FullySpecifiedType.h b/src/shared/cplusplus/FullySpecifiedType.h
index df882542dc..7905df162d 100644
--- a/src/shared/cplusplus/FullySpecifiedType.h
+++ b/src/shared/cplusplus/FullySpecifiedType.h
@@ -113,6 +113,9 @@ public:
bool isDeprecated() const;
void setDeprecated(bool isDeprecated);
+ bool isUnavailable() const;
+ void setUnavailable(bool isUnavailable);
+
bool isEqualTo(const FullySpecifiedType &other) const;
Type &operator*();
@@ -158,6 +161,7 @@ private:
// speficiers from attributes
unsigned _isDeprecated: 1;
+ unsigned _isUnavailable: 1;
};
union {
unsigned _flags;