From cb4104e171e5c41ef44c0b9a59d3dcc337d765eb Mon Sep 17 00:00:00 2001
From: Erik Verbruggen <erik.verbruggen@nokia.com>
Date: Fri, 16 Jul 2010 15:26:37 +0200
Subject: [PATCH] Changed startOffset to point to the start of the scope.

---
 src/shared/cplusplus/CheckDeclaration.cpp |  7 ++++++-
 src/shared/cplusplus/CheckSpecifier.cpp   | 12 ++++++++++--
 src/shared/cplusplus/CheckStatement.cpp   |  2 +-
 3 files changed, 17 insertions(+), 4 deletions(-)

diff --git a/src/shared/cplusplus/CheckDeclaration.cpp b/src/shared/cplusplus/CheckDeclaration.cpp
index f320296d284..d3f914a3e8c 100644
--- a/src/shared/cplusplus/CheckDeclaration.cpp
+++ b/src/shared/cplusplus/CheckDeclaration.cpp
@@ -342,13 +342,18 @@ bool CheckDeclaration::visit(FunctionDefinitionAST *ast)
         return false;
     }
 
+    unsigned funStartOffset = tokenAt(ast->firstToken()).offset;
+    if (ast->declarator && ast->declarator->core_declarator) {
+        funStartOffset = tokenAt(ast->declarator->core_declarator->lastToken() - 1).end();
+    }
+
     Function *fun = funTy->asFunctionType();
     fun->setVirtual(ty.isVirtual());
     if (ty.isDeprecated())
         fun->setDeprecated(true);
     if (ty.isUnavailable())
         fun->setUnavailable(true);
-    fun->setStartOffset(tokenAt(ast->firstToken()).offset);
+    fun->setStartOffset(funStartOffset);
     fun->setEndOffset(tokenAt(ast->lastToken() - 1).end());
     if (ast->declarator)
         fun->setSourceLocation(ast->declarator->firstToken(), translationUnit());
diff --git a/src/shared/cplusplus/CheckSpecifier.cpp b/src/shared/cplusplus/CheckSpecifier.cpp
index 422bd7f3c4d..ce5b6a38e2d 100644
--- a/src/shared/cplusplus/CheckSpecifier.cpp
+++ b/src/shared/cplusplus/CheckSpecifier.cpp
@@ -310,9 +310,13 @@ bool CheckSpecifier::visit(ClassSpecifierAST *ast)
     if (ast->name)
         sourceLocation = ast->name->firstToken();
 
+    unsigned classScopeStart = tokenAt(ast->firstToken()).offset;
+    if (ast->lbrace_token)
+        classScopeStart = tokenAt(ast->lbrace_token).end();
+
     const Name *className = semantic()->check(ast->name, _scope);
     Class *klass = control()->newClass(sourceLocation, className);
-    klass->setStartOffset(tokenAt(ast->firstToken()).offset);
+    klass->setStartOffset(classScopeStart);
     klass->setEndOffset(tokenAt(ast->lastToken() - 1).end());
     ast->symbol = klass;
     unsigned classKey = tokenKind(ast->classkey_token);
@@ -397,9 +401,13 @@ bool CheckSpecifier::visit(EnumSpecifierAST *ast)
     if (ast->name)
         sourceLocation = ast->name->firstToken();
 
+    unsigned scopeStart = tokenAt(ast->firstToken()).offset;
+    if (ast->lbrace_token)
+        scopeStart = tokenAt(ast->lbrace_token).end();
+
     const Name *name = semantic()->check(ast->name, _scope);
     Enum *e = control()->newEnum(sourceLocation, name);
-    e->setStartOffset(tokenAt(ast->firstToken()).offset);
+    e->setStartOffset(scopeStart);
     e->setEndOffset(tokenAt(ast->lastToken() - 1).end());
     e->setVisibility(semantic()->currentVisibility());
     _scope->enterSymbol(e);
diff --git a/src/shared/cplusplus/CheckStatement.cpp b/src/shared/cplusplus/CheckStatement.cpp
index da6c24cd174..dd778f7f5eb 100644
--- a/src/shared/cplusplus/CheckStatement.cpp
+++ b/src/shared/cplusplus/CheckStatement.cpp
@@ -111,7 +111,7 @@ bool CheckStatement::visit(CaseStatementAST *ast)
 bool CheckStatement::visit(CompoundStatementAST *ast)
 {
     Block *block = control()->newBlock(ast->lbrace_token);
-    block->setStartOffset(tokenAt(ast->firstToken()).offset);
+    block->setStartOffset(tokenAt(ast->firstToken()).end());
     block->setEndOffset(tokenAt(ast->lastToken() - 1).end());
     ast->symbol = block;
     _scope->enterSymbol(block);
-- 
GitLab