Initialize dynamic meta object extradata.
QMetaObject::invokeMethod attempts to deference the extradata for meta objects versions 6 and greater which is causing a crash in some of the qtquick1 tests. Change-Id: If5b2ca83b15de2cd558976c6b681dd5457c404d1 Reviewed-by: Chris Adams <christopher.adams@nokia.com> Reviewed-by: Kent Hansen <kent.hansen@nokia.com>
This commit is contained in:
parent
09900d3dc5
commit
979cb5a09e
@ -1432,6 +1432,7 @@ void QMetaObjectBuilder::fromRelocatableData(QMetaObject *output,
|
||||
output->d.superdata = superclass;
|
||||
output->d.stringdata = buf + stringdataOffset;
|
||||
output->d.data = reinterpret_cast<const uint *>(buf + dataOffset);
|
||||
output->d.extradata = 0;
|
||||
}
|
||||
|
||||
/*!
|
||||
|
@ -64,6 +64,7 @@ private slots:
|
||||
void staticMetacall();
|
||||
void copyMetaObject();
|
||||
void serialize();
|
||||
void relocatableData();
|
||||
void removeNotifySignal();
|
||||
|
||||
void usage_signal();
|
||||
@ -1028,6 +1029,39 @@ void tst_QMetaObjectBuilder::serialize()
|
||||
}
|
||||
}
|
||||
|
||||
void tst_QMetaObjectBuilder::relocatableData()
|
||||
{
|
||||
QMetaObjectBuilder builder;
|
||||
builder.setClassName("TestObject");
|
||||
|
||||
QMetaMethodBuilder intPropChanged = builder.addSignal("intPropChanged(int)");
|
||||
intPropChanged.setParameterNames(QList<QByteArray>() << "newIntPropValue");
|
||||
|
||||
QMetaPropertyBuilder prop = builder.addProperty("intProp", "int");
|
||||
prop.setNotifySignal(intPropChanged);
|
||||
|
||||
QMetaMethodBuilder voidSlotInt = builder.addSlot("voidSlotInt(int)");
|
||||
voidSlotInt.setParameterNames(QList<QByteArray>() << "slotIntArg");
|
||||
|
||||
QMetaMethodBuilder listInvokableQRealQString = builder.addMethod("listInvokableQRealQString(qreal,QString)");
|
||||
listInvokableQRealQString.setReturnType("QVariantList");
|
||||
listInvokableQRealQString.setParameterNames(QList<QByteArray>() << "qrealArg" << "qstringArg");
|
||||
|
||||
bool ok = false;
|
||||
QByteArray data = builder.toRelocatableData(&ok);
|
||||
QVERIFY(ok);
|
||||
|
||||
QMetaObjectBuilder builder2;
|
||||
QMetaObject meta2;
|
||||
builder2.fromRelocatableData(&meta2, &QObject::staticMetaObject, data);
|
||||
|
||||
QMetaObject *meta = builder.toMetaObject();
|
||||
|
||||
QVERIFY(sameMetaObject(meta, &meta2));
|
||||
free(meta);
|
||||
}
|
||||
|
||||
|
||||
// Check that removing a method updates notify signals appropriately
|
||||
void tst_QMetaObjectBuilder::removeNotifySignal()
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user