From ddd20a2977477f66325e03af22abb7c66e19acce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Wed, 10 Dec 2008 19:13:40 +0000 Subject: [PATCH] Virtual destructor : minor fix to avoid false positives when more modifiers are used --- CheckClass.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/CheckClass.cpp b/CheckClass.cpp index c03eb78ea..9b7a7e6bb 100644 --- a/CheckClass.cpp +++ b/CheckClass.cpp @@ -1,4 +1,4 @@ -/* +/* * c++check - c/c++ syntax checking * Copyright (C) 2007 Daniel Marjamäki * @@ -684,13 +684,13 @@ void CheckClass::CheckOperatorEq1() void CheckClass::virtualDestructor() { - const char pattern_classdecl[] = "class %var% : %var%"; + const char pattern_classdecl[] = "class %var% : %var%"; const TOKEN *derived = _tokenizer->tokens(); - while ((derived = TOKEN::findmatch(derived, pattern_classdecl)) != NULL) + while ((derived = TOKEN::findmatch(derived, pattern_classdecl)) != NULL) { // Iterate through each base class... - derived = derived->tokAt(3); + derived = derived->tokAt(3); while ( TOKEN::Match(derived, "%var%") ) { bool isPublic = TOKEN::Match(derived, "public"); @@ -718,6 +718,9 @@ void CheckClass::virtualDestructor() while (TOKEN::Match(base, "::")) base = TOKEN::findmatch(base->next(), "%any% ~ %var1% (", baseName); + while (TOKEN::Match(base, "%var%") && !TOKEN::Match(base, "virtual")) + base = base->previous(); + // Check that there is a destructor.. if ( ! base ) {