summaryrefslogtreecommitdiff
path: root/src/shared/cplusplus
diff options
context:
space:
mode:
Diffstat (limited to 'src/shared/cplusplus')
-rw-r--r--src/shared/cplusplus/CheckDeclaration.cpp7
-rw-r--r--src/shared/cplusplus/CheckSpecifier.cpp12
-rw-r--r--src/shared/cplusplus/CheckStatement.cpp2
3 files changed, 17 insertions, 4 deletions
diff --git a/src/shared/cplusplus/CheckDeclaration.cpp b/src/shared/cplusplus/CheckDeclaration.cpp
index f320296d28..d3f914a3e8 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 422bd7f3c4..ce5b6a38e2 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 da6c24cd17..dd778f7f5e 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);