diff options
Diffstat (limited to 'src/shared/cplusplus/CheckName.cpp')
-rw-r--r-- | src/shared/cplusplus/CheckName.cpp | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/shared/cplusplus/CheckName.cpp b/src/shared/cplusplus/CheckName.cpp index 8045ea9a96..c18a9f3400 100644 --- a/src/shared/cplusplus/CheckName.cpp +++ b/src/shared/cplusplus/CheckName.cpp @@ -97,6 +97,17 @@ Name *CheckName::check(NestedNameSpecifierAST *nested_name_specifier, Scope *sco return switchName(previousName); } +Name *CheckName::check(ObjCSelectorAST *args, Scope *scope) +{ + Name *previousName = switchName(0); + Scope *previousScope = switchScope(scope); + + accept(args); + + (void) switchScope(previousScope); + return switchName(previousName); +} + Name *CheckName::switchName(Name *name) { Name *previousName = _name; @@ -351,4 +362,28 @@ bool CheckName::visit(TemplateIdAST *ast) return false; } +bool CheckName::visit(ObjCSelectorWithoutArgumentsAST *ast) +{ + Identifier *id = identifier(ast->name_token); + _name = control()->nameId(id); + ast->selector_name = _name; + + return false; +} + +bool CheckName::visit(ObjCSelectorWithArgumentsAST *ast) +{ + std::vector<Name *> names; + for (ObjCSelectorArgumentListAST *it = ast->selector_arguments; it; it = it->next) { + Identifier *id = identifier(it->argument->name_token); + Name *name = control()->nameId(id); + + names.push_back(name); + } + _name = control()->qualifiedNameId(&names[0], names.size(), false); + ast->selector_name = _name; + + return false; +} + CPLUSPLUS_END_NAMESPACE |