diff options
author | Erik Verbruggen <erik.verbruggen@nokia.com> | 2010-07-19 10:42:07 +0200 |
---|---|---|
committer | Erik Verbruggen <erik.verbruggen@nokia.com> | 2010-07-19 10:42:32 +0200 |
commit | 867bf3dae8939bc221f54309256248f6f6e739fd (patch) | |
tree | 701eb57d652f2ee18d908b0fc69a1f0fcfc93e34 /src/shared/cplusplus/CheckStatement.cpp | |
parent | 7de836bf851b144ead33a5aea685ed92b9e928ea (diff) | |
download | qt-creator-867bf3dae8939bc221f54309256248f6f6e739fd.tar.gz |
Fixes for scope range calculation.
Diffstat (limited to 'src/shared/cplusplus/CheckStatement.cpp')
-rw-r--r-- | src/shared/cplusplus/CheckStatement.cpp | 55 |
1 files changed, 41 insertions, 14 deletions
diff --git a/src/shared/cplusplus/CheckStatement.cpp b/src/shared/cplusplus/CheckStatement.cpp index dd778f7f5e..aa145e804c 100644 --- a/src/shared/cplusplus/CheckStatement.cpp +++ b/src/shared/cplusplus/CheckStatement.cpp @@ -111,8 +111,8 @@ bool CheckStatement::visit(CaseStatementAST *ast) bool CheckStatement::visit(CompoundStatementAST *ast) { Block *block = control()->newBlock(ast->lbrace_token); - block->setStartOffset(tokenAt(ast->firstToken()).end()); - block->setEndOffset(tokenAt(ast->lastToken() - 1).end()); + block->members()->setStartOffset(tokenAt(ast->firstToken()).end()); + block->members()->setEndOffset(tokenAt(ast->lastToken() - 1).end()); ast->symbol = block; _scope->enterSymbol(block); Scope *previousScope = switchScope(block->members()); @@ -167,6 +167,7 @@ bool CheckStatement::visit(ExpressionStatementAST *ast) } bool CheckStatement::forEachFastEnum(unsigned firstToken, + unsigned lparen, unsigned lastToken, SpecifierListAST *type_specifier_list, DeclaratorAST *declarator, @@ -175,9 +176,13 @@ bool CheckStatement::forEachFastEnum(unsigned firstToken, StatementAST *statement, Block *&symbol) { + unsigned scopeStart = tokenAt(firstToken).offset; + if (lparen) + scopeStart = tokenAt(lparen).end(); + Block *block = control()->newBlock(firstToken); - block->setStartOffset(tokenAt(firstToken).offset); - block->setEndOffset(tokenAt(lastToken - 1).end()); + block->members()->setStartOffset(scopeStart); + block->members()->setEndOffset(tokenAt(lastToken - 1).end()); symbol = block; _scope->enterSymbol(block); Scope *previousScope = switchScope(block->members()); @@ -205,6 +210,7 @@ bool CheckStatement::forEachFastEnum(unsigned firstToken, bool CheckStatement::visit(ForeachStatementAST *ast) { return forEachFastEnum(ast->firstToken(), + ast->lparen_token, ast->lastToken(), ast->type_specifier_list, ast->declarator, @@ -217,6 +223,7 @@ bool CheckStatement::visit(ForeachStatementAST *ast) bool CheckStatement::visit(ObjCFastEnumerationAST *ast) { return forEachFastEnum(ast->firstToken(), + ast->lparen_token, ast->lastToken(), ast->type_specifier_list, ast->declarator, @@ -228,9 +235,13 @@ bool CheckStatement::visit(ObjCFastEnumerationAST *ast) bool CheckStatement::visit(ForStatementAST *ast) { + unsigned scopeStart = tokenAt(ast->firstToken()).offset; + if (ast->lparen_token) + scopeStart = tokenAt(ast->lparen_token).end(); + Block *block = control()->newBlock(ast->for_token); - block->setStartOffset(tokenAt(ast->firstToken()).offset); - block->setEndOffset(tokenAt(ast->lastToken() - 1).end()); + block->members()->setStartOffset(scopeStart); + block->members()->setEndOffset(tokenAt(ast->lastToken() - 1).end()); ast->symbol = block; _scope->enterSymbol(block); Scope *previousScope = switchScope(block->members()); @@ -245,9 +256,13 @@ bool CheckStatement::visit(ForStatementAST *ast) bool CheckStatement::visit(IfStatementAST *ast) { + unsigned scopeStart = tokenAt(ast->firstToken()).offset; + if (ast->lparen_token) + scopeStart = tokenAt(ast->lparen_token).end(); + Block *block = control()->newBlock(ast->if_token); - block->setStartOffset(tokenAt(ast->firstToken()).offset); - block->setEndOffset(tokenAt(ast->lastToken() - 1).end()); + block->members()->setStartOffset(scopeStart); + block->members()->setEndOffset(tokenAt(ast->lastToken() - 1).end()); ast->symbol = block; _scope->enterSymbol(block); Scope *previousScope = switchScope(block->members()); @@ -292,9 +307,13 @@ bool CheckStatement::visit(ReturnStatementAST *ast) bool CheckStatement::visit(SwitchStatementAST *ast) { + unsigned scopeStart = tokenAt(ast->firstToken()).offset; + if (ast->lparen_token) + scopeStart = tokenAt(ast->lparen_token).offset; + Block *block = control()->newBlock(ast->switch_token); - block->setStartOffset(tokenAt(ast->firstToken()).offset); - block->setEndOffset(tokenAt(ast->lastToken() - 1).end()); + block->members()->setStartOffset(scopeStart); + block->members()->setEndOffset(tokenAt(ast->lastToken() - 1).end()); ast->symbol = block; _scope->enterSymbol(block); Scope *previousScope = switchScope(block->members()); @@ -317,9 +336,13 @@ bool CheckStatement::visit(TryBlockStatementAST *ast) bool CheckStatement::visit(CatchClauseAST *ast) { + unsigned scopeStart = tokenAt(ast->firstToken()).offset; + if (ast->lparen_token) + scopeStart = tokenAt(ast->lparen_token).end(); + Block *block = control()->newBlock(ast->catch_token); - block->setStartOffset(tokenAt(ast->firstToken()).offset); - block->setEndOffset(tokenAt(ast->lastToken() - 1).end()); + block->members()->setStartOffset(scopeStart); + block->members()->setEndOffset(tokenAt(ast->lastToken() - 1).end()); ast->symbol = block; _scope->enterSymbol(block); Scope *previousScope = switchScope(block->members()); @@ -332,9 +355,13 @@ bool CheckStatement::visit(CatchClauseAST *ast) bool CheckStatement::visit(WhileStatementAST *ast) { + unsigned scopeStart = tokenAt(ast->firstToken()).offset; + if (ast->lparen_token) + scopeStart = tokenAt(ast->lparen_token).end(); + Block *block = control()->newBlock(ast->while_token); - block->setStartOffset(tokenAt(ast->firstToken()).offset); - block->setEndOffset(tokenAt(ast->lastToken() - 1).end()); + block->members()->setStartOffset(scopeStart); + block->members()->setEndOffset(tokenAt(ast->lastToken() - 1).end()); ast->symbol = block; _scope->enterSymbol(block); Scope *previousScope = switchScope(block->members()); |