Fixed #1362 (Internal error when using ?-operator and nested {})

This commit is contained in:
Daniel Marjamäki 2010-02-07 09:14:59 +01:00
parent 93bb1c0174
commit ed8f3bc806
2 changed files with 23 additions and 0 deletions

View File

@ -3406,9 +3406,27 @@ bool Tokenizer::simplifyQuestionMark()
// The condition is true. Delete the operator after the ":"..
else
{
const Token *end = 0;
// check the operator after the :
if (Token::simpleMatch(semicolon, ": ("))
{
end = semicolon->next()->link();
if (!Token::Match(end, ") !!."))
continue;
}
// delete the condition token and the "?"
tok = tok->tokAt(-2);
Token::eraseTokens(tok, tok->tokAt(3));
// delete operator after the :
if (end)
{
Token::eraseTokens(semicolon->previous(), end->next());
continue;
}
int ind = 0;
for (const Token *end = semicolon; end; end = end->next())
{

View File

@ -1964,6 +1964,11 @@ private:
const char code[] = "int vals[] = { 0x13, 0?0x01:0x00 };";
ASSERT_EQUALS("int * vals ; vals = { 19 , 0 } ;", tok(code));
}
{
const char code[] = "= 1 ? 0 : ({ 0; });";
ASSERT_EQUALS("= 0 ;", tok(code));
}
}
void calculations()