diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/corelib/kernel/qmetaobject.cpp | 14 | ||||
-rw-r--r-- | src/corelib/kernel/qmetaobjectbuilder.cpp | 44 | ||||
-rw-r--r-- | src/corelib/kernel/qmetaobjectbuilder_p.h | 2 | ||||
-rw-r--r-- | src/corelib/kernel/qobject.cpp | 3 | ||||
-rw-r--r-- | src/corelib/kernel/qobjectdefs.h | 19 | ||||
-rw-r--r-- | src/corelib/statemachine/qstatemachine.cpp | 6 | ||||
-rw-r--r-- | src/dbus/qdbusabstractadaptor.cpp | 6 | ||||
-rw-r--r-- | src/dbus/qdbusmetaobject.cpp | 4 | ||||
-rw-r--r-- | src/tools/moc/generator.cpp | 30 | ||||
-rw-r--r-- | src/tools/moc/outputrevision.h | 2 |
10 files changed, 42 insertions, 88 deletions
diff --git a/src/corelib/kernel/qmetaobject.cpp b/src/corelib/kernel/qmetaobject.cpp index 359dbfcf23..4414393d37 100644 --- a/src/corelib/kernel/qmetaobject.cpp +++ b/src/corelib/kernel/qmetaobject.cpp @@ -288,11 +288,10 @@ QObject *QMetaObject::newInstance(QGenericArgument val0, */ int QMetaObject::static_metacall(Call cl, int idx, void **argv) const { - const QMetaObjectExtraData *extra = reinterpret_cast<const QMetaObjectExtraData *>(d.extradata); Q_ASSERT(priv(d.data)->revision >= 6); - if (!extra || !extra->static_metacall) + if (!d.static_metacall) return 0; - extra->static_metacall(0, cl, idx, argv); + d.static_metacall(0, cl, idx, argv); return -1; } @@ -863,11 +862,9 @@ static const QMetaObject *QMetaObject_findMetaObject(const QMetaObject *self, co while (self) { if (strcmp(rawStringData(self, 0), name) == 0) return self; - if (self->d.extradata) { - const QMetaObject **e; + if (self->d.relatedMetaObjects) { Q_ASSERT(priv(self->d.data)->revision >= 2); - const QMetaObjectExtraData *extra = (const QMetaObjectExtraData*)(self->d.extradata); - e = extra->objects; + const QMetaObject **e = self->d.relatedMetaObjects; if (e) { while (*e) { if (const QMetaObject *m =QMetaObject_findMetaObject((*e), name)) @@ -2024,8 +2021,7 @@ bool QMetaMethod::invoke(QObject *object, int idx_relative = ((handle - priv(mobj->d.data)->methodData) / 5); int idx_offset = mobj->methodOffset(); Q_ASSERT(QMetaObjectPrivate::get(mobj)->revision >= 6); - QObjectPrivate::StaticMetaCallFunction callFunction = mobj->d.extradata - ? reinterpret_cast<const QMetaObjectExtraData *>(mobj->d.extradata)->static_metacall : 0; + QObjectPrivate::StaticMetaCallFunction callFunction = mobj->d.static_metacall; if (connectionType == Qt::DirectConnection) { if (callFunction) { diff --git a/src/corelib/kernel/qmetaobjectbuilder.cpp b/src/corelib/kernel/qmetaobjectbuilder.cpp index 1dda9f2f05..7736181463 100644 --- a/src/corelib/kernel/qmetaobjectbuilder.cpp +++ b/src/corelib/kernel/qmetaobjectbuilder.cpp @@ -737,13 +737,8 @@ void QMetaObjectBuilder::addMetaObject } if ((members & RelatedMetaObjects) != 0) { - const QMetaObject **objects; Q_ASSERT(priv(prototype->d.data)->revision >= 2); - const QMetaObjectExtraData *extra = (const QMetaObjectExtraData *)(prototype->d.extradata); - if (extra) - objects = extra->objects; - else - objects = 0; + const QMetaObject **objects = prototype->d.relatedMetaObjects; if (objects) { while (*objects != 0) { addRelatedMetaObject(*objects); @@ -754,10 +749,8 @@ void QMetaObjectBuilder::addMetaObject if ((members & StaticMetacall) != 0) { Q_ASSERT(priv(prototype->d.data)->revision >= 6); - const QMetaObjectExtraData *extra = - (const QMetaObjectExtraData *)(prototype->d.extradata); - if (extra && extra->static_metacall) - setStaticMetacallFunction(extra->static_metacall); + if (prototype->d.static_metacall) + setStaticMetacallFunction(prototype->d.static_metacall); } } @@ -1150,7 +1143,7 @@ static int aggregateParameterCount(const QList<QMetaMethodBuilderPrivate> &metho // Build a QMetaObject in "buf" based on the information in "d". // If "buf" is null, then return the number of bytes needed to // build the QMetaObject. Returns -1 if the metaobject if -// relocatable is set, but the metaobject contains extradata. +// relocatable is set, but the metaobject contains relatedMetaObjects. static int buildMetaObject(QMetaObjectBuilderPrivate *d, char *buf, int expectedSize, bool relocatable) { @@ -1174,7 +1167,9 @@ static int buildMetaObject(QMetaObjectBuilderPrivate *d, char *buf, ALIGN(size, int); if (buf) { if (!relocatable) meta->d.superdata = d->superClass; + meta->d.relatedMetaObjects = 0; meta->d.extradata = 0; + meta->d.static_metacall = d->staticMetacallFunction; } // Populate the QMetaObjectPrivate structure. @@ -1446,30 +1441,18 @@ static int buildMetaObject(QMetaObjectBuilderPrivate *d, char *buf, if (buf) data[enumIndex] = 0; - // Create the extradata block if we need one. - if (d->relatedMetaObjects.size() > 0 || d->staticMetacallFunction) { - ALIGN(size, QMetaObject **); - ALIGN(size, QMetaObjectBuilder::StaticMetacallFunction); - QMetaObjectExtraData *extra = - reinterpret_cast<QMetaObjectExtraData *>(buf + size); - size += sizeof(QMetaObjectExtraData); + // Create the relatedMetaObjects block if we need one. + if (d->relatedMetaObjects.size() > 0) { ALIGN(size, QMetaObject *); const QMetaObject **objects = reinterpret_cast<const QMetaObject **>(buf + size); if (buf) { - if (d->relatedMetaObjects.size() > 0) { - extra->objects = objects; - for (index = 0; index < d->relatedMetaObjects.size(); ++index) - objects[index] = d->relatedMetaObjects[index]; - objects[index] = 0; - } else { - extra->objects = 0; - } - extra->static_metacall = d->staticMetacallFunction; - meta->d.extradata = reinterpret_cast<void *>(extra); + meta->d.relatedMetaObjects = objects; + for (index = 0; index < d->relatedMetaObjects.size(); ++index) + objects[index] = d->relatedMetaObjects[index]; + objects[index] = 0; } - if (d->relatedMetaObjects.size() > 0) - size += sizeof(QMetaObject *) * (d->relatedMetaObjects.size() + 1); + size += sizeof(QMetaObject *) * (d->relatedMetaObjects.size() + 1); } // Align the final size and return it. @@ -1552,6 +1535,7 @@ void QMetaObjectBuilder::fromRelocatableData(QMetaObject *output, output->d.stringdata = reinterpret_cast<const QByteArrayData *>(buf + stringdataOffset); output->d.data = reinterpret_cast<const uint *>(buf + dataOffset); output->d.extradata = 0; + output->d.relatedMetaObjects = 0; } /*! diff --git a/src/corelib/kernel/qmetaobjectbuilder_p.h b/src/corelib/kernel/qmetaobjectbuilder_p.h index 4d766a9197..7c18298d35 100644 --- a/src/corelib/kernel/qmetaobjectbuilder_p.h +++ b/src/corelib/kernel/qmetaobjectbuilder_p.h @@ -165,7 +165,7 @@ public: int indexOfEnumerator(const QByteArray& name); int indexOfClassInfo(const QByteArray& name); - typedef QMetaObjectExtraData::StaticMetacallFunction StaticMetacallFunction; + typedef void (*StaticMetacallFunction)(QObject *, QMetaObject::Call, int, void **); QMetaObjectBuilder::StaticMetacallFunction staticMetacallFunction() const; void setStaticMetacallFunction(QMetaObjectBuilder::StaticMetacallFunction value); diff --git a/src/corelib/kernel/qobject.cpp b/src/corelib/kernel/qobject.cpp index ecf58a00ea..35b46b2823 100644 --- a/src/corelib/kernel/qobject.cpp +++ b/src/corelib/kernel/qobject.cpp @@ -2949,8 +2949,7 @@ QObjectPrivate::Connection *QMetaObjectPrivate::connect(const QObject *sender, i int method_offset = rmeta ? rmeta->methodOffset() : 0; Q_ASSERT(!rmeta || QMetaObjectPrivate::get(rmeta)->revision >= 6); QObjectPrivate::StaticMetaCallFunction callFunction = - (rmeta && rmeta->d.extradata) - ? reinterpret_cast<const QMetaObjectExtraData *>(rmeta->d.extradata)->static_metacall : 0; + rmeta ? rmeta->d.static_metacall : 0; QOrderedMutexLocker locker(signalSlotLock(sender), signalSlotLock(receiver)); diff --git a/src/corelib/kernel/qobjectdefs.h b/src/corelib/kernel/qobjectdefs.h index a52961bab7..cc442457b0 100644 --- a/src/corelib/kernel/qobjectdefs.h +++ b/src/corelib/kernel/qobjectdefs.h @@ -57,7 +57,7 @@ struct QByteArrayData; class QString; #ifndef Q_MOC_OUTPUT_REVISION -#define Q_MOC_OUTPUT_REVISION 65 +#define Q_MOC_OUTPUT_REVISION 66 #endif // The following macros are our "extensions" to C++ @@ -160,7 +160,6 @@ public: \ QT_TR_FUNCTIONS \ virtual int qt_metacall(QMetaObject::Call, int, void **); \ private: \ - Q_DECL_HIDDEN static const QMetaObjectExtraData staticMetaObjectExtraData; \ Q_DECL_HIDDEN_STATIC_METACALL static void qt_static_metacall(QObject *, QMetaObject::Call, int, void **); /* tmake ignore Q_OBJECT */ @@ -453,7 +452,10 @@ struct Q_CORE_EXPORT QMetaObject const QMetaObject *superdata; const QByteArrayData *stringdata; const uint *data; - const void *extradata; + typedef void (*StaticMetacallFunction)(QObject *, QMetaObject::Call, int, void **); + StaticMetacallFunction static_metacall; + const QMetaObject **relatedMetaObjects; + void *extradata; //reserved for future use } d; }; @@ -481,17 +483,6 @@ public: #endif }; -typedef const QMetaObject& (*QMetaObjectAccessor)(); - -struct QMetaObjectExtraData -{ - const QMetaObject **objects; - - typedef void (*StaticMetacallFunction)(QObject *, QMetaObject::Call, int, void **); //from revision 6 - //typedef int (*StaticMetaCall)(QMetaObject::Call, int, void **); //used from revison 2 until revison 5 - StaticMetacallFunction static_metacall; -}; - inline const QMetaObject *QMetaObject::superClass() const { return d.superdata; } diff --git a/src/corelib/statemachine/qstatemachine.cpp b/src/corelib/statemachine/qstatemachine.cpp index 4bb000a646..b8f7954e33 100644 --- a/src/corelib/statemachine/qstatemachine.cpp +++ b/src/corelib/statemachine/qstatemachine.cpp @@ -2265,13 +2265,9 @@ void QSignalEventGenerator::qt_static_metacall(QObject *_o, QMetaObject::Call _c Q_UNUSED(_a); } -const QMetaObjectExtraData QSignalEventGenerator::staticMetaObjectExtraData = { - 0, qt_static_metacall -}; - const QMetaObject QSignalEventGenerator::staticMetaObject = { { &QObject::staticMetaObject, qt_meta_stringdata_QSignalEventGenerator.data, - qt_meta_data_QSignalEventGenerator, &staticMetaObjectExtraData } + qt_meta_data_QSignalEventGenerator, qt_static_metacall, 0, 0 } }; const QMetaObject *QSignalEventGenerator::metaObject() const diff --git a/src/dbus/qdbusabstractadaptor.cpp b/src/dbus/qdbusabstractadaptor.cpp index dda20cde04..39584c436c 100644 --- a/src/dbus/qdbusabstractadaptor.cpp +++ b/src/dbus/qdbusabstractadaptor.cpp @@ -395,13 +395,9 @@ void QDBusAdaptorConnector::qt_static_metacall(QObject *_o, QMetaObject::Call _c } } -const QMetaObjectExtraData QDBusAdaptorConnector::staticMetaObjectExtraData = { - 0, qt_static_metacall -}; - const QMetaObject QDBusAdaptorConnector::staticMetaObject = { { &QObject::staticMetaObject, qt_meta_stringdata_QDBusAdaptorConnector.data, - qt_meta_data_QDBusAdaptorConnector, &staticMetaObjectExtraData } + qt_meta_data_QDBusAdaptorConnector, qt_static_metacall, 0, 0 } }; const QMetaObject *QDBusAdaptorConnector::metaObject() const diff --git a/src/dbus/qdbusmetaobject.cpp b/src/dbus/qdbusmetaobject.cpp index 4fbf67a8b2..5570dac71d 100644 --- a/src/dbus/qdbusmetaobject.cpp +++ b/src/dbus/qdbusmetaobject.cpp @@ -542,6 +542,8 @@ void QDBusMetaObjectGenerator::write(QDBusMetaObject *obj) // put the metaobject together obj->d.data = uint_data; + obj->d.relatedMetaObjects = 0; + obj->d.static_metacall = 0; obj->d.extradata = 0; obj->d.stringdata = reinterpret_cast<const QByteArrayData *>(string_data); obj->d.superdata = &QDBusAbstractInterface::staticMetaObject; @@ -564,6 +566,8 @@ void QDBusMetaObjectGenerator::writeWithoutXml(const QString &interface) stringdata[name.length()] = '\0'; d.data = reinterpret_cast<uint*>(header); + d.relatedMetaObjects = 0; + d.static_metacall = 0; d.extradata = 0; d.stringdata = stringdata; d.superdata = &QDBusAbstractInterface::staticMetaObject; diff --git a/src/tools/moc/generator.cpp b/src/tools/moc/generator.cpp index 74cdc5874c..5680dcba70 100644 --- a/src/tools/moc/generator.cpp +++ b/src/tools/moc/generator.cpp @@ -415,22 +415,6 @@ void Generator::generateCode() fprintf(out, " 0\n};\n\n"); } - bool hasExtraData = (cdef->hasQObject && !isQt) || !extraList.isEmpty(); - if (hasExtraData) { - fprintf(out, "const QMetaObjectExtraData %s::staticMetaObjectExtraData = {\n ", - cdef->qualified.constData()); - if (extraList.isEmpty()) - fprintf(out, "0, "); - else - fprintf(out, "qt_meta_extradata_%s, ", qualifiedClassNameIdentifier.constData()); - - if (cdef->hasQObject && !isQt) - fprintf(out, " qt_static_metacall"); - else - fprintf(out, " 0"); - fprintf(out, " \n};\n\n"); - } - // // Finally create and initialize the static meta object // @@ -448,16 +432,20 @@ void Generator::generateCode() fprintf(out, "qt_meta_stringdata_%s.data,\n" " qt_meta_data_%s, ", qualifiedClassNameIdentifier.constData(), qualifiedClassNameIdentifier.constData()); - if (!hasExtraData) - fprintf(out, "0 }\n"); + if (cdef->hasQObject && !isQt) + fprintf(out, " qt_static_metacall, "); else - fprintf(out, "&staticMetaObjectExtraData }\n"); - fprintf(out, "};\n"); + fprintf(out, " 0, "); + + if (extraList.isEmpty()) + fprintf(out, "0, "); + else + fprintf(out, "qt_meta_extradata_%s, ", qualifiedClassNameIdentifier.constData()); + fprintf(out, "0}\n};\n\n"); if(isQt) return; - if (!cdef->hasQObject) return; diff --git a/src/tools/moc/outputrevision.h b/src/tools/moc/outputrevision.h index cff0f98fca..590728db6c 100644 --- a/src/tools/moc/outputrevision.h +++ b/src/tools/moc/outputrevision.h @@ -43,6 +43,6 @@ #define OUTPUTREVISION_H // if the output revision changes, you MUST change it in qobjectdefs.h too -enum { mocOutputRevision = 65 }; // moc format output revision +enum { mocOutputRevision = 66 }; // moc format output revision #endif // OUTPUTREVISION_H |