summaryrefslogtreecommitdiff
path: root/src/shared/cplusplus/CheckName.cpp
diff options
context:
space:
mode:
authorErik Verbruggen <erik.verbruggen@nokia.com>2009-07-31 13:22:32 +0200
committerErik Verbruggen <erik.verbruggen@nokia.com>2009-07-31 13:22:32 +0200
commitb713f1772a4de8330bcdd96a00b9cf103541e008 (patch)
treedbf903d169e12e983d1cc9355723ea1737d0b270 /src/shared/cplusplus/CheckName.cpp
parentb54517ad0fab5cfd1500975c52641d0afca6748d (diff)
downloadqt-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.cpp34
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