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/CheckName.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/CheckName.cpp')
-rw-r--r-- | src/shared/cplusplus/CheckName.cpp | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/src/shared/cplusplus/CheckName.cpp b/src/shared/cplusplus/CheckName.cpp index 4105268f93..1161a8e0e0 100644 --- a/src/shared/cplusplus/CheckName.cpp +++ b/src/shared/cplusplus/CheckName.cpp @@ -87,15 +87,15 @@ const Name *CheckName::check(NestedNameSpecifierListAST *nested_name_specifier_l const Name *previousName = switchName(0); Scope *previousScope = switchScope(scope); - std::vector<const Name *> names; for (NestedNameSpecifierListAST *it = nested_name_specifier_list; it; it = it->next) { NestedNameSpecifierAST *nested_name_specifier = it->value; - names.push_back(semantic()->check(nested_name_specifier->class_or_namespace_name, _scope)); + const Name *n = semantic()->check(nested_name_specifier->class_or_namespace_name, _scope); + if (! _name) + _name = n; + else + _name = control()->qualifiedNameId(_name, n); } - if (! names.empty()) - _name = control()->qualifiedNameId(&names[0], names.size()); - (void) switchScope(previousScope); return switchName(previousName); } @@ -127,13 +127,20 @@ Scope *CheckName::switchScope(Scope *scope) bool CheckName::visit(QualifiedNameAST *ast) { - std::vector<const Name *> names; for (NestedNameSpecifierListAST *it = ast->nested_name_specifier_list; it; it = it->next) { NestedNameSpecifierAST *nested_name_specifier = it->value; - names.push_back(semantic()->check(nested_name_specifier->class_or_namespace_name, _scope)); + const Name *n = semantic()->check(nested_name_specifier->class_or_namespace_name, _scope); + if (_name || ast->global_scope_token) + _name = control()->qualifiedNameId(_name, n); + else + _name = n; } - names.push_back(semantic()->check(ast->unqualified_name, _scope)); - _name = control()->qualifiedNameId(&names[0], names.size(), ast->global_scope_token != 0); + + const Name *n = semantic()->check(ast->unqualified_name, _scope); + if (_name || ast->global_scope_token) + _name = control()->qualifiedNameId(_name, n); + else + _name = n; ast->name = _name; return false; |