summaryrefslogtreecommitdiff
path: root/src/shared/cplusplus/CheckName.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/CheckName.cpp
parent94264617bfdda8fbfc31921dc9ba49ffff84eaeb (diff)
downloadqt-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.cpp25
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;