This commit is contained in:
parent
da32c5aecd
commit
ad858e92dc
|
@ -479,8 +479,10 @@ void SymbolDatabase::createSymbolDatabaseFindAllScopes()
|
||||||
|
|
||||||
// check for end of scope
|
// check for end of scope
|
||||||
else if (tok == scope->bodyEnd) {
|
else if (tok == scope->bodyEnd) {
|
||||||
access.erase(scope);
|
do {
|
||||||
scope = const_cast<Scope*>(scope->nestedIn);
|
access.erase(scope);
|
||||||
|
scope = const_cast<Scope*>(scope->nestedIn);
|
||||||
|
} while (scope->type != Scope::eGlobal && succeeds(tok, scope->bodyEnd));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
// check for end of init list
|
// check for end of init list
|
||||||
|
|
|
@ -372,6 +372,7 @@ private:
|
||||||
TEST_CASE(createSymbolDatabaseFindAllScopes2);
|
TEST_CASE(createSymbolDatabaseFindAllScopes2);
|
||||||
TEST_CASE(createSymbolDatabaseFindAllScopes3);
|
TEST_CASE(createSymbolDatabaseFindAllScopes3);
|
||||||
TEST_CASE(createSymbolDatabaseFindAllScopes4);
|
TEST_CASE(createSymbolDatabaseFindAllScopes4);
|
||||||
|
TEST_CASE(createSymbolDatabaseFindAllScopes5);
|
||||||
|
|
||||||
TEST_CASE(enum1);
|
TEST_CASE(enum1);
|
||||||
TEST_CASE(enum2);
|
TEST_CASE(enum2);
|
||||||
|
@ -5133,6 +5134,31 @@ private:
|
||||||
ASSERT(var1->variable());
|
ASSERT(var1->variable());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void createSymbolDatabaseFindAllScopes5()
|
||||||
|
{
|
||||||
|
GET_SYMBOL_DB("class C {\n"
|
||||||
|
"public:\n"
|
||||||
|
" template<typename T>\n"
|
||||||
|
" class D;\n"
|
||||||
|
" template<typename T>\n"
|
||||||
|
" struct O : public std::false_type {};\n"
|
||||||
|
"};\n"
|
||||||
|
"template<typename T>\n"
|
||||||
|
"struct C::O<std::optional<T>> : public std::true_type {};\n"
|
||||||
|
"template<typename T>\n"
|
||||||
|
"class C::D {};\n"
|
||||||
|
"struct S {\n"
|
||||||
|
" S(int i) : m(i) {}\n"
|
||||||
|
" static const S IN;\n"
|
||||||
|
" int m;\n"
|
||||||
|
"};\n"
|
||||||
|
"const S S::IN(1);\n");
|
||||||
|
ASSERT(db);
|
||||||
|
ASSERT_EQUALS(6, db->scopeList.size());
|
||||||
|
const Token* const var = Token::findsimplematch(tokenizer.tokens(), "IN (");
|
||||||
|
TODO_ASSERT(var && var->variable());
|
||||||
|
}
|
||||||
|
|
||||||
void enum1() {
|
void enum1() {
|
||||||
GET_SYMBOL_DB("enum BOOL { FALSE, TRUE }; enum BOOL b;");
|
GET_SYMBOL_DB("enum BOOL { FALSE, TRUE }; enum BOOL b;");
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue