diff options
-rw-r--r-- | abstractmetabuilder.cpp | 16 | ||||
-rw-r--r-- | abstractmetabuilder.h | 1 |
2 files changed, 14 insertions, 3 deletions
diff --git a/abstractmetabuilder.cpp b/abstractmetabuilder.cpp index 2c035ccab..8338791a1 100644 --- a/abstractmetabuilder.cpp +++ b/abstractmetabuilder.cpp @@ -473,6 +473,7 @@ bool AbstractMetaBuilder::build(QIODevice* input) // setupEquals(cls); // setupComparable(cls); setupClonable(cls); + setupExternalConversion(cls); // sort all inner classes topologically if (!cls->typeEntry()->codeGeneration() || cls->innerClasses().size() < 2) @@ -1173,9 +1174,6 @@ void AbstractMetaBuilder::fixReturnTypeOfConversionOperator(AbstractMetaFunction AbstractMetaType* metaType = createMetaType(); metaType->setTypeEntry(retType); metaFunction->setType(metaType); - - AbstractMetaClass* metaClass = m_metaClasses.findClass(castTo); - metaClass->addExternalConversionOperator(metaFunction); } void AbstractMetaBuilder::traverseFunctions(ScopeModelItem scopeItem, AbstractMetaClass *metaClass) @@ -2509,6 +2507,18 @@ void AbstractMetaBuilder::setupClonable(AbstractMetaClass *cls) cls->setHasCloneOperator(result); } +void AbstractMetaBuilder::setupExternalConversion(AbstractMetaClass* cls) { + AbstractMetaFunctionList convOps = cls->operatorOverloads(AbstractMetaClass::ConversionOp); + foreach (AbstractMetaFunction* func, convOps) { + AbstractMetaClass* metaClass = m_metaClasses.findClass(func->type()->typeEntry()); + if (!metaClass) + continue; + metaClass->addExternalConversionOperator(func); + } + foreach (AbstractMetaClass* innerClass, cls->innerClasses()) + setupExternalConversion(innerClass); +} + static void writeRejectLogFile(const QString &name, const QMap<QString, AbstractMetaBuilder::RejectReason> &rejects) { diff --git a/abstractmetabuilder.h b/abstractmetabuilder.h index dc38d3b1a..163067beb 100644 --- a/abstractmetabuilder.h +++ b/abstractmetabuilder.h @@ -128,6 +128,7 @@ public: void setupEquals(AbstractMetaClass *metaClass); void setupComparable(AbstractMetaClass *metaClass); void setupClonable(AbstractMetaClass *cls); + void setupExternalConversion(AbstractMetaClass* cls); void setupFunctionDefaults(AbstractMetaFunction *metaFunction, AbstractMetaClass *metaClass); QString fixDefaultValue(ArgumentModelItem item, AbstractMetaType *type, |