@@ -605,10 +605,10 @@ namespace {
605605 const Scope* scope = tok->scope ();
606606 if (!scope)
607607 return Break ();
608- if (Token::Match (tok-> link ()-> previous (), " )|else { " )) {
609- const Token* tok2 = tok-> link ()-> previous () ;
610- const bool inElse = Token::simpleMatch (tok2, " else { " ) ;
611- const bool inLoop = inElse ? false : Token::Match (tok2-> link ()-> previous (), " while|for ( " );
608+ if (contains ({Scope::eDo, Scope::eFor, Scope::eWhile, Scope::eIf, Scope::eElse}, scope-> type )) {
609+ const bool inElse = scope-> type == Scope::eElse ;
610+ const bool inDoWhile = scope-> type == Scope::eDo ;
611+ const bool inLoop = contains ({Scope::eDo, Scope::eFor, Scope::eWhile}, scope-> type );
612612 Token* condTok = getCondTokFromEnd (tok);
613613 if (!condTok)
614614 return Break ();
@@ -637,19 +637,14 @@ namespace {
637637 }
638638 }
639639 analyzer->assume (condTok, !inElse, Analyzer::Assume::Quiet);
640- if (Token::simpleMatch (tok, " } else {" ))
640+ assert (!inDoWhile || Token::simpleMatch (tok, " } while (" ));
641+ if (Token::simpleMatch (tok, " } else {" ) || inDoWhile)
641642 tok = tok->linkAt (2 );
642- } else if (scope-> type == Scope::eTry) {
643+ } else if (contains ({ Scope::eTry, Scope::eCatch}, scope-> type ) ) {
643644 if (!analyzer->lowerToPossible ())
644645 return Break (Analyzer::Terminate::Bail);
645646 } else if (scope->type == Scope::eLambda) {
646647 return Break ();
647- } else if (scope->type == Scope::eDo && Token::simpleMatch (tok, " } while (" )) {
648- if (updateLoopExit (end, tok, tok->tokAt (2 )->astOperand2 ()) == Progress::Break)
649- return Break ();
650- tok = tok->linkAt (2 );
651- } else if (Token::simpleMatch (tok->next (), " else {" )) {
652- tok = tok->linkAt (2 );
653648 }
654649 } else if (tok->isControlFlowKeyword () && Token::Match (tok, " if|while|for (" ) &&
655650 Token::simpleMatch (tok->next ()->link (), " ) {" )) {
0 commit comments