comparison generator/abstractmetalang.h @ 310:5bcfe9e7db7f lifetime

Committing local changes
author maxter <spambox@d-coding.com>
date Wed, 23 Dec 2009 16:10:46 +0200
parents 90131f64c9c9
children
comparison
equal deleted inserted replaced
263:a7b313b8b149 310:5bcfe9e7db7f
782 bool inheritsFrom(const AbstractMetaClass *other) const; 782 bool inheritsFrom(const AbstractMetaClass *other) const;
783 783
784 void setForceShellClass(bool on) { m_force_shell_class = on; } 784 void setForceShellClass(bool on) { m_force_shell_class = on; }
785 bool generateShellClass() const; 785 bool generateShellClass() const;
786 786
787 bool hasVirtualSlots() const { return m_has_virtual_slots; } 787 bool hasVirtualSlots() const { return m_has_virtual_slots; }
788 bool hasVirtualFunctions() const { return !isFinal() && (m_has_virtuals || hasVirtualDestructor()); } 788
789 // returns true if this class has overridable virtual functions other than
790 // the virtual destructor if one exists.
791 bool hasVirtualFunctions() const { return !isFinal() && m_has_virtuals; }
792
793 // returns true if this class or its base classes define a
794 // virtual destructor
789 bool hasVirtualDestructor() const { return m_has_virtual_destructor 795 bool hasVirtualDestructor() const { return m_has_virtual_destructor
790 || (m_base_class && m_base_class->hasVirtualDestructor()); } 796 || m_base_class && m_base_class->hasVirtualDestructor(); }
797
798 // returns the uppermost base class having virtual functions
799 const AbstractMetaClass* polymorphicBase() const
800 {
801 const AbstractMetaClass* ret = this;
802 for (const AbstractMetaClass* base = this->m_base_class; base; base = base->m_base_class)
803 {
804 if (base->m_has_virtuals || base->m_has_virtual_destructor)
805 ret = base;
806 }
807 return ret;
808 }
809
810 // returns true if this class or its base classes have any virtual functions
811 bool isPolymorphic() const { return m_has_virtuals
812 || m_has_virtual_destructor
813 || m_base_class && m_base_class->isPolymorphic();
814 }
815
816 // returns the uppermost base class with virtual destructors
817 const AbstractMetaClass* virtualDestructorBase() const
818 {
819 const AbstractMetaClass* ret = NULL;
820 for (const AbstractMetaClass* base = this; base; base = base->m_base_class)
821 {
822 if (base->m_has_virtual_destructor)
823 ret = base;
824 }
825 return ret;
826 }
827
791 bool setHasVirtualDestructor(bool value) { m_has_virtual_destructor = value; } 828 bool setHasVirtualDestructor(bool value) { m_has_virtual_destructor = value; }
792 bool isPolymorphic() const { return typeEntry()->isObject() && (hasVirtualFunctions() || hasVirtualDestructor()); } 829
793 bool hasProtectedFunctions() const; 830 bool hasProtectedFunctions() const;
794 831
795 QList<TypeEntry *> templateArguments() const { return m_template_args; } 832 QList<TypeEntry *> templateArguments() const { return m_template_args; }
796 void setTemplateArguments(const QList<TypeEntry *> &args) { m_template_args = args; } 833 void setTemplateArguments(const QList<TypeEntry *> &args) { m_template_args = args; }
797 834