fix 2 problems related to ticket 1976:
1. nested unnamed anonymous structures and unions were not supported. 2. declaration split up in class had bug if proceeded by access specifier.
This commit is contained in:
parent
4d6b7bea2e
commit
4a6070d2af
|
@ -4725,13 +4725,13 @@ void Tokenizer::simplifyVarDecl()
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tok->previous() && !Token::Match(tok->previous(), "[{};)]"))
|
if (tok->previous() && !Token::Match(tok->previous(), "{|}|;|)|public:|protected:|private:"))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
Token *type0 = tok;
|
Token *type0 = tok;
|
||||||
if (!Token::Match(type0, "%type%"))
|
if (!Token::Match(type0, "%type%"))
|
||||||
continue;
|
continue;
|
||||||
if (Token::Match(type0, "else|return"))
|
if (Token::Match(type0, "else|return|public:|protected:|private:"))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
bool isconst = false;
|
bool isconst = false;
|
||||||
|
@ -7793,6 +7793,8 @@ void Tokenizer::simplifyStructDecl()
|
||||||
|
|
||||||
for (Token *tok = _tokens; tok; tok = tok->next())
|
for (Token *tok = _tokens; tok; tok = tok->next())
|
||||||
{
|
{
|
||||||
|
Token *restart;
|
||||||
|
|
||||||
// check for named struct/union
|
// check for named struct/union
|
||||||
if (Token::Match(tok, "struct|union %type% :|{"))
|
if (Token::Match(tok, "struct|union %type% :|{"))
|
||||||
{
|
{
|
||||||
|
@ -7803,6 +7805,7 @@ void Tokenizer::simplifyStructDecl()
|
||||||
next = next->next();
|
next = next->next();
|
||||||
|
|
||||||
tok = next->link();
|
tok = next->link();
|
||||||
|
restart = next;
|
||||||
|
|
||||||
// check for named type
|
// check for named type
|
||||||
if (Token::Match(tok->next(), "*|&| %type% ,|;|["))
|
if (Token::Match(tok->next(), "*|&| %type% ,|;|["))
|
||||||
|
@ -7812,7 +7815,7 @@ void Tokenizer::simplifyStructDecl()
|
||||||
tok->insertToken(type->str().c_str());
|
tok->insertToken(type->str().c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
tok = next;
|
tok = restart;
|
||||||
}
|
}
|
||||||
|
|
||||||
// check for anonymous struct/union
|
// check for anonymous struct/union
|
||||||
|
@ -7820,6 +7823,7 @@ void Tokenizer::simplifyStructDecl()
|
||||||
{
|
{
|
||||||
Token *tok1 = tok;
|
Token *tok1 = tok;
|
||||||
|
|
||||||
|
restart = tok->next();
|
||||||
tok = tok->next()->link();
|
tok = tok->next()->link();
|
||||||
|
|
||||||
// check for named type
|
// check for named type
|
||||||
|
@ -7847,14 +7851,21 @@ void Tokenizer::simplifyStructDecl()
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
tok1->deleteThis();
|
tok1->deleteThis();
|
||||||
|
restart = tok1->previous();
|
||||||
tok->deleteThis();
|
tok->deleteThis();
|
||||||
if (tok->next())
|
if (tok->next())
|
||||||
tok->deleteThis();
|
tok->deleteThis();
|
||||||
if (!tok->next())
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tok = tok1->next();
|
if (!restart)
|
||||||
|
{
|
||||||
|
simplifyStructDecl();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if (!restart->next())
|
||||||
|
return;
|
||||||
|
|
||||||
|
tok = restart;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5723,6 +5723,12 @@ private:
|
||||||
const char expected[] = ";";
|
const char expected[] = ";";
|
||||||
ASSERT_EQUALS(expected, tok(code, false));
|
ASSERT_EQUALS(expected, tok(code, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
const char code[] = "struct { struct { struct { } ; } ; };";
|
||||||
|
const char expected[] = ";";
|
||||||
|
ASSERT_EQUALS(expected, tok(code, false));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void removeUnwantedKeywords()
|
void removeUnwantedKeywords()
|
||||||
|
|
|
@ -205,6 +205,7 @@ private:
|
||||||
TEST_CASE(vardecl9);
|
TEST_CASE(vardecl9);
|
||||||
TEST_CASE(vardecl10);
|
TEST_CASE(vardecl10);
|
||||||
TEST_CASE(vardecl11);
|
TEST_CASE(vardecl11);
|
||||||
|
TEST_CASE(vardecl12);
|
||||||
TEST_CASE(vardecl_stl);
|
TEST_CASE(vardecl_stl);
|
||||||
TEST_CASE(vardecl_template);
|
TEST_CASE(vardecl_template);
|
||||||
TEST_CASE(volatile_variables);
|
TEST_CASE(volatile_variables);
|
||||||
|
@ -3557,6 +3558,12 @@ private:
|
||||||
ASSERT_EQUALS("char a [ 5 ] [ 8 ] ; char b [ 5 ] [ 8 ] ;", tokenizeAndStringify(code));
|
ASSERT_EQUALS("char a [ 5 ] [ 8 ] ; char b [ 5 ] [ 8 ] ;", tokenizeAndStringify(code));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void vardecl12()
|
||||||
|
{
|
||||||
|
const char code[] = "struct A { public: B a, b, c, d; };";
|
||||||
|
ASSERT_EQUALS("struct A { public: B a ; B b ; B c ; B d ; } ;", tokenizeAndStringify(code));
|
||||||
|
}
|
||||||
|
|
||||||
void volatile_variables()
|
void volatile_variables()
|
||||||
{
|
{
|
||||||
const char code[] = "volatile int a=0;\n"
|
const char code[] = "volatile int a=0;\n"
|
||||||
|
|
|
@ -2175,7 +2175,8 @@ private:
|
||||||
" func();\n"
|
" func();\n"
|
||||||
" } while(a--);\n"
|
" } while(a--);\n"
|
||||||
"}\n");
|
"}\n");
|
||||||
ASSERT_EQUALS("[test.cpp:4]: (style) Unused variable: z\n", errout.str());
|
ASSERT_EQUALS("[test.cpp:4]: (style) Unused variable: x\n"
|
||||||
|
"[test.cpp:4]: (style) Unused variable: z\n", errout.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
void localvarStruct4()
|
void localvarStruct4()
|
||||||
|
|
Loading…
Reference in New Issue