summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/corelib/kernel/qmetaobject.cpp14
-rw-r--r--src/corelib/kernel/qmetaobjectbuilder.cpp44
-rw-r--r--src/corelib/kernel/qmetaobjectbuilder_p.h2
-rw-r--r--src/corelib/kernel/qobject.cpp3
-rw-r--r--src/corelib/kernel/qobjectdefs.h19
-rw-r--r--src/corelib/statemachine/qstatemachine.cpp6
-rw-r--r--src/dbus/qdbusabstractadaptor.cpp6
-rw-r--r--src/dbus/qdbusmetaobject.cpp4
-rw-r--r--src/tools/moc/generator.cpp30
-rw-r--r--src/tools/moc/outputrevision.h2
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