@@ -1640,20 +1640,21 @@ void AbstractMetaClass::fixFunctions()
16401640
16411641 AbstractMetaClass *super_class = baseClass ();
16421642 AbstractMetaFunctionList funcs = functions ();
1643+ AbstractMetaClassList interfaceClasses = interfaces ();
16431644
16441645// printf("fix functions for %s\n", qPrintable(name()));
16451646
16461647 if (super_class != 0 )
16471648 super_class->fixFunctions ();
16481649 int iface_idx = 0 ;
1649- while (super_class || iface_idx < interfaces ().size ()) {
1650- // printf(" - base: %s\n", qPrintable(super_class->name()));
1650+ while (super_class || iface_idx < interfaceClasses.size ()) {
16511651
16521652 // Since we always traverse the complete hierarchy we are only
16531653 // interested in what each super class implements, not what
16541654 // we may have propagated from their base classes again.
16551655 AbstractMetaFunctionList super_funcs;
16561656 if (super_class) {
1657+ // printf(" - base: %s\n", qPrintable(super_class->name()));
16571658
16581659 // Super classes can never be final
16591660 if (super_class->isFinalInTargetLang ()) {
@@ -1662,7 +1663,10 @@ void AbstractMetaClass::fixFunctions()
16621663 }
16631664 super_funcs = super_class->queryFunctions (AbstractMetaClass::ClassImplements);
16641665 } else {
1665- super_funcs = interfaces ().at (iface_idx)->queryFunctions (AbstractMetaClass::NormalFunctions);
1666+ AbstractMetaClass *iface_class = interfaceClasses.at (iface_idx);
1667+ // printf(" - iface: %s\n", qPrintable(iface_class->name()));
1668+ iface_class->fixFunctions ();
1669+ super_funcs = iface_class->queryFunctions (AbstractMetaClass::NormalFunctions);
16661670 }
16671671
16681672 QSet<AbstractMetaFunction *> funcs_to_add;
@@ -1819,12 +1823,16 @@ void AbstractMetaClass::fixFunctions()
18191823 foreach (AbstractMetaFunction *f, funcs_to_add)
18201824 funcs << f->copy ();
18211825
1822- if (super_class)
1826+ if (super_class) {
1827+ interfaceClasses += super_class->interfaces ();
18231828 super_class = super_class->baseClass ();
1824- else
1829+ } else {
18251830 iface_idx++;
1831+ }
18261832 }
18271833
1834+ // printf("end fix functions for %s\n", qPrintable(name()));
1835+
18281836 bool hasPrivateConstructors = false ;
18291837 bool hasPublicConstructors = false ;
18301838 foreach (AbstractMetaFunction *func, funcs) {
0 commit comments