From 86a7b26fcd09c5c0510410631421956b877db840 Mon Sep 17 00:00:00 2001 From: Erik Verbruggen Date: Wed, 5 Aug 2009 18:30:18 +0200 Subject: Fixed semantic checks for Objective-C methods and fast-enumeration. --- src/shared/cplusplus/CheckStatement.cpp | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'src/shared/cplusplus/CheckStatement.cpp') diff --git a/src/shared/cplusplus/CheckStatement.cpp b/src/shared/cplusplus/CheckStatement.cpp index c93eca0492..ae91f5191e 100644 --- a/src/shared/cplusplus/CheckStatement.cpp +++ b/src/shared/cplusplus/CheckStatement.cpp @@ -170,6 +170,34 @@ bool CheckStatement::visit(ForeachStatementAST *ast) return false; } +bool CheckStatement::visit(ObjCFastEnumerationAST *ast) +{ + Block *block = control()->newBlock(ast->for_token); + block->setStartOffset(tokenAt(ast->firstToken()).offset); + block->setEndOffset(tokenAt(ast->lastToken()).offset); + ast->symbol = block; + _scope->enterSymbol(block); + Scope *previousScope = switchScope(block->members()); + if (ast->type_specifiers && ast->declarator) { + FullySpecifiedType ty = semantic()->check(ast->type_specifiers, _scope); + Name *name = 0; + ty = semantic()->check(ast->declarator, ty, _scope, &name); + unsigned location = ast->declarator->firstToken(); + if (CoreDeclaratorAST *core_declarator = ast->declarator->core_declarator) + location = core_declarator->firstToken(); + Declaration *decl = control()->newDeclaration(location, name); + decl->setType(ty); + _scope->enterSymbol(decl); + } else { + FullySpecifiedType exprTy = semantic()->check(ast->initializer, _scope); + (void) exprTy; + } + + semantic()->check(ast->body_statement, _scope); + (void) switchScope(previousScope); + return false; +} + bool CheckStatement::visit(ForStatementAST *ast) { Block *block = control()->newBlock(ast->for_token); -- cgit v1.2.1