diff options
author | Erik Verbruggen <erik.verbruggen@nokia.com> | 2009-07-31 13:22:32 +0200 |
---|---|---|
committer | Erik Verbruggen <erik.verbruggen@nokia.com> | 2009-07-31 13:22:32 +0200 |
commit | b713f1772a4de8330bcdd96a00b9cf103541e008 (patch) | |
tree | dbf903d169e12e983d1cc9355723ea1737d0b270 /src/shared/cplusplus/CheckName.cpp | |
parent | b54517ad0fab5cfd1500975c52641d0afca6748d (diff) | |
download | qt-creator-b713f1772a4de8330bcdd96a00b9cf103541e008.tar.gz |
Added semantic checks for method declarations.
Diffstat (limited to 'src/shared/cplusplus/CheckName.cpp')
-rw-r--r-- | src/shared/cplusplus/CheckName.cpp | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/shared/cplusplus/CheckName.cpp b/src/shared/cplusplus/CheckName.cpp index c18a9f3400..48ab067f03 100644 --- a/src/shared/cplusplus/CheckName.cpp +++ b/src/shared/cplusplus/CheckName.cpp @@ -55,6 +55,7 @@ #include "Names.h" #include "CoreTypes.h" #include "Symbols.h" +#include "Scope.h" #include <cassert> CPLUSPLUS_BEGIN_NAMESPACE @@ -108,6 +109,17 @@ Name *CheckName::check(ObjCSelectorAST *args, Scope *scope) return switchName(previousName); } +void CheckName::check(ObjCMessageArgumentDeclarationAST *arg, Scope *scope) +{ + Name *previousName = switchName(0); + Scope *previousScope = switchScope(scope); + + accept(arg); + + (void) switchScope(previousScope); + (void) switchName(previousName); +} + Name *CheckName::switchName(Name *name) { Name *previousName = _name; @@ -386,4 +398,26 @@ bool CheckName::visit(ObjCSelectorWithArgumentsAST *ast) return false; } +bool CheckName::visit(ObjCMessageArgumentDeclarationAST *ast) +{ + FullySpecifiedType type; + + if (ast->type_name) + type = semantic()->check(ast->type_name, _scope); + + if (ast->param_name_token) { + Identifier *id = identifier(ast->param_name_token); + _name = control()->nameId(id); + ast->name = _name; + + Argument *arg = control()->newArgument(ast->firstToken(), _name); + ast->argument = arg; + arg->setType(type); + arg->setInitializer(false); + _scope->enterSymbol(arg); + } + + return false; +} + CPLUSPLUS_END_NAMESPACE |