diff --git a/src/core/kernel/qmetaobject.cpp b/src/core/kernel/qmetaobject.cpp index 2ff4dfd9d..2275e54a3 100644 --- a/src/core/kernel/qmetaobject.cpp +++ b/src/core/kernel/qmetaobject.cpp @@ -401,8 +401,7 @@ int QMetaObject::classInfoOffset() const */ int QMetaObject::constructorCount() const { - if (priv(d.data)->revision < 2) - return 0; + Q_ASSERT(priv(d.data)->revision >= 6); return priv(d.data)->constructorCount; } @@ -488,34 +487,21 @@ int QMetaObject::classInfoCount() const * helper function for indexOf{Method,Slot,Signal}, returns the relative index of the method within * the baseObject * \a MethodType might be MethodSignal or MethodSlot, or 0 to match everything. -* \a normalizeStringData set to true if we should do a second pass for old moc generated files normalizing all the symbols. */ template static inline int indexOfMethodRelative(const QMetaObject **baseObject, - const char *method, - bool normalizeStringData) + const char *method) { for (const QMetaObject *m = *baseObject; m; m = m->d.superdata) { - int i = (MethodType == MethodSignal && priv(m->d.data)->revision >= 4) + Q_ASSERT(priv(m->d.data)->revision >= 6); + int i = (MethodType == MethodSignal) ? (priv(m->d.data)->signalCount - 1) : (priv(m->d.data)->methodCount - 1); - const int end = (MethodType == MethodSlot && priv(m->d.data)->revision >= 4) - ? (priv(m->d.data)->signalCount) : 0; - if (!normalizeStringData) { - for (; i >= end; --i) { - const char *stringdata = m->d.stringdata + m->d.data[priv(m->d.data)->methodData + 5*i]; - if (method[0] == stringdata[0] && strcmp(method + 1, stringdata + 1) == 0) { - *baseObject = m; - return i; - } - } - } else if (priv(m->d.data)->revision < 5) { - for (; i >= end; --i) { - const char *stringdata = (m->d.stringdata + m->d.data[priv(m->d.data)->methodData + 5 * i]); - const QByteArray normalizedSignature = QMetaObject::normalizedSignature(stringdata); - if (normalizedSignature == method) { - *baseObject = m; - return i; - } + const int end = (MethodType == MethodSlot) ? (priv(m->d.data)->signalCount) : 0; + for (; i >= end; --i) { + const char *stringdata = m->d.stringdata + m->d.data[priv(m->d.data)->methodData + 5*i]; + if (method[0] == stringdata[0] && strcmp(method + 1, stringdata + 1) == 0) { + *baseObject = m; + return i; } } } @@ -535,8 +521,7 @@ static inline int indexOfMethodRelative(const QMetaObject **baseObject, */ int QMetaObject::indexOfConstructor(const char *constructor) const { - if (priv(d.data)->revision < 2) - return -1; + Q_ASSERT(priv(d.data)->revision >= 6); for (int i = priv(d.data)->constructorCount-1; i >= 0; --i) { const char *data = d.stringdata + d.data[priv(d.data)->constructorData + 5*i]; if (data[0] == constructor[0] && strcmp(constructor + 1, data + 1) == 0) { @@ -557,11 +542,7 @@ int QMetaObject::indexOfConstructor(const char *constructor) const int QMetaObject::indexOfMethod(const char *method) const { const QMetaObject *m = this; - int i = indexOfMethodRelative<0>(&m, method, false); - if (i < 0) { - m = this; - i = indexOfMethodRelative<0>(&m, method, true); - } + int i = indexOfMethodRelative<0>(&m, method); if (i >= 0) i += m->methodOffset(); return i; @@ -581,11 +562,7 @@ int QMetaObject::indexOfMethod(const char *method) const int QMetaObject::indexOfSignal(const char *signal) const { const QMetaObject *m = this; - int i = QMetaObjectPrivate::indexOfSignalRelative(&m, signal, false); - if (i < 0) { - m = this; - i = QMetaObjectPrivate::indexOfSignalRelative(&m, signal, true); - } + int i = QMetaObjectPrivate::indexOfSignalRelative(&m, signal); if (i >= 0) i += m->methodOffset(); return i; @@ -597,10 +574,9 @@ int QMetaObject::indexOfSignal(const char *signal) const \a baseObject will be adjusted to the enclosing QMetaObject, or 0 if the signal is not found */ int QMetaObjectPrivate::indexOfSignalRelative(const QMetaObject **baseObject, - const char *signal, - bool normalizeStringData) + const char *signal) { - int i = indexOfMethodRelative(baseObject, signal, normalizeStringData); + int i = indexOfMethodRelative(baseObject, signal); #ifndef QT_NO_DEBUG const QMetaObject *m = *baseObject; if (i >= 0 && m && m->d.superdata) { @@ -624,9 +600,7 @@ int QMetaObjectPrivate::indexOfSignalRelative(const QMetaObject **baseObject, int QMetaObject::indexOfSlot(const char *slot) const { const QMetaObject *m = this; - int i = QMetaObjectPrivate::indexOfSlotRelative(&m, slot, false); - if (i < 0) - i = QMetaObjectPrivate::indexOfSlotRelative(&m, slot, true); + int i = QMetaObjectPrivate::indexOfSlotRelative(&m, slot); if (i >= 0) i += m->methodOffset(); return i; @@ -634,10 +608,9 @@ int QMetaObject::indexOfSlot(const char *slot) const // same as indexOfSignalRelative but for slots. int QMetaObjectPrivate::indexOfSlotRelative(const QMetaObject **m, - const char *slot, - bool normalizeStringData) + const char *slot) { - return indexOfMethodRelative(m, slot, normalizeStringData); + return indexOfMethodRelative(m, slot); } static const QMetaObject *QMetaObject_findMetaObject(const QMetaObject *self, const char *name) @@ -714,7 +687,8 @@ int QMetaObject::indexOfProperty(const char *name) const m = m->d.superdata; } - if (priv(this->d.data)->revision >= 3 && (priv(this->d.data)->flags & DynamicMetaObject)) { + Q_ASSERT(priv(this->d.data)->revision >= 6); + if (priv(this->d.data)->flags & DynamicMetaObject) { QAbstractDynamicMetaObject *me = const_cast(static_cast(this)); @@ -755,9 +729,10 @@ int QMetaObject::indexOfClassInfo(const char *name) const */ QMetaMethod QMetaObject::constructor(int index) const { + Q_ASSERT(priv(d.data)->revision >= 6); int i = index; QMetaMethod result; - if (priv(d.data)->revision >= 2 && i >= 0 && i < priv(d.data)->constructorCount) { + if (i >= 0 && i < priv(d.data)->constructorCount) { result.mobj = this; result.handle = priv(d.data)->constructorData + 5*i; } diff --git a/src/core/kernel/qmetaobject_p.h b/src/core/kernel/qmetaobject_p.h index 744d5b8e7..d8fd2f76c 100644 --- a/src/core/kernel/qmetaobject_p.h +++ b/src/core/kernel/qmetaobject_p.h @@ -124,11 +124,9 @@ struct QMetaObjectPrivate { return reinterpret_cast(metaobject->d.data); } static int indexOfSignalRelative(const QMetaObject **baseObject, - const char* name, - bool normalizeStringData); + const char* name); static int indexOfSlotRelative(const QMetaObject **m, - const char *slot, - bool normalizeStringData); + const char *slot); static int originalClone(const QMetaObject *obj, int local_method_index); #ifndef QT_NO_QOBJECT diff --git a/src/core/kernel/qobject.cpp b/src/core/kernel/qobject.cpp index c144d38d7..4efe9e92f 100644 --- a/src/core/kernel/qobject.cpp +++ b/src/core/kernel/qobject.cpp @@ -2303,20 +2303,14 @@ bool QObject::connect(const QObject *sender, const char *signal, const QMetaObject *smeta = sender->metaObject(); const char *signal_arg = signal; ++signal; //skip code - int signal_index = QMetaObjectPrivate::indexOfSignalRelative(&smeta, signal, false); + int signal_index = QMetaObjectPrivate::indexOfSignalRelative(&smeta, signal); if (signal_index < 0) { // check for normalized signatures tmp_signal_name = QMetaObject::normalizedSignature(signal - 1); signal = tmp_signal_name.constData() + 1; smeta = sender->metaObject(); - signal_index = QMetaObjectPrivate::indexOfSignalRelative(&smeta, signal, false); - } - if (signal_index < 0) { - // re-use tmp_signal_name and signal from above - - smeta = sender->metaObject(); - signal_index = QMetaObjectPrivate::indexOfSignalRelative(&smeta, signal, true); + signal_index = QMetaObjectPrivate::indexOfSignalRelative(&smeta, signal); } if (signal_index < 0) { err_method_notfound(sender, signal_arg, "connect"); @@ -2341,10 +2335,10 @@ bool QObject::connect(const QObject *sender, const char *signal, int method_index_relative = -1; switch (membcode) { case QSLOT_CODE: - method_index_relative = QMetaObjectPrivate::indexOfSlotRelative(&rmeta, method, false); + method_index_relative = QMetaObjectPrivate::indexOfSlotRelative(&rmeta, method); break; case QSIGNAL_CODE: - method_index_relative = QMetaObjectPrivate::indexOfSignalRelative(&rmeta, method, false); + method_index_relative = QMetaObjectPrivate::indexOfSignalRelative(&rmeta, method); break; } @@ -2357,14 +2351,10 @@ bool QObject::connect(const QObject *sender, const char *signal, rmeta = receiver->metaObject(); switch (membcode) { case QSLOT_CODE: - method_index_relative = QMetaObjectPrivate::indexOfSlotRelative(&rmeta, method, false); - if (method_index_relative < 0) - method_index_relative = QMetaObjectPrivate::indexOfSlotRelative(&rmeta, method, true); + method_index_relative = QMetaObjectPrivate::indexOfSlotRelative(&rmeta, method); break; case QSIGNAL_CODE: - method_index_relative = QMetaObjectPrivate::indexOfSignalRelative(&rmeta, method, false); - if (method_index_relative < 0) - method_index_relative = QMetaObjectPrivate::indexOfSignalRelative(&rmeta, method, true); + method_index_relative = QMetaObjectPrivate::indexOfSignalRelative(&rmeta, method); break; } } @@ -2620,9 +2610,7 @@ bool QObject::disconnect(const QObject *sender, const char *signal, do { int signal_index = -1; if (signal) { - signal_index = QMetaObjectPrivate::indexOfSignalRelative(&smeta, signal, false); - if (signal_index < 0) - signal_index = QMetaObjectPrivate::indexOfSignalRelative(&smeta, signal, true); + signal_index = QMetaObjectPrivate::indexOfSignalRelative(&smeta, signal); if (signal_index < 0) break; signal_index = QMetaObjectPrivate::originalClone(smeta, signal_index); @@ -3349,9 +3337,7 @@ int QObjectPrivate::signalIndex(const char *signalName) const { Q_Q(const QObject); const QMetaObject *base = q->metaObject(); - int relative_index = QMetaObjectPrivate::indexOfSignalRelative(&base, signalName, false); - if (relative_index < 0) - relative_index = QMetaObjectPrivate::indexOfSignalRelative(&base, signalName, true); + int relative_index = QMetaObjectPrivate::indexOfSignalRelative(&base, signalName); if (relative_index < 0) return relative_index; relative_index = QMetaObjectPrivate::originalClone(base, relative_index);