From 4a0da2c6f2663d9469bfd929fa682b6df7d42ab7 Mon Sep 17 00:00:00 2001 From: Erik Verbruggen Date: Fri, 31 Jul 2009 16:03:48 +0200 Subject: Added Semantic checks for ObjC methods. --- src/shared/cplusplus/CheckDeclaration.cpp | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'src/shared/cplusplus/CheckDeclaration.cpp') 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); -- cgit v1.2.1