aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/cpptools/cppchecksymbols.cpp
diff options
context:
space:
mode:
authorErik Verbruggen <[email protected]>2012-02-16 10:54:44 +0100
committerErik Verbruggen <[email protected]>2012-02-23 08:39:34 +0100
commit368d5926cab83e8e64f01483f3005ac4d8c4d2d6 (patch)
tree53b5f94e6babbc242584fdd42a4473312a36e9ac /src/plugins/cpptools/cppchecksymbols.cpp
parentc9999a9382ecf5ca2571b4b032e50673c3080f42 (diff)
C++: handle destructor names with template parameters.
Change-Id: I74b4fd5e043db935abc18345b303d294b71e8fc2 Reviewed-by: Tobias Hunger <[email protected]> Reviewed-by: Erik Verbruggen <[email protected]>
Diffstat (limited to 'src/plugins/cpptools/cppchecksymbols.cpp')
-rw-r--r--src/plugins/cpptools/cppchecksymbols.cpp19
1 files changed, 11 insertions, 8 deletions
diff --git a/src/plugins/cpptools/cppchecksymbols.cpp b/src/plugins/cpptools/cppchecksymbols.cpp
index fc83c054e0b..a2d1d6dcf07 100644
--- a/src/plugins/cpptools/cppchecksymbols.cpp
+++ b/src/plugins/cpptools/cppchecksymbols.cpp
@@ -829,6 +829,8 @@ void CheckSymbols::addUse(NameAST *ast, UseKind kind)
if (QualifiedNameAST *q = ast->asQualifiedName())
ast = q->unqualified_name;
+ if (DestructorNameAST *dtor = ast->asDestructorName())
+ ast = dtor->unqualified_name;
if (! ast)
return; // nothing to do
@@ -837,10 +839,7 @@ void CheckSymbols::addUse(NameAST *ast, UseKind kind)
unsigned startToken = ast->firstToken();
- if (DestructorNameAST *dtor = ast->asDestructorName())
- startToken = dtor->identifier_token;
-
- else if (TemplateIdAST *templ = ast->asTemplateId())
+ if (TemplateIdAST *templ = ast->asTemplateId())
startToken = templ->identifier_token;
addUse(startToken, kind);
@@ -888,7 +887,8 @@ void CheckSymbols::addType(ClassOrNamespace *b, NameAST *ast)
unsigned startToken = ast->firstToken();
if (DestructorNameAST *dtor = ast->asDestructorName())
- startToken = dtor->identifier_token;
+ if (dtor->unqualified_name)
+ startToken = dtor->unqualified_name->firstToken();
const Token &tok = tokenAt(startToken);
if (tok.generated())
@@ -919,7 +919,8 @@ void CheckSymbols::addTypeOrStatic(const QList<LookupItem> &candidates, NameAST
{
unsigned startToken = ast->firstToken();
if (DestructorNameAST *dtor = ast->asDestructorName())
- startToken = dtor->identifier_token;
+ if (dtor->unqualified_name)
+ startToken = dtor->unqualified_name->firstToken();
const Token &tok = tokenAt(startToken);
if (tok.generated())
@@ -956,7 +957,8 @@ void CheckSymbols::addClassMember(const QList<LookupItem> &candidates, NameAST *
{
unsigned startToken = ast->firstToken();
if (DestructorNameAST *dtor = ast->asDestructorName())
- startToken = dtor->identifier_token;
+ if (dtor->unqualified_name)
+ startToken = dtor->unqualified_name->firstToken();
const Token &tok = tokenAt(startToken);
if (tok.generated())
@@ -1014,7 +1016,8 @@ void CheckSymbols::addVirtualMethod(const QList<LookupItem> &candidates, NameAST
{
unsigned startToken = ast->firstToken();
if (DestructorNameAST *dtor = ast->asDestructorName())
- startToken = dtor->identifier_token;
+ if (dtor->unqualified_name)
+ startToken = dtor->unqualified_name->firstToken();
const Token &tok = tokenAt(startToken);
if (tok.generated())