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