summaryrefslogtreecommitdiff
path: root/src/shared/cplusplus/CheckName.cpp
diff options
context:
space:
mode:
authorErik Verbruggen <erik.verbruggen@nokia.com>2009-07-28 16:34:15 +0200
committerErik Verbruggen <erik.verbruggen@nokia.com>2009-07-28 16:34:15 +0200
commit26267c03445266233159b2f61bbc3a4d5864c01a (patch)
tree8b7536d8f41fea63adc180d56830a73aae1192ad /src/shared/cplusplus/CheckName.cpp
parenta9b521f80af025ac11f9735fc070606952894b60 (diff)
downloadqt-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.cpp35
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