diff options
Diffstat (limited to 'src/qml/jsruntime/qv4function.cpp')
-rw-r--r-- | src/qml/jsruntime/qv4function.cpp | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/src/qml/jsruntime/qv4function.cpp b/src/qml/jsruntime/qv4function.cpp index 34b548113d..29e3d8d7ef 100644 --- a/src/qml/jsruntime/qv4function.cpp +++ b/src/qml/jsruntime/qv4function.cpp @@ -139,12 +139,16 @@ Function::Function(ExecutionEngine *engine, ExecutableCompilationUnit *unit, QQmlEnginePrivate *enginePrivate = QQmlEnginePrivate::get(engine->qmlEngine()); auto findMetaType = [&](const CompiledData::ParameterType ¶m) { + const quint32 type = param.typeNameIndexOrBuiltinType(); if (param.indexIsBuiltinType()) { + if (param.isList()) { + return QQmlPropertyCacheCreatorBase::listTypeForPropertyType( + QV4::CompiledData::BuiltinType(type)); + } return QQmlPropertyCacheCreatorBase::metaTypeForPropertyType( - QV4::CompiledData::BuiltinType(param.typeNameIndexOrBuiltinType())); + QV4::CompiledData::BuiltinType(type)); } - const quint32 type = param.typeNameIndexOrBuiltinType(); if (type == 0) return QMetaType(); @@ -152,18 +156,21 @@ Function::Function(ExecutionEngine *engine, ExecutableCompilationUnit *unit, if (!qmltype.isValid()) return QMetaType(); - const QMetaType metaType = qmltype.typeId(); + const QMetaType metaType = param.isList() ? qmltype.qListTypeId() : qmltype.typeId(); if (metaType.isValid()) return metaType; if (!qmltype.isComposite()) { - return qmltype.isInlineComponentType() - ? unit->typeIdsForComponent(qmltype.inlineComponentId()).id - : QMetaType(); + if (!qmltype.isInlineComponentType()) + return QMetaType(); + const CompositeMetaTypeIds typeIds + = unit->typeIdsForComponent(qmltype.inlineComponentId()); + return param.isList() ? typeIds.listId : typeIds.id; } - return enginePrivate->typeLoader.getType( - qmltype.sourceUrl())->compilationUnit()->typeIds.id; + const CompositeMetaTypeIds typeIds = enginePrivate->typeLoader.getType( + qmltype.sourceUrl())->compilationUnit()->typeIds; + return param.isList() ? typeIds.listId : typeIds.id; }; for (quint16 i = 0; i < nFormals; ++i) |