diff options
Diffstat (limited to 'src/declarative/qml/qmlvme.cpp')
-rw-r--r-- | src/declarative/qml/qmlvme.cpp | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/src/declarative/qml/qmlvme.cpp b/src/declarative/qml/qmlvme.cpp index 4ab205e..e9a0449 100644 --- a/src/declarative/qml/qmlvme.cpp +++ b/src/declarative/qml/qmlvme.cpp @@ -91,15 +91,14 @@ QmlVME::QmlVME() struct ListInstance { - ListInstance() - : type(0), qmlListInterface(0) {} - ListInstance(int t) - : type(t), qmlListInterface(0) {} + ListInstance() {} + ListInstance(QList<void *> *q, int t) + : type(t), qListInterface(q), qmlListInterface(0) {} ListInstance(QmlPrivate::ListInterface *q, int t) - : type(t), qmlListInterface(q) {} + : type(t), qListInterface(0), qmlListInterface(q) {} int type; - QmlListProperty<void> qListProperty; + QList<void *> *qListInterface; QmlPrivate::ListInterface *qmlListInterface; }; @@ -670,7 +669,7 @@ QObject *QmlVME::run(QmlVMEStack<QObject *> &stack, QmlContext *ctxt, QObject *assign = stack.pop(); const ListInstance &list = qliststack.top(); - list.qListProperty.append((QmlListProperty<void>*)&list.qListProperty, assign); + list.qListInterface->append((void *)assign); } break; @@ -695,7 +694,7 @@ QObject *QmlVME::run(QmlVMEStack<QObject *> &stack, QmlContext *ctxt, void *d = (void *)&ptr; list.qmlListInterface->append(d); } else { - list.qListProperty.append((QmlListProperty<void>*)&list.qListProperty, ptr); + list.qListInterface->append(ptr); } } break; @@ -773,12 +772,17 @@ QObject *QmlVME::run(QmlVMEStack<QObject *> &stack, QmlContext *ctxt, { QObject *target = stack.top(); - qliststack.push(ListInstance(instr.fetchQmlList.type)); - void *a[1]; - a[0] = (void *)&(qliststack.top().qListProperty); + // We know that QList<T *>* can be converted to + // QList<void *>* + QList<void *> *list = 0; + a[0] = &list; QMetaObject::metacall(target, QMetaObject::ReadProperty, instr.fetchQmlList.property, a); + if (!list) + VME_EXCEPTION(QCoreApplication::translate("QmlVME","Cannot assign to null list")); + + qliststack.push(ListInstance(list, instr.fetchQmlList.type)); } break; |