diff options
author | Erik Verbruggen <erik.verbruggen@nokia.com> | 2009-07-31 16:03:48 +0200 |
---|---|---|
committer | Erik Verbruggen <erik.verbruggen@nokia.com> | 2009-07-31 16:03:48 +0200 |
commit | 4a0da2c6f2663d9469bfd929fa682b6df7d42ab7 (patch) | |
tree | d8fb1fbbeacaadad06024ecd5ce8e84c8f30d547 /src/shared/cplusplus/CheckDeclaration.cpp | |
parent | b713f1772a4de8330bcdd96a00b9cf103541e008 (diff) | |
download | qt-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.cpp | 30 |
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); |