parent
640b561633
commit
10c1ac977c
|
@ -5050,14 +5050,19 @@ const Enumerator * SymbolDatabase::findEnumerator(const Token * tok, std::set<st
|
|||
else {
|
||||
// FIXME search base class here
|
||||
|
||||
// find first scope
|
||||
while (scope && scope->nestedIn) {
|
||||
const Scope * temp = scope->nestedIn->findRecordInNestedList(tok1->str());
|
||||
if (temp) {
|
||||
scope = temp;
|
||||
break;
|
||||
const Scope* temp{};
|
||||
if (scope->functionOf && (temp = scope->functionOf->findRecordInNestedList(tok1->str()))) {
|
||||
scope = temp;
|
||||
} else {
|
||||
// find first scope
|
||||
while (scope && scope->nestedIn) {
|
||||
temp = scope->nestedIn->findRecordInNestedList(tok1->str());
|
||||
if (temp) {
|
||||
scope = temp;
|
||||
break;
|
||||
}
|
||||
scope = scope->nestedIn;
|
||||
}
|
||||
scope = scope->nestedIn;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -389,6 +389,7 @@ private:
|
|||
TEST_CASE(enum12);
|
||||
TEST_CASE(enum13);
|
||||
TEST_CASE(enum14);
|
||||
TEST_CASE(enum15);
|
||||
|
||||
TEST_CASE(sizeOfType);
|
||||
|
||||
|
@ -5825,6 +5826,25 @@ private:
|
|||
ASSERT_EQUALS(f->valueType()->type, ValueType::Type::INT);
|
||||
}
|
||||
|
||||
void enum15() {
|
||||
GET_SYMBOL_DB("struct S {\n"
|
||||
" S();\n"
|
||||
" enum E { E0 };\n"
|
||||
"};\n"
|
||||
"S::S() {\n"
|
||||
" E e = E::E0;\n"
|
||||
"}\n");
|
||||
ASSERT(db != nullptr);
|
||||
auto it = db->scopeList.begin();
|
||||
std::advance(it, 2);
|
||||
const Enumerator* E0 = it->findEnumerator("E0");
|
||||
ASSERT(E0 && E0->value_known && E0->value == 0);
|
||||
std::advance(it, 1);
|
||||
const Token* const e = Token::findsimplematch(tokenizer.tokens(), "E0 ;");
|
||||
ASSERT(e && e->enumerator());
|
||||
ASSERT_EQUALS(E0, e->enumerator());
|
||||
}
|
||||
|
||||
void sizeOfType() {
|
||||
// #7615 - crash in Symboldatabase::sizeOfType()
|
||||
GET_SYMBOL_DB("enum e;\n"
|
||||
|
|
Loading…
Reference in New Issue