summaryrefslogtreecommitdiff
path: root/src/shared/cplusplus/CheckDeclaration.cpp
diff options
context:
space:
mode:
authorRoberto Raggi <roberto.raggi@nokia.com>2010-07-12 13:41:54 +0200
committerRoberto Raggi <roberto.raggi@nokia.com>2010-07-12 15:10:00 +0200
commitadfdb51660f3d4251101283efa46b6617cbe43d4 (patch)
tree7c06bc81efca2349820b3f2e69c3d30da34f2df8 /src/shared/cplusplus/CheckDeclaration.cpp
parent94264617bfdda8fbfc31921dc9ba49ffff84eaeb (diff)
downloadqt-creator-adfdb51660f3d4251101283efa46b6617cbe43d4.tar.gz
Recursive definition of CPlusPlus::QualifiedNameId.
Done-with: Erik Verbruggen
Diffstat (limited to 'src/shared/cplusplus/CheckDeclaration.cpp')
-rw-r--r--src/shared/cplusplus/CheckDeclaration.cpp46
1 files changed, 21 insertions, 25 deletions
diff --git a/src/shared/cplusplus/CheckDeclaration.cpp b/src/shared/cplusplus/CheckDeclaration.cpp
index d38aa0eeee..f320296d28 100644
--- a/src/shared/cplusplus/CheckDeclaration.cpp
+++ b/src/shared/cplusplus/CheckDeclaration.cpp
@@ -870,35 +870,31 @@ bool CheckDeclaration::visit(QtPropertyDeclarationAST *ast)
return false;
}
-void CheckDeclaration::checkQEnumsQFlagsNames(NameListAST *nameListAst,
- const char *declName)
+static bool checkEnumName(const Name *name)
{
- for (NameListAST *iter = nameListAst; iter; iter = iter->next) {
+ if (! name)
+ return false;
- const Name *name = semantic()->check(iter->value, _scope);
- if (!name)
- continue;
+ else if (name->asNameId() != 0)
+ return true;
- if (name->isNameId())
- continue;
+ else if (const QualifiedNameId *q = name->asQualifiedNameId()) {
+ if (! q->base())
+ return false; // global qualified name
- const QualifiedNameId *qName = name->asQualifiedNameId();
- if (!qName)
- translationUnit()->error(iter->firstToken(), "invalid name in %s",
- declName);
- else if (qName->isGlobal())
- translationUnit()->error(iter->firstToken(),
- "invalid name '%s' in %s",
- qName->identifier()->chars(), declName);
- else {
- for (unsigned i = 0; i < qName->nameCount(); ++i) {
- const Name *namePart = qName->nameAt(i);
- if (!namePart || !namePart->isNameId()) {
- translationUnit()->error(iter->firstToken(),
- "invalid name '%s' in %s",
- qName->identifier()->chars(), declName);
- }
- }
+ if (checkEnumName(q->base()) && checkEnumName(q->name()))
+ return true;
+ }
+
+ return false;
+}
+
+void CheckDeclaration::checkQEnumsQFlagsNames(NameListAST *nameListAst, const char *declName)
+{
+ for (NameListAST *iter = nameListAst; iter; iter = iter->next) {
+ if (const Name *name = semantic()->check(iter->value, _scope)) {
+ if (! checkEnumName(name))
+ translationUnit()->error(iter->firstToken(), "invalid name in %s", declName);
}
}
}