SymbolDatabase: Refactoring and testing isImplicitlyVirtual
This commit is contained in:
parent
b94d8fd686
commit
8310198cd5
|
@ -3196,17 +3196,16 @@ bool Function::isImplicitlyVirtual(bool defaultVal) const
|
|||
{
|
||||
if (isVirtual())
|
||||
return true;
|
||||
else if (access == Private || access == Public || access == Protected) {
|
||||
bool safe = true;
|
||||
bool hasVirt = isImplicitlyVirtual_rec(nestedIn->definedType, safe);
|
||||
if (hasVirt)
|
||||
return true;
|
||||
else if (safe)
|
||||
return false;
|
||||
else
|
||||
return defaultVal;
|
||||
} else
|
||||
if (!nestedIn->isClassOrStruct())
|
||||
return false;
|
||||
bool safe = true;
|
||||
bool hasVirt = isImplicitlyVirtual_rec(nestedIn->definedType, safe);
|
||||
if (hasVirt)
|
||||
return true;
|
||||
else if (safe)
|
||||
return false;
|
||||
else
|
||||
return defaultVal;
|
||||
}
|
||||
|
||||
bool Function::isImplicitlyVirtual_rec(const ::Type* baseType, bool& safe) const
|
||||
|
|
|
@ -212,6 +212,8 @@ private:
|
|||
TEST_CASE(functionArgs12); // #7661
|
||||
TEST_CASE(functionArgs13); // #7697
|
||||
|
||||
TEST_CASE(functionImplicitlyVirtual);
|
||||
|
||||
TEST_CASE(namespaces1);
|
||||
TEST_CASE(namespaces2);
|
||||
TEST_CASE(namespaces3); // #3854 - unknown macro
|
||||
|
@ -2065,6 +2067,18 @@ private:
|
|||
}
|
||||
}
|
||||
|
||||
void functionImplicitlyVirtual() {
|
||||
GET_SYMBOL_DB("class base { virtual void f(); };\n"
|
||||
"class derived : base { void f(); };\n"
|
||||
"void derived::f() {}");
|
||||
ASSERT(db != nullptr);
|
||||
if (!db)
|
||||
return;
|
||||
ASSERT_EQUALS(4, db->scopeList.size());
|
||||
const Function *function = db->scopeList.back().function;
|
||||
ASSERT_EQUALS(true, function && function->isImplicitlyVirtual(false));
|
||||
}
|
||||
|
||||
void namespaces1() {
|
||||
GET_SYMBOL_DB("namespace fred {\n"
|
||||
" namespace barney {\n"
|
||||
|
|
Loading…
Reference in New Issue