Improved ObjC parsing, and added semantic checks.

This commit is contained in:
Erik Verbruggen
2009-07-28 16:34:15 +02:00
parent a9b521f80a
commit 26267c0344
29 changed files with 1191 additions and 155 deletions

View File

@@ -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