Add missing else that could cause an extra try scope to be added to the scope list (#8025)

Add an optional extended description…
This commit is contained in:
IOBYTE 2017-04-30 02:58:41 -04:00 committed by PKEuS
parent 14be611a7e
commit 8a668aa860
2 changed files with 23 additions and 1 deletions

View File

@ -786,7 +786,7 @@ void SymbolDatabase::createSymbolDatabaseFindAllScopes()
const Token* tok1 = tok->next();
if (tok->str() == "else")
scopeList.push_back(Scope(this, tok, scope, Scope::eElse, tok1));
if (tok->str() == "do")
else if (tok->str() == "do")
scopeList.push_back(Scope(this, tok, scope, Scope::eDo, tok1));
else //if (tok->str() == "try")
scopeList.push_back(Scope(this, tok, scope, Scope::eTry, tok1));

View File

@ -254,6 +254,7 @@ private:
TEST_CASE(symboldatabase54); // #7257
TEST_CASE(symboldatabase55); // #7767 (return unknown macro)
TEST_CASE(symboldatabase56); // #7909
TEST_CASE(symboldatabase57);
TEST_CASE(enum1);
TEST_CASE(enum2);
@ -2755,6 +2756,27 @@ private:
}
}
void symboldatabase57() {
GET_SYMBOL_DB("int bar(bool b)\n"
"{\n"
" if(b)\n"
" return 1;\n"
" else\n"
" return 1;\n"
"}");
ASSERT(db != nullptr);
if (db) {
ASSERT(db->scopeList.size() == 4U);
if (db->scopeList.size() == 4U) {
std::list<Scope>::const_iterator it = db->scopeList.begin();
ASSERT(it->type == Scope::eGlobal);
ASSERT((++it)->type == Scope::eFunction);
ASSERT((++it)->type == Scope::eIf);
ASSERT((++it)->type == Scope::eElse);
}
}
}
void enum1() {
GET_SYMBOL_DB("enum BOOL { FALSE, TRUE }; enum BOOL b;");