diff options
author | Erik Verbruggen <erik.verbruggen@nokia.com> | 2009-07-28 16:34:15 +0200 |
---|---|---|
committer | Erik Verbruggen <erik.verbruggen@nokia.com> | 2009-07-28 16:34:15 +0200 |
commit | 26267c03445266233159b2f61bbc3a4d5864c01a (patch) | |
tree | 8b7536d8f41fea63adc180d56830a73aae1192ad /src/shared/cplusplus/CheckName.cpp | |
parent | a9b521f80af025ac11f9735fc070606952894b60 (diff) | |
download | qt-creator-26267c03445266233159b2f61bbc3a4d5864c01a.tar.gz |
Improved ObjC parsing, and added semantic checks.
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 |