diff options
Diffstat (limited to 'abstractmetalang.cpp')
-rw-r--r-- | abstractmetalang.cpp | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/abstractmetalang.cpp b/abstractmetalang.cpp index b9a15d426..666101719 100644 --- a/abstractmetalang.cpp +++ b/abstractmetalang.cpp @@ -1270,8 +1270,8 @@ void AbstractMetaClass::setFunctions(const AbstractMetaFunctionList &functions) f->setOwnerClass(this); m_hasVirtualSlots = m_hasVirtualSlots || f->isVirtualSlot(); - m_hasVirtuals = m_hasVirtuals || !f->isFinal() || f->isVirtualSlot(); - m_isPolymorphic = m_isPolymorphic || m_hasVirtuals || hasVirtualDestructor(); + m_hasVirtuals = m_hasVirtuals || !f->isFinal() || f->isVirtualSlot() || hasVirtualDestructor(); + m_isPolymorphic = m_isPolymorphic || m_hasVirtuals; m_hasNonpublic = m_hasNonpublic || !f->isPublic(); // If we have non-virtual overloads of a virtual function, we have to implement @@ -1327,7 +1327,7 @@ void AbstractMetaClass::addFunction(AbstractMetaFunction *function) m_functions << function; m_hasVirtualSlots |= function->isVirtualSlot(); - m_hasVirtuals |= !function->isFinal() || function->isVirtualSlot(); + m_hasVirtuals |= !function->isFinal() || function->isVirtualSlot() || hasVirtualDestructor(); m_isPolymorphic |= m_hasVirtuals; m_hasNonpublic |= !function->isPublic(); } @@ -1563,6 +1563,7 @@ void AbstractMetaClass::addDefaultConstructor() uint attr = AbstractMetaAttributes::Native; attr |= AbstractMetaAttributes::Public; + attr |= AbstractMetaAttributes::Final; f->setAttributes(attr); f->setImplementingClass(this); f->setOriginalAttributes(f->attributes()); |