summaryrefslogtreecommitdiff
path: root/src/shared/cplusplus/CheckDeclaration.cpp
diff options
context:
space:
mode:
authorErik Verbruggen <erik.verbruggen@nokia.com>2009-07-31 16:03:48 +0200
committerErik Verbruggen <erik.verbruggen@nokia.com>2009-07-31 16:03:48 +0200
commit4a0da2c6f2663d9469bfd929fa682b6df7d42ab7 (patch)
treed8fb1fbbeacaadad06024ecd5ce8e84c8f30d547 /src/shared/cplusplus/CheckDeclaration.cpp
parentb713f1772a4de8330bcdd96a00b9cf103541e008 (diff)
downloadqt-creator-4a0da2c6f2663d9469bfd929fa682b6df7d42ab7.tar.gz
Added Semantic checks for ObjC methods.
Diffstat (limited to 'src/shared/cplusplus/CheckDeclaration.cpp')
-rw-r--r--src/shared/cplusplus/CheckDeclaration.cpp30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/shared/cplusplus/CheckDeclaration.cpp b/src/shared/cplusplus/CheckDeclaration.cpp
index 1a9877db15..f3157e7bc6 100644
--- a/src/shared/cplusplus/CheckDeclaration.cpp
+++ b/src/shared/cplusplus/CheckDeclaration.cpp
@@ -598,6 +598,36 @@ bool CheckDeclaration::visit(ObjCMethodDeclarationAST *ast)
return false;
}
+bool CheckDeclaration::visit(ObjCMethodDefinitionAST *ast)
+{
+ if (!ast->method_prototype)
+ return false;
+
+ FullySpecifiedType ty = semantic()->check(ast->method_prototype, _scope);
+ Function *fun = ty.type()->asFunctionType();
+ if (!fun)
+ return false;
+
+ Declaration *symbol = control()->newDeclaration(ast->firstToken(), fun->name());
+ symbol->setStartOffset(tokenAt(ast->firstToken()).offset);
+ symbol->setEndOffset(tokenAt(ast->lastToken()).offset);
+
+ symbol->setType(fun->returnType());
+
+ symbol->setVisibility(semantic()->currentVisibility());
+
+ if (semantic()->isObjCClassMethod(ast->method_prototype->method_type_token))
+ symbol->setStorage(Symbol::Static);
+
+ _scope->enterSymbol(symbol);
+
+ if (! semantic()->skipFunctionBodies()) {
+ semantic()->check(ast->function_body, fun->members());
+ }
+
+ return false;
+}
+
bool CheckDeclaration::visit(ObjCVisibilityDeclarationAST *ast)
{
int accessSpecifier = tokenKind(ast->visibility_token);