aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--abstractmetabuilder.cpp16
-rw-r--r--abstractmetabuilder.h1
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,