Mercurial > projects > qtd
diff generator/abstractmetalang.h @ 354:18bd68f586c6
removed superfluous destructors
author | Max Samukha <maxter@spambox.com> |
---|---|
date | Mon, 24 May 2010 23:43:30 +0300 |
parents | baaf74652f4c |
children | 9784459f0750 |
line wrap: on
line diff
--- a/generator/abstractmetalang.h Fri May 21 14:16:02 2010 +0300 +++ b/generator/abstractmetalang.h Mon May 24 23:43:30 2010 +0300 @@ -689,6 +689,7 @@ m_has_hash_function(false), m_has_equals_operator(false), m_has_clone_operator(false), + m_has_virtual_destructor(false), m_is_type_alias(false), m_enclosing_class(0), m_base_class(0), @@ -781,6 +782,51 @@ bool hasVirtualFunctions() const { return !isFinal() && m_has_virtuals; } bool hasProtectedFunctions() const; + // returns true if this class or its base classes have a + // virtual destructor + bool hasVirtualDestructor() const { return m_has_virtual_destructor + || m_base_class && m_base_class->hasVirtualDestructor(); } + + const AbstractMetaClass* destructorBase() const + { + const AbstractMetaClass* ret = this; + for (const AbstractMetaClass* base = this->m_base_class; base; base = base->m_base_class) { + if (base->m_has_virtual_destructor) + ret = base; + } + return ret; + } + + bool isDestructorBase() const + { + return this == destructorBase(); + } + + const AbstractMetaClass* polymorphicBase() const + { + const AbstractMetaClass *ret = 0; + + for (const AbstractMetaClass *base = this; base; base = base->baseClass()) { + if (base->m_has_virtuals || base->m_has_virtual_destructor) + ret = base; + } + + return ret; + } + + + + bool isPolymorphic() const + { + for (const AbstractMetaClass *base = this; base; base = base->baseClass()) { + if (base->m_has_virtuals || base->m_has_virtual_destructor) + return true; + } + return false; + } + + bool setHasVirtualDestructor(bool value) { m_has_virtual_destructor = value; } + QList<TypeEntry *> templateArguments() const { return m_template_args; } void setTemplateArguments(const QList<TypeEntry *> &args) { m_template_args = args; } @@ -864,7 +910,8 @@ uint m_has_equals_operator : 1; uint m_has_clone_operator :1; uint m_is_type_alias : 1; - uint m_reserved : 19; + uint m_has_virtual_destructor : 1; + uint m_reserved : 18; const AbstractMetaClass *m_enclosing_class; AbstractMetaClass *m_base_class;