SymbolDatabase: Refactoring and testing isImplicitlyVirtual
This commit is contained in:
parent
b94d8fd686
commit
8310198cd5
|
@ -3196,7 +3196,8 @@ bool Function::isImplicitlyVirtual(bool defaultVal) const
|
||||||
{
|
{
|
||||||
if (isVirtual())
|
if (isVirtual())
|
||||||
return true;
|
return true;
|
||||||
else if (access == Private || access == Public || access == Protected) {
|
if (!nestedIn->isClassOrStruct())
|
||||||
|
return false;
|
||||||
bool safe = true;
|
bool safe = true;
|
||||||
bool hasVirt = isImplicitlyVirtual_rec(nestedIn->definedType, safe);
|
bool hasVirt = isImplicitlyVirtual_rec(nestedIn->definedType, safe);
|
||||||
if (hasVirt)
|
if (hasVirt)
|
||||||
|
@ -3205,8 +3206,6 @@ bool Function::isImplicitlyVirtual(bool defaultVal) const
|
||||||
return false;
|
return false;
|
||||||
else
|
else
|
||||||
return defaultVal;
|
return defaultVal;
|
||||||
} else
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Function::isImplicitlyVirtual_rec(const ::Type* baseType, bool& safe) const
|
bool Function::isImplicitlyVirtual_rec(const ::Type* baseType, bool& safe) const
|
||||||
|
|
|
@ -212,6 +212,8 @@ private:
|
||||||
TEST_CASE(functionArgs12); // #7661
|
TEST_CASE(functionArgs12); // #7661
|
||||||
TEST_CASE(functionArgs13); // #7697
|
TEST_CASE(functionArgs13); // #7697
|
||||||
|
|
||||||
|
TEST_CASE(functionImplicitlyVirtual);
|
||||||
|
|
||||||
TEST_CASE(namespaces1);
|
TEST_CASE(namespaces1);
|
||||||
TEST_CASE(namespaces2);
|
TEST_CASE(namespaces2);
|
||||||
TEST_CASE(namespaces3); // #3854 - unknown macro
|
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() {
|
void namespaces1() {
|
||||||
GET_SYMBOL_DB("namespace fred {\n"
|
GET_SYMBOL_DB("namespace fred {\n"
|
||||||
" namespace barney {\n"
|
" namespace barney {\n"
|
||||||
|
|
Loading…
Reference in New Issue