diff options
author | Roberto Raggi <roberto.raggi@nokia.com> | 2010-07-12 13:41:54 +0200 |
---|---|---|
committer | Roberto Raggi <roberto.raggi@nokia.com> | 2010-07-12 15:10:00 +0200 |
commit | adfdb51660f3d4251101283efa46b6617cbe43d4 (patch) | |
tree | 7c06bc81efca2349820b3f2e69c3d30da34f2df8 /src/shared/cplusplus/CheckDeclaration.cpp | |
parent | 94264617bfdda8fbfc31921dc9ba49ffff84eaeb (diff) | |
download | qt-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.cpp | 46 |
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); } } } |