diff options
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); } } } |