Skip to content

Commit 0daa504

Browse files
Update tokenize.cpp
1 parent e32e2ba commit 0daa504

File tree

1 file changed

+24
-16
lines changed

1 file changed

+24
-16
lines changed

lib/tokenize.cpp

+24-16
Original file line numberDiff line numberDiff line change
@@ -8545,26 +8545,34 @@ void Tokenizer::findGarbageCode() const
85458545
syntaxError(tok);
85468546
}
85478547

8548-
if (tok->isControlFlowKeyword() && Token::Match(tok, "if|while|for|switch")) { // if|while|for|switch (EXPR) { ... }
8549-
if (tok->previous() && !Token::Match(tok->previous(), "%name%|:|;|{|}|)")) {
8550-
if (Token::Match(tok->previous(), "[,(]")) {
8551-
const Token *prev = tok->previous();
8552-
while (prev && prev->str() != "(") {
8553-
if (prev->str() == ")")
8554-
prev = prev->link();
8555-
prev = prev->previous();
8548+
if (tok->isControlFlowKeyword()) {
8549+
if (Token::Match(tok, "if|while|for|switch")) { // if|while|for|switch (EXPR) { ... }
8550+
if (tok->previous() && !Token::Match(tok->previous(), "%name%|:|;|{|}|)")) {
8551+
if (Token::Match(tok->previous(), "[,(]")) {
8552+
const Token *prev = tok->previous();
8553+
while (prev && prev->str() != "(") {
8554+
if (prev->str() == ")")
8555+
prev = prev->link();
8556+
prev = prev->previous();
8557+
}
8558+
if (prev && Token::Match(prev->previous(), "%name% ("))
8559+
unknownMacroError(prev->previous());
85568560
}
8557-
if (prev && Token::Match(prev->previous(), "%name% ("))
8558-
unknownMacroError(prev->previous());
8561+
if (!Token::simpleMatch(tok->tokAt(-2), "operator \"\" if"))
8562+
syntaxError(tok);
85598563
}
8560-
if (!Token::simpleMatch(tok->tokAt(-2), "operator \"\" if"))
8564+
if (!Token::Match(tok->next(), "( !!)"))
85618565
syntaxError(tok);
8566+
if (tok->str() != "for") {
8567+
if (isGarbageExpr(tok->next(), tok->linkAt(1), cpp && (mSettings.standards.cpp>=Standards::cppstd_t::CPP17)))
8568+
syntaxError(tok);
8569+
}
85628570
}
8563-
if (!Token::Match(tok->next(), "( !!)"))
8564-
syntaxError(tok);
8565-
if (tok->str() != "for") {
8566-
if (isGarbageExpr(tok->next(), tok->linkAt(1), cpp && (mSettings.standards.cpp>=Standards::cppstd_t::CPP17)))
8567-
syntaxError(tok);
8571+
if (Token::simpleMatch(tok, "do {")) {
8572+
if (!Token::simpleMatch(tok->linkAt(1), "} while ("))
8573+
syntaxError(tok->linkAt(1));
8574+
if (!Token::simpleMatch(tok->linkAt(1)->linkAt(2), ") ;"))
8575+
syntaxError(tok->linkAt(1)->linkAt(2));
85688576
}
85698577
}
85708578

0 commit comments

Comments
 (0)