diff --git a/src/qml/qml/qqmltypecompiler.cpp b/src/qml/qml/qqmltypecompiler.cpp index f18a5dd1ae..11498c0f37 100644 --- a/src/qml/qml/qqmltypecompiler.cpp +++ b/src/qml/qml/qqmltypecompiler.cpp @@ -861,6 +861,10 @@ void QQmlComponentAndAliasResolver::findAndRegisterImplicitComponents( QmlIR::Binding *syntheticBinding = pool->New(); *syntheticBinding = *binding; + + // The synthetic binding inside Component has no name. It's just "Component { Foo {} }". + syntheticBinding->propertyNameIndex = 0; + syntheticBinding->type = QV4::CompiledData::Binding::Type_Object; QString error = syntheticComponent->appendBinding(syntheticBinding, /*isListBinding*/false); Q_ASSERT(error.isEmpty()); diff --git a/tests/auto/qml/qqmllanguage/data/componentMix.qml b/tests/auto/qml/qqmllanguage/data/componentMix.qml new file mode 100644 index 0000000000..d745ec5564 --- /dev/null +++ b/tests/auto/qml/qqmllanguage/data/componentMix.qml @@ -0,0 +1,13 @@ +import QtQml + +QtObject { + component View: QtObject { + default property Component delegate + } + + component Things : QtObject { + property QtObject view: View { delegate: QtObject {} } + } + + property Things things: Things {} +} diff --git a/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp b/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp index 8472462bb0..f8978fc0b2 100644 --- a/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp +++ b/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp @@ -393,6 +393,7 @@ private slots: void objectAsBroken(); void customValueTypes(); void valueTypeList(); + void componentMix(); private: QQmlEngine engine; @@ -6892,6 +6893,22 @@ void tst_qqmllanguage::valueTypeList() } } +void tst_qqmllanguage::componentMix() +{ + QQmlEngine engine; + QQmlComponent c(&engine, testFileUrl("componentMix.qml")); + QVERIFY2(c.isReady(), qPrintable(c.errorString())); + QScopedPointer o(c.create()); + QVERIFY(!o.isNull()); + QObject *things = qvariant_cast(o->property("things")); + QVERIFY(things); + QObject *view = qvariant_cast(things->property("view")); + QVERIFY(view); + QObject *delegate = qvariant_cast(view->property("delegate")); + QVERIFY(delegate); + QCOMPARE(delegate->metaObject(), &QQmlComponent::staticMetaObject); +} + QTEST_MAIN(tst_qqmllanguage) #include "tst_qqmllanguage.moc"