TokenList::createAst() doesn't validate itself anymore. Remove some duplicated code and fix glitch in TestGarbage::garbageCode162
This commit is contained in:
parent
9cb8e9a07e
commit
96531d6ffe
|
@ -1742,17 +1742,7 @@ bool Tokenizer::tokenize(std::istream &code,
|
||||||
}
|
}
|
||||||
|
|
||||||
list.createAst();
|
list.createAst();
|
||||||
|
list.validateAst();
|
||||||
// Verify that ast looks ok
|
|
||||||
for (const Token *tok = list.front(); tok; tok = tok->next()) {
|
|
||||||
// Syntax error if binary operator only has 1 operand
|
|
||||||
if ((tok->isAssignmentOp() || tok->isComparisonOp() || Token::Match(tok,"[|^/%]")) && tok->astOperand1() && !tok->astOperand2())
|
|
||||||
throw InternalError(tok, "Syntax Error: AST broken, binary operator has only one operand.", InternalError::SYNTAX);
|
|
||||||
|
|
||||||
// Syntax error if we encounter "?" with operand2 that is not ":"
|
|
||||||
if (tok->astOperand2() && tok->str() == "?" && tok->astOperand2()->str() != ":")
|
|
||||||
throw InternalError(tok, "Syntax Error: AST broken, ternary operator lacks ':'.", InternalError::SYNTAX);
|
|
||||||
}
|
|
||||||
|
|
||||||
SymbolDatabase::setValueTypeInTokenList(list.front());
|
SymbolDatabase::setValueTypeInTokenList(list.front());
|
||||||
ValueFlow::setValues(&list, _symbolDatabase, _errorLogger, _settings);
|
ValueFlow::setValues(&list, _symbolDatabase, _errorLogger, _settings);
|
||||||
|
@ -3844,6 +3834,8 @@ bool Tokenizer::simplifyTokenList2()
|
||||||
simplifyPointerConst();
|
simplifyPointerConst();
|
||||||
|
|
||||||
list.createAst();
|
list.createAst();
|
||||||
|
// skipping this here may help improve performance. Might be enabled later on demand. #7208
|
||||||
|
// list.validateAst();
|
||||||
|
|
||||||
ValueFlow::setValues(&list, _symbolDatabase, _errorLogger, _settings);
|
ValueFlow::setValues(&list, _symbolDatabase, _errorLogger, _settings);
|
||||||
|
|
||||||
|
|
|
@ -1054,11 +1054,9 @@ static Token * createAstAtToken(Token *tok, bool cpp)
|
||||||
|
|
||||||
void TokenList::createAst()
|
void TokenList::createAst()
|
||||||
{
|
{
|
||||||
for (Token *tok = _front; tok; tok = tok ? tok->next() : NULL) {
|
for (Token *tok = _front; tok; tok = tok ? tok->next() : nullptr) {
|
||||||
tok = createAstAtToken(tok, isCPP());
|
tok = createAstAtToken(tok, isCPP());
|
||||||
}
|
}
|
||||||
|
|
||||||
validateAst();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TokenList::validateAst()
|
void TokenList::validateAst()
|
||||||
|
|
|
@ -1390,7 +1390,7 @@ private:
|
||||||
|
|
||||||
void garbageCode162() {
|
void garbageCode162() {
|
||||||
//7208
|
//7208
|
||||||
ASSERT_THROW(checkCode("return << >> x return << >> x ", "test.c"), InternalError);
|
ASSERT_THROW(checkCode("return << >> x return << >> x ", false), InternalError);
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue