diff options
Diffstat (limited to 'src/corelib')
-rw-r--r-- | src/corelib/global/qprocessordetection.h | 4 | ||||
-rw-r--r-- | src/corelib/io/qfilesystemwatcher_polling.cpp | 3 | ||||
-rw-r--r-- | src/corelib/io/qfilesystemwatcher_polling_p.h | 3 | ||||
-rw-r--r-- | src/corelib/io/qstandardpaths_mac.cpp | 2 | ||||
-rw-r--r-- | src/corelib/itemmodels/qidentityproxymodel.cpp | 80 | ||||
-rw-r--r-- | src/corelib/json/qjsondocument.h | 3 | ||||
-rw-r--r-- | src/corelib/json/qjsonparser.cpp | 7 | ||||
-rw-r--r-- | src/corelib/kernel/qmetaobject.cpp | 6 | ||||
-rw-r--r-- | src/corelib/kernel/qmetatype.cpp | 302 | ||||
-rw-r--r-- | src/corelib/kernel/qmetatype.h | 24 | ||||
-rw-r--r-- | src/corelib/kernel/qmetatype_p.h | 4 | ||||
-rw-r--r-- | src/corelib/kernel/qobject.cpp | 2 | ||||
-rw-r--r-- | src/corelib/kernel/qpointer.cpp | 1 | ||||
-rw-r--r-- | src/corelib/kernel/qpointer.h | 6 | ||||
-rw-r--r-- | src/corelib/tools/qregexp.cpp | 4 | ||||
-rw-r--r-- | src/corelib/tools/qsimd.cpp | 6 |
16 files changed, 140 insertions, 317 deletions
diff --git a/src/corelib/global/qprocessordetection.h b/src/corelib/global/qprocessordetection.h index d62794e706..04e0f19f06 100644 --- a/src/corelib/global/qprocessordetection.h +++ b/src/corelib/global/qprocessordetection.h @@ -58,6 +58,10 @@ Q_BYTE_ORDER appropriately for the target processor. For bi-endian processors, we try to auto-detect the byte order using the __BIG_ENDIAN__, __LITTLE_ENDIAN__, or __BYTE_ORDER__ preprocessor macros. + + Note: when adding support for new processors, be sure to update + config.tests/arch/arch.cpp to ensure that configure can detect the target + and host architectures. */ /* Machine byte-order, reuse preprocessor provided macros when available */ diff --git a/src/corelib/io/qfilesystemwatcher_polling.cpp b/src/corelib/io/qfilesystemwatcher_polling.cpp index 92d0a2b6b0..c29fe8c264 100644 --- a/src/corelib/io/qfilesystemwatcher_polling.cpp +++ b/src/corelib/io/qfilesystemwatcher_polling.cpp @@ -42,6 +42,8 @@ #include "qfilesystemwatcher_polling_p.h" #include <QtCore/qtimer.h> +#ifndef QT_NO_FILESYSTEMWATCHER + QT_BEGIN_NAMESPACE QPollingFileSystemWatcherEngine::QPollingFileSystemWatcherEngine(QObject *parent) @@ -149,3 +151,4 @@ void QPollingFileSystemWatcherEngine::timeout() } QT_END_NAMESPACE +#endif // !QT_NO_FILESYSTEMWATCHER diff --git a/src/corelib/io/qfilesystemwatcher_polling_p.h b/src/corelib/io/qfilesystemwatcher_polling_p.h index e50082c6d3..926c3baa07 100644 --- a/src/corelib/io/qfilesystemwatcher_polling_p.h +++ b/src/corelib/io/qfilesystemwatcher_polling_p.h @@ -62,6 +62,7 @@ #include "qfilesystemwatcher_p.h" +#ifndef QT_NO_FILESYSTEMWATCHER QT_BEGIN_NAMESPACE enum { PollingInterval = 1000 }; @@ -122,6 +123,6 @@ private: }; QT_END_NAMESPACE - +#endif // !QT_NO_FILESYSTEMWATCHER #endif // QFILESYSTEMWATCHER_POLLING_P_H diff --git a/src/corelib/io/qstandardpaths_mac.cpp b/src/corelib/io/qstandardpaths_mac.cpp index e3779220af..2890ead48a 100644 --- a/src/corelib/io/qstandardpaths_mac.cpp +++ b/src/corelib/io/qstandardpaths_mac.cpp @@ -97,7 +97,7 @@ static QString getFullPath(const FSRef &ref) { QByteArray ba(2048, 0); if (FSRefMakePath(&ref, reinterpret_cast<UInt8 *>(ba.data()), ba.size()) == noErr) - return QString::fromUtf8(ba).normalized(QString::NormalizationForm_C); + return QString::fromUtf8(ba.constData()).normalized(QString::NormalizationForm_C); return QString(); } diff --git a/src/corelib/itemmodels/qidentityproxymodel.cpp b/src/corelib/itemmodels/qidentityproxymodel.cpp index 1f95ac0660..9cac40469a 100644 --- a/src/corelib/itemmodels/qidentityproxymodel.cpp +++ b/src/corelib/itemmodels/qidentityproxymodel.cpp @@ -328,87 +328,87 @@ QVariant QIdentityProxyModel::headerData(int section, Qt::Orientation orientatio /*! \reimp */ -void QIdentityProxyModel::setSourceModel(QAbstractItemModel* sourceModel) +void QIdentityProxyModel::setSourceModel(QAbstractItemModel* newSourceModel) { beginResetModel(); - if (sourceModel) { - disconnect(sourceModel, SIGNAL(rowsAboutToBeInserted(const QModelIndex &, int, int)), + if (sourceModel()) { + disconnect(sourceModel(), SIGNAL(rowsAboutToBeInserted(const QModelIndex &, int, int)), this, SLOT(_q_sourceRowsAboutToBeInserted(const QModelIndex &, int, int))); - disconnect(sourceModel, SIGNAL(rowsInserted(const QModelIndex &, int, int)), + disconnect(sourceModel(), SIGNAL(rowsInserted(const QModelIndex &, int, int)), this, SLOT(_q_sourceRowsInserted(const QModelIndex &, int, int))); - disconnect(sourceModel, SIGNAL(rowsAboutToBeRemoved(const QModelIndex &, int, int)), + disconnect(sourceModel(), SIGNAL(rowsAboutToBeRemoved(const QModelIndex &, int, int)), this, SLOT(_q_sourceRowsAboutToBeRemoved(const QModelIndex &, int, int))); - disconnect(sourceModel, SIGNAL(rowsRemoved(const QModelIndex &, int, int)), + disconnect(sourceModel(), SIGNAL(rowsRemoved(const QModelIndex &, int, int)), this, SLOT(_q_sourceRowsRemoved(const QModelIndex &, int, int))); - disconnect(sourceModel, SIGNAL(rowsAboutToBeMoved(const QModelIndex &, int, int, const QModelIndex &, int)), + disconnect(sourceModel(), SIGNAL(rowsAboutToBeMoved(const QModelIndex &, int, int, const QModelIndex &, int)), this, SLOT(_q_sourceRowsAboutToBeMoved(const QModelIndex &, int, int, const QModelIndex &, int))); - disconnect(sourceModel, SIGNAL(rowsMoved(const QModelIndex &, int, int, const QModelIndex &, int)), + disconnect(sourceModel(), SIGNAL(rowsMoved(const QModelIndex &, int, int, const QModelIndex &, int)), this, SLOT(_q_sourceRowsMoved(const QModelIndex &, int, int, const QModelIndex &, int))); - disconnect(sourceModel, SIGNAL(columnsAboutToBeInserted(const QModelIndex &, int, int)), + disconnect(sourceModel(), SIGNAL(columnsAboutToBeInserted(const QModelIndex &, int, int)), this, SLOT(_q_sourceColumnsAboutToBeInserted(const QModelIndex &, int, int))); - disconnect(sourceModel, SIGNAL(columnsInserted(const QModelIndex &, int, int)), + disconnect(sourceModel(), SIGNAL(columnsInserted(const QModelIndex &, int, int)), this, SLOT(_q_sourceColumnsInserted(const QModelIndex &, int, int))); - disconnect(sourceModel, SIGNAL(columnsAboutToBeRemoved(const QModelIndex &, int, int)), + disconnect(sourceModel(), SIGNAL(columnsAboutToBeRemoved(const QModelIndex &, int, int)), this, SLOT(_q_sourceColumnsAboutToBeRemoved(const QModelIndex &, int, int))); - disconnect(sourceModel, SIGNAL(columnsRemoved(const QModelIndex &, int, int)), + disconnect(sourceModel(), SIGNAL(columnsRemoved(const QModelIndex &, int, int)), this, SLOT(_q_sourceColumnsRemoved(const QModelIndex &, int, int))); - disconnect(sourceModel, SIGNAL(columnsAboutToBeMoved(const QModelIndex &, int, int, const QModelIndex &, int)), + disconnect(sourceModel(), SIGNAL(columnsAboutToBeMoved(const QModelIndex &, int, int, const QModelIndex &, int)), this, SLOT(_q_sourceColumnsAboutToBeMoved(const QModelIndex &, int, int, const QModelIndex &, int))); - disconnect(sourceModel, SIGNAL(columnsMoved(const QModelIndex &, int, int, const QModelIndex &, int)), + disconnect(sourceModel(), SIGNAL(columnsMoved(const QModelIndex &, int, int, const QModelIndex &, int)), this, SLOT(_q_sourceColumnsMoved(const QModelIndex &, int, int, const QModelIndex &, int))); - disconnect(sourceModel, SIGNAL(modelAboutToBeReset()), + disconnect(sourceModel(), SIGNAL(modelAboutToBeReset()), this, SLOT(_q_sourceModelAboutToBeReset())); - disconnect(sourceModel, SIGNAL(modelReset()), + disconnect(sourceModel(), SIGNAL(modelReset()), this, SLOT(_q_sourceModelReset())); - disconnect(sourceModel, SIGNAL(dataChanged(const QModelIndex &, const QModelIndex &)), + disconnect(sourceModel(), SIGNAL(dataChanged(const QModelIndex &, const QModelIndex &)), this, SLOT(_q_sourceDataChanged(const QModelIndex &, const QModelIndex &))); - disconnect(sourceModel, SIGNAL(headerDataChanged(Qt::Orientation,int,int)), + disconnect(sourceModel(), SIGNAL(headerDataChanged(Qt::Orientation,int,int)), this, SLOT(_q_sourceHeaderDataChanged(Qt::Orientation,int,int))); - disconnect(sourceModel, SIGNAL(layoutAboutToBeChanged()), + disconnect(sourceModel(), SIGNAL(layoutAboutToBeChanged()), this, SLOT(_q_sourceLayoutAboutToBeChanged())); - disconnect(sourceModel, SIGNAL(layoutChanged()), + disconnect(sourceModel(), SIGNAL(layoutChanged()), this, SLOT(_q_sourceLayoutChanged())); } - QAbstractProxyModel::setSourceModel(sourceModel); + QAbstractProxyModel::setSourceModel(newSourceModel); - if (sourceModel) { - connect(sourceModel, SIGNAL(rowsAboutToBeInserted(const QModelIndex &, int, int)), + if (sourceModel()) { + connect(sourceModel(), SIGNAL(rowsAboutToBeInserted(const QModelIndex &, int, int)), SLOT(_q_sourceRowsAboutToBeInserted(const QModelIndex &, int, int))); - connect(sourceModel, SIGNAL(rowsInserted(const QModelIndex &, int, int)), + connect(sourceModel(), SIGNAL(rowsInserted(const QModelIndex &, int, int)), SLOT(_q_sourceRowsInserted(const QModelIndex &, int, int))); - connect(sourceModel, SIGNAL(rowsAboutToBeRemoved(const QModelIndex &, int, int)), + connect(sourceModel(), SIGNAL(rowsAboutToBeRemoved(const QModelIndex &, int, int)), SLOT(_q_sourceRowsAboutToBeRemoved(const QModelIndex &, int, int))); - connect(sourceModel, SIGNAL(rowsRemoved(const QModelIndex &, int, int)), + connect(sourceModel(), SIGNAL(rowsRemoved(const QModelIndex &, int, int)), SLOT(_q_sourceRowsRemoved(const QModelIndex &, int, int))); - connect(sourceModel, SIGNAL(rowsAboutToBeMoved(const QModelIndex &, int, int, const QModelIndex &, int)), + connect(sourceModel(), SIGNAL(rowsAboutToBeMoved(const QModelIndex &, int, int, const QModelIndex &, int)), SLOT(_q_sourceRowsAboutToBeMoved(const QModelIndex &, int, int, const QModelIndex &, int))); - connect(sourceModel, SIGNAL(rowsMoved(const QModelIndex &, int, int, const QModelIndex &, int)), + connect(sourceModel(), SIGNAL(rowsMoved(const QModelIndex &, int, int, const QModelIndex &, int)), SLOT(_q_sourceRowsMoved(const QModelIndex &, int, int, const QModelIndex &, int))); - connect(sourceModel, SIGNAL(columnsAboutToBeInserted(const QModelIndex &, int, int)), + connect(sourceModel(), SIGNAL(columnsAboutToBeInserted(const QModelIndex &, int, int)), SLOT(_q_sourceColumnsAboutToBeInserted(const QModelIndex &, int, int))); - connect(sourceModel, SIGNAL(columnsInserted(const QModelIndex &, int, int)), + connect(sourceModel(), SIGNAL(columnsInserted(const QModelIndex &, int, int)), SLOT(_q_sourceColumnsInserted(const QModelIndex &, int, int))); - connect(sourceModel, SIGNAL(columnsAboutToBeRemoved(const QModelIndex &, int, int)), + connect(sourceModel(), SIGNAL(columnsAboutToBeRemoved(const QModelIndex &, int, int)), SLOT(_q_sourceColumnsAboutToBeRemoved(const QModelIndex &, int, int))); - connect(sourceModel, SIGNAL(columnsRemoved(const QModelIndex &, int, int)), + connect(sourceModel(), SIGNAL(columnsRemoved(const QModelIndex &, int, int)), SLOT(_q_sourceColumnsRemoved(const QModelIndex &, int, int))); - connect(sourceModel, SIGNAL(columnsAboutToBeMoved(const QModelIndex &, int, int, const QModelIndex &, int)), + connect(sourceModel(), SIGNAL(columnsAboutToBeMoved(const QModelIndex &, int, int, const QModelIndex &, int)), SLOT(_q_sourceColumnsAboutToBeMoved(const QModelIndex &, int, int, const QModelIndex &, int))); - connect(sourceModel, SIGNAL(columnsMoved(const QModelIndex &, int, int, const QModelIndex &, int)), + connect(sourceModel(), SIGNAL(columnsMoved(const QModelIndex &, int, int, const QModelIndex &, int)), SLOT(_q_sourceColumnsMoved(const QModelIndex &, int, int, const QModelIndex &, int))); - connect(sourceModel, SIGNAL(modelAboutToBeReset()), + connect(sourceModel(), SIGNAL(modelAboutToBeReset()), SLOT(_q_sourceModelAboutToBeReset())); - connect(sourceModel, SIGNAL(modelReset()), + connect(sourceModel(), SIGNAL(modelReset()), SLOT(_q_sourceModelReset())); - connect(sourceModel, SIGNAL(dataChanged(const QModelIndex &, const QModelIndex &)), + connect(sourceModel(), SIGNAL(dataChanged(const QModelIndex &, const QModelIndex &)), SLOT(_q_sourceDataChanged(const QModelIndex &, const QModelIndex &))); - connect(sourceModel, SIGNAL(headerDataChanged(Qt::Orientation,int,int)), + connect(sourceModel(), SIGNAL(headerDataChanged(Qt::Orientation,int,int)), SLOT(_q_sourceHeaderDataChanged(Qt::Orientation,int,int))); - connect(sourceModel, SIGNAL(layoutAboutToBeChanged()), + connect(sourceModel(), SIGNAL(layoutAboutToBeChanged()), SLOT(_q_sourceLayoutAboutToBeChanged())); - connect(sourceModel, SIGNAL(layoutChanged()), + connect(sourceModel(), SIGNAL(layoutChanged()), SLOT(_q_sourceLayoutChanged())); } diff --git a/src/corelib/json/qjsondocument.h b/src/corelib/json/qjsondocument.h index 7eca0302db..e39dc6a27c 100644 --- a/src/corelib/json/qjsondocument.h +++ b/src/corelib/json/qjsondocument.h @@ -67,7 +67,8 @@ struct Q_CORE_EXPORT QJsonParseError IllegalNumber, StringEscapeSequence, StringUTF8Scan, - EndOfString + EndOfString, + MissingObject }; int offset; diff --git a/src/corelib/json/qjsonparser.cpp b/src/corelib/json/qjsonparser.cpp index a83685da22..b1e6a5a5c7 100644 --- a/src/corelib/json/qjsonparser.cpp +++ b/src/corelib/json/qjsonparser.cpp @@ -244,6 +244,10 @@ bool Parser::parseObject() if (token != ValueSeparator) break; token = nextToken(); + if (token == EndObject) { + lastError = QJsonParseError::MissingObject; + return false; + } } DEBUG << "end token=" << token; @@ -449,6 +453,9 @@ bool Parser::parseValue(QJsonPrivate::Value *val, int baseOffset) DEBUG << "value: object"; END; return true; + case EndArray: + lastError = QJsonParseError::MissingObject; + return false; default: --json; if (!parseNumber(val, baseOffset)) diff --git a/src/corelib/kernel/qmetaobject.cpp b/src/corelib/kernel/qmetaobject.cpp index a8c21657cb..185314520b 100644 --- a/src/corelib/kernel/qmetaobject.cpp +++ b/src/corelib/kernel/qmetaobject.cpp @@ -291,13 +291,13 @@ QObject *QMetaObject::newInstance(QGenericArgument val0, if (idx < 0) return 0; - QVariant ret(QMetaType::QObjectStar, (void*)0); - void *param[] = {ret.data(), val0.data(), val1.data(), val2.data(), val3.data(), val4.data(), + QObject *returnValue = 0; + void *param[] = {&returnValue, val0.data(), val1.data(), val2.data(), val3.data(), val4.data(), val5.data(), val6.data(), val7.data(), val8.data(), val9.data()}; if (static_metacall(CreateInstance, idx, param) >= 0) return 0; - return *reinterpret_cast<QObject**>(param[0]); + return returnValue; } /*! diff --git a/src/corelib/kernel/qmetatype.cpp b/src/corelib/kernel/qmetatype.cpp index a61894debd..8c2b5a8665 100644 --- a/src/corelib/kernel/qmetatype.cpp +++ b/src/corelib/kernel/qmetatype.cpp @@ -1066,6 +1066,60 @@ bool QMetaType::load(QDataStream &stream, int type, void *data) return true; } #endif // QT_NO_DATASTREAM +namespace { +class TypeCreator { + template<typename T, bool IsAcceptedType = DefinedTypesFilter::Acceptor<T>::IsAccepted> + struct CreatorImpl { + static void *Create(const int /* type */, const void *copy) + { + // Using qMetaTypeCreateHelper<T> adds function call cost, even if it is a template (gcc). + // This "copy" check is moved out from the switcher by compiler (at least by gcc) + return copy ? new T(*static_cast<const T*>(copy)) : new T(); + } + }; + template<typename T> + struct CreatorImpl<T, /* IsAcceptedType = */ false> { + static void *Create(const int type, const void *copy) + { + if (QTypeModuleInfo<T>::IsGui) { + if (Q_LIKELY(qMetaTypeGuiHelper)) + return qMetaTypeGuiHelper[type - QMetaType::FirstGuiType].creator(copy); + } + if (QTypeModuleInfo<T>::IsWidget) { + if (Q_LIKELY(qMetaTypeWidgetsHelper)) + return qMetaTypeWidgetsHelper[type - QMetaType::FirstWidgetsType].creator(copy); + } + // This point can be reached only for known types that definition is not available, for example + // in bootstrap mode. We have no other choice then ignore it. + return 0; + } + }; +public: + TypeCreator(const int type) + : m_type(type) + {} + + template<typename T> + void *delegate(const T *copy) { return CreatorImpl<T>::Create(m_type, copy); } + void *delegate(const void*) { return 0; } + void *delegate(const QMetaTypeSwitcher::UnknownType *) { return 0; } + void *delegate(const QMetaTypeSwitcher::NotBuiltinType *copy) + { + QMetaType::Creator creator; + const QVector<QCustomTypeInfo> * const ct = customTypes(); + { + QReadLocker locker(customTypesLock()); + if (Q_UNLIKELY(m_type < QMetaType::User || !ct || ct->count() <= m_type - QMetaType::User)) + return 0; + creator = ct->at(m_type - QMetaType::User).creator; + } + Q_ASSERT_X(creator, "void *QMetaType::create(int type, const void *copy)", "The type was not properly registered"); + return creator(copy); + } +private: + const int m_type; +}; +} // namespace /*! Returns a copy of \a copy, assuming it is of type \a type. If \a @@ -1075,244 +1129,8 @@ bool QMetaType::load(QDataStream &stream, int type, void *data) */ void *QMetaType::create(int type, const void *copy) { - if (copy) { - switch(type) { - case QMetaType::VoidStar: - case QMetaType::QObjectStar: - case QMetaType::QWidgetStar: - return new void *(*static_cast<void* const *>(copy)); - case QMetaType::Long: - return new long(*static_cast<const long*>(copy)); - case QMetaType::Int: - return new int(*static_cast<const int*>(copy)); - case QMetaType::Short: - return new short(*static_cast<const short*>(copy)); - case QMetaType::Char: - return new char(*static_cast<const char*>(copy)); - case QMetaType::ULong: - return new ulong(*static_cast<const ulong*>(copy)); - case QMetaType::UInt: - return new uint(*static_cast<const uint*>(copy)); - case QMetaType::LongLong: - return new qlonglong(*static_cast<const qlonglong*>(copy)); - case QMetaType::ULongLong: - return new qulonglong(*static_cast<const qulonglong*>(copy)); - case QMetaType::UShort: - return new ushort(*static_cast<const ushort*>(copy)); - case QMetaType::UChar: - return new uchar(*static_cast<const uchar*>(copy)); - case QMetaType::Bool: - return new bool(*static_cast<const bool*>(copy)); - case QMetaType::Float: - return new float(*static_cast<const float*>(copy)); - case QMetaType::Double: - return new double(*static_cast<const double*>(copy)); - case QMetaType::QChar: - return new NS(QChar)(*static_cast<const NS(QChar)*>(copy)); -#ifndef QT_BOOTSTRAPPED - case QMetaType::QVariantMap: - return new NS(QVariantMap)(*static_cast<const NS(QVariantMap)*>(copy)); - case QMetaType::QVariantHash: - return new NS(QVariantHash)(*static_cast<const NS(QVariantHash)*>(copy)); - case QMetaType::QVariantList: - return new NS(QVariantList)(*static_cast<const NS(QVariantList)*>(copy)); - case QMetaType::QVariant: - return new NS(QVariant)(*static_cast<const NS(QVariant)*>(copy)); -#endif - case QMetaType::QByteArray: - return new NS(QByteArray)(*static_cast<const NS(QByteArray)*>(copy)); - case QMetaType::QString: - return new NS(QString)(*static_cast<const NS(QString)*>(copy)); - case QMetaType::QStringList: - return new NS(QStringList)(*static_cast<const NS(QStringList)*>(copy)); -#ifndef QT_BOOTSTRAPPED - case QMetaType::QBitArray: - return new NS(QBitArray)(*static_cast<const NS(QBitArray)*>(copy)); -#endif - case QMetaType::QDate: - return new NS(QDate)(*static_cast<const NS(QDate)*>(copy)); - case QMetaType::QTime: - return new NS(QTime)(*static_cast<const NS(QTime)*>(copy)); - case QMetaType::QDateTime: - return new NS(QDateTime)(*static_cast<const NS(QDateTime)*>(copy)); -#ifndef QT_BOOTSTRAPPED - case QMetaType::QUrl: - return new NS(QUrl)(*static_cast<const NS(QUrl)*>(copy)); -#endif - case QMetaType::QLocale: - return new NS(QLocale)(*static_cast<const NS(QLocale)*>(copy)); -#ifndef QT_NO_GEOM_VARIANT - case QMetaType::QRect: - return new NS(QRect)(*static_cast<const NS(QRect)*>(copy)); - case QMetaType::QRectF: - return new NS(QRectF)(*static_cast<const NS(QRectF)*>(copy)); - case QMetaType::QSize: - return new NS(QSize)(*static_cast<const NS(QSize)*>(copy)); - case QMetaType::QSizeF: - return new NS(QSizeF)(*static_cast<const NS(QSizeF)*>(copy)); - case QMetaType::QLine: - return new NS(QLine)(*static_cast<const NS(QLine)*>(copy)); - case QMetaType::QLineF: - return new NS(QLineF)(*static_cast<const NS(QLineF)*>(copy)); - case QMetaType::QPoint: - return new NS(QPoint)(*static_cast<const NS(QPoint)*>(copy)); - case QMetaType::QPointF: - return new NS(QPointF)(*static_cast<const NS(QPointF)*>(copy)); -#endif -#ifndef QT_NO_REGEXP - case QMetaType::QRegExp: - return new NS(QRegExp)(*static_cast<const NS(QRegExp)*>(copy)); -#endif -#ifndef QT_BOOTSTRAPPED -#ifndef QT_NO_REGEXP - case QMetaType::QRegularExpression: - return new NS(QRegularExpression)(*static_cast<const NS(QRegularExpression)*>(copy)); -#endif // QT_NO_REGEXP - case QMetaType::QEasingCurve: - return new NS(QEasingCurve)(*static_cast<const NS(QEasingCurve)*>(copy)); -#endif // QT_BOOTSTRAPPED - case QMetaType::QUuid: - return new NS(QUuid)(*static_cast<const NS(QUuid)*>(copy)); -#ifndef QT_BOOTSTRAPPED - case QMetaType::QModelIndex: - return new NS(QModelIndex)(*static_cast<const NS(QModelIndex)*>(copy)); -#endif - case QMetaType::UnknownType: - case QMetaType::Void: - return 0; - default: - ; - } - } else { - switch(type) { - case QMetaType::VoidStar: - case QMetaType::QObjectStar: - case QMetaType::QWidgetStar: - return new void *; - case QMetaType::Long: - return new long; - case QMetaType::Int: - return new int; - case QMetaType::Short: - return new short; - case QMetaType::Char: - return new char; - case QMetaType::ULong: - return new ulong; - case QMetaType::UInt: - return new uint; - case QMetaType::LongLong: - return new qlonglong; - case QMetaType::ULongLong: - return new qulonglong; - case QMetaType::UShort: - return new ushort; - case QMetaType::UChar: - return new uchar; - case QMetaType::Bool: - return new bool; - case QMetaType::Float: - return new float; - case QMetaType::Double: - return new double; - case QMetaType::QChar: - return new NS(QChar); -#ifndef QT_BOOTSTRAPPED - case QMetaType::QVariantMap: - return new NS(QVariantMap); - case QMetaType::QVariantHash: - return new NS(QVariantHash); - case QMetaType::QVariantList: - return new NS(QVariantList); - case QMetaType::QVariant: - return new NS(QVariant); -#endif - case QMetaType::QByteArray: - return new NS(QByteArray); - case QMetaType::QString: - return new NS(QString); - case QMetaType::QStringList: - return new NS(QStringList); -#ifndef QT_BOOTSTRAPPED - case QMetaType::QBitArray: - return new NS(QBitArray); -#endif - case QMetaType::QDate: - return new NS(QDate); - case QMetaType::QTime: - return new NS(QTime); - case QMetaType::QDateTime: - return new NS(QDateTime); -#ifndef QT_BOOTSTRAPPED - case QMetaType::QUrl: - return new NS(QUrl); -#endif - case QMetaType::QLocale: - return new NS(QLocale); -#ifndef QT_NO_GEOM_VARIANT - case QMetaType::QRect: - return new NS(QRect); - case QMetaType::QRectF: - return new NS(QRectF); - case QMetaType::QSize: - return new NS(QSize); - case QMetaType::QSizeF: - return new NS(QSizeF); - case QMetaType::QLine: - return new NS(QLine); - case QMetaType::QLineF: - return new NS(QLineF); - case QMetaType::QPoint: - return new NS(QPoint); - case QMetaType::QPointF: - return new NS(QPointF); -#endif -#ifndef QT_NO_REGEXP - case QMetaType::QRegExp: - return new NS(QRegExp); -#endif -#ifndef QT_BOOTSTRAPPED -#ifndef QT_NO_REGEXP - case QMetaType::QRegularExpression: - return new NS(QRegularExpression); -#endif // QT_NO_REGEXP - case QMetaType::QEasingCurve: - return new NS(QEasingCurve); -#endif // QT_BOOTSTRAPPED - case QMetaType::QUuid: - return new NS(QUuid); -#ifndef QT_BOOTSTRAPPED - case QMetaType::QModelIndex: - return new NS(QModelIndex); -#endif - case QMetaType::UnknownType: - case QMetaType::Void: - return 0; - default: - ; - } - } - - Creator creator = 0; - if (type >= FirstGuiType && type <= LastGuiType) { - if (!qMetaTypeGuiHelper) - return 0; - creator = qMetaTypeGuiHelper[type - FirstGuiType].creator; - } else if (type >= FirstWidgetsType && type <= LastWidgetsType) { - if (!qMetaTypeWidgetsHelper) - return 0; - creator = qMetaTypeWidgetsHelper[type - FirstWidgetsType].creator; - } else { - const QVector<QCustomTypeInfo> * const ct = customTypes(); - QReadLocker locker(customTypesLock()); - if (type < User || !ct || ct->count() <= type - User) - return 0; - if (ct->at(type - User).typeName.isEmpty()) - return 0; - creator = ct->at(type - User).creator; - } - - return creator(copy); + TypeCreator typeCreator(type); + return QMetaTypeSwitcher::switcher<void*>(typeCreator, type, copy); } namespace { @@ -1610,13 +1428,9 @@ class Flags template<typename T, bool IsAcceptedType = DefinedTypesFilter::Acceptor<T>::IsAccepted> struct FlagsImpl { - static quint32 Flags(const int type) + static quint32 Flags(const int /* type */) { - return (!QTypeInfo<T>::isStatic * QMetaType::MovableType) - | (QTypeInfo<T>::isComplex * QMetaType::NeedsConstruction) - | (QTypeInfo<T>::isComplex * QMetaType::NeedsDestruction) - | (type == QMetaType::QObjectStar ? QMetaType::PointerToQObject : 0) - | (type == QMetaType::QWidgetStar ? QMetaType::PointerToQObject : 0); + return QtPrivate::QMetaTypeTypeFlags<T>::Flags; } }; template<typename T> diff --git a/src/corelib/kernel/qmetatype.h b/src/corelib/kernel/qmetatype.h index d913e37332..aa73785dac 100644 --- a/src/corelib/kernel/qmetatype.h +++ b/src/corelib/kernel/qmetatype.h @@ -447,6 +447,17 @@ namespace QtPrivate { template <class Result, class Arg0> struct IsPointerToTypeDerivedFromQObject<Result(*)(Arg0)> { enum { Value = false }; }; template <class Result, class Arg0, class Arg1> struct IsPointerToTypeDerivedFromQObject<Result(*)(Arg0, Arg1)> { enum { Value = false }; }; template <class Result, class Arg0, class Arg1, class Arg2> struct IsPointerToTypeDerivedFromQObject<Result(*)(Arg0, Arg1, Arg2)> { enum { Value = false }; }; + + template<typename T> + struct QMetaTypeTypeFlags + { + enum { Flags = (!QTypeInfo<T>::isStatic ? QMetaType::MovableType : 0) + | (QTypeInfo<T>::isComplex ? QMetaType::NeedsConstruction : 0) + | (QTypeInfo<T>::isComplex ? QMetaType::NeedsDestruction : 0) + | (IsPointerToTypeDerivedFromQObject<T>::Value ? QMetaType::PointerToQObject : 0) + | (Q_IS_ENUM(T) ? QMetaType::IsEnumeration : 0) + }; + }; } template <typename T> @@ -460,18 +471,7 @@ int qRegisterMetaType(const char *typeName if (typedefOf != -1) return QMetaType::registerTypedef(typeName, typedefOf); - QMetaType::TypeFlags flags; - if (!QTypeInfo<T>::isStatic) - flags |= QMetaType::MovableType; - if (QTypeInfo<T>::isComplex) { - flags |= QMetaType::NeedsConstruction; - flags |= QMetaType::NeedsDestruction; - } - if (QtPrivate::IsPointerToTypeDerivedFromQObject<T>::Value) - flags |= QMetaType::PointerToQObject; - if (Q_IS_ENUM(T)) - flags |= QMetaType::IsEnumeration; - + QMetaType::TypeFlags flags(QtPrivate::QMetaTypeTypeFlags<T>::Flags); return QMetaType::registerType(typeName, qMetaTypeDeleteHelper<T>, qMetaTypeCreateHelper<T>, qMetaTypeDestructHelper<T>, diff --git a/src/corelib/kernel/qmetatype_p.h b/src/corelib/kernel/qmetatype_p.h index b50521c7a6..c73f8d0a20 100644 --- a/src/corelib/kernel/qmetatype_p.h +++ b/src/corelib/kernel/qmetatype_p.h @@ -155,9 +155,7 @@ public: /*constructor*/(qMetaTypeConstructHelper<Type>), \ /*destructor*/(qMetaTypeDestructHelper<Type>), \ /*size*/(QTypeInfo<Type>::sizeOf), \ - /*flags*/(!QTypeInfo<Type>::isStatic * QMetaType::MovableType) \ - | (QTypeInfo<Type>::isComplex * QMetaType::NeedsConstruction) \ - | (QTypeInfo<Type>::isComplex * QMetaType::NeedsDestruction) \ + /*flags*/QtPrivate::QMetaTypeTypeFlags<Type>::Flags \ } diff --git a/src/corelib/kernel/qobject.cpp b/src/corelib/kernel/qobject.cpp index edbb84a657..914441f7a8 100644 --- a/src/corelib/kernel/qobject.cpp +++ b/src/corelib/kernel/qobject.cpp @@ -3188,7 +3188,7 @@ void QMetaObject::connectSlotsByName(QObject *o) } if (sigIndex < 0) continue; - if (QMetaObjectPrivate::connect(co, sigIndex, o, i)) { + if (Connection(QMetaObjectPrivate::connect(co, sigIndex, o, i))) { foundIt = true; break; } diff --git a/src/corelib/kernel/qpointer.cpp b/src/corelib/kernel/qpointer.cpp index b983bef5fe..f81451d906 100644 --- a/src/corelib/kernel/qpointer.cpp +++ b/src/corelib/kernel/qpointer.cpp @@ -44,7 +44,6 @@ \brief The QPointer class is a template class that provides guarded pointers to QObject. \ingroup objectmodel - \obsolete Use QWeakPointer instead. A guarded pointer, QPointer<T>, behaves like a normal C++ pointer \c{T *}, except that it is automatically set to 0 when the diff --git a/src/corelib/kernel/qpointer.h b/src/corelib/kernel/qpointer.h index 9b4f8e4332..836c13e3fc 100644 --- a/src/corelib/kernel/qpointer.h +++ b/src/corelib/kernel/qpointer.h @@ -49,10 +49,8 @@ QT_BEGIN_HEADER QT_BEGIN_NAMESPACE -#if QT_DEPRECATED_SINCE(5,0) - template <class T> -class QT_DEPRECATED QPointer +class QPointer { QWeakPointer<T> wp; @@ -161,8 +159,6 @@ inline bool operator!= (int i, const QPointer<T> &p) { Q_ASSERT(i == 0); return !i && !p.isNull(); } #endif -#endif // QT_DEPRECATED_SINCE(5,0) - QT_END_NAMESPACE QT_END_HEADER diff --git a/src/corelib/tools/qregexp.cpp b/src/corelib/tools/qregexp.cpp index 29b3424315..6462b3df92 100644 --- a/src/corelib/tools/qregexp.cpp +++ b/src/corelib/tools/qregexp.cpp @@ -3918,8 +3918,8 @@ static void invalidateEngine(QRegExpPrivate *priv) \value RegExp A rich Perl-like pattern matching syntax. This is the default. - \value RegExp2 Like RegExp, but with \l{greedy quantifiers}. This - will be the default in Qt 5. (Introduced in Qt 4.2.) + \value RegExp2 Like RegExp, but with \l{greedy quantifiers}. + (Introduced in Qt 4.2.) \value Wildcard This provides a simple pattern matching syntax similar to that used by shells (command interpreters) for "file diff --git a/src/corelib/tools/qsimd.cpp b/src/corelib/tools/qsimd.cpp index b3d2d62819..6c07480f99 100644 --- a/src/corelib/tools/qsimd.cpp +++ b/src/corelib/tools/qsimd.cpp @@ -108,12 +108,12 @@ static inline uint detectProcessorFeatures() uint features = 0; #if defined(Q_OS_LINUX) - int auxv = ::qt_safe_open("/proc/self/auxv", O_RDONLY); + int auxv = qt_safe_open("/proc/self/auxv", O_RDONLY); if (auxv != -1) { unsigned long vector[64]; int nread; while (features == 0) { - nread = ::qt_safe_read(auxv, (char *)vector, sizeof vector); + nread = qt_safe_read(auxv, (char *)vector, sizeof vector); if (nread <= 0) { // EOF or error break; @@ -130,7 +130,7 @@ static inline uint detectProcessorFeatures() } } - ::qt_safe_close(auxv); + qt_safe_close(auxv); return features; } // fall back if /proc/self/auxv wasn't found |