diff options
-rw-r--r-- | src/qml/qml/qqmlpropertycache.cpp | 2 | ||||
-rw-r--r-- | tests/auto/qml/qqmlecmascript/data/overrideDataAssert.qml | 6 | ||||
-rw-r--r-- | tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp | 11 |
3 files changed, 18 insertions, 1 deletions
diff --git a/src/qml/qml/qqmlpropertycache.cpp b/src/qml/qml/qqmlpropertycache.cpp index 8167280142..b073d22e71 100644 --- a/src/qml/qml/qqmlpropertycache.cpp +++ b/src/qml/qml/qqmlpropertycache.cpp @@ -1201,7 +1201,7 @@ void QQmlPropertyCache::toMetaObjectBuilder(QMetaObjectBuilder &builder) QQmlPropertyData *olddata = data; data = This->overrideData(data); - if (data) Insert::in(This, properties, methods, iter, data); + if (data && !data->isFunction()) Insert::in(This, properties, methods, iter, data); } else { if (data->coreIndex < This->propertyIndexCacheStart) return; diff --git a/tests/auto/qml/qqmlecmascript/data/overrideDataAssert.qml b/tests/auto/qml/qqmlecmascript/data/overrideDataAssert.qml new file mode 100644 index 0000000000..e419bd3beb --- /dev/null +++ b/tests/auto/qml/qqmlecmascript/data/overrideDataAssert.qml @@ -0,0 +1,6 @@ +import QtQuick 2.0 + +QtObject { + signal routeStatusChanged + function onRouteStatusChanged() { } +} diff --git a/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp b/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp index 4dc041c91a..45005e68c1 100644 --- a/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp +++ b/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp @@ -268,6 +268,7 @@ private slots: void qqmldataDestroyed(); void secondAlias(); void varAlias(); + void overrideDataAssert(); private: static void propertyVarWeakRefCallback(v8::Persistent<v8::Value> object, void* parameter); @@ -6961,6 +6962,16 @@ void tst_qqmlecmascript::varAlias() delete object; } +// Used to trigger an assert in the lazy meta object creation stage +void tst_qqmlecmascript::overrideDataAssert() +{ + QQmlComponent c(&engine, testFileUrl("overrideDataAssert.qml")); + QObject *object = c.create(); + QVERIFY(object != 0); + object->metaObject(); + delete object; +} + QTEST_MAIN(tst_qqmlecmascript) #include "tst_qqmlecmascript.moc" |