diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2018-04-07 01:00:53 +0200 |
---|---|---|
committer | Liang Qi <liang.qi@qt.io> | 2018-04-09 09:59:36 +0200 |
commit | 61b7f5a0c1280d93d00c74e393c8244be626168c (patch) | |
tree | 86d41573a283227dfbae92fe1249709914bb388e /src/qml/qml/qqmlengine.cpp | |
parent | feeec8daa8412219dadddfb6e7cfa17f59451a32 (diff) | |
parent | d868bb4f3e4b0424fd4a2989ff1c82692b0f014c (diff) |
Merge remote-tracking branch 'origin/5.11' into dev
Conflicts:
tests/auto/qml/debugger/qqmldebuggingenabler/qqmldebuggingenabler/tst_qqmldebuggingenabler.cpp
Change-Id: Ifb27c6096297c729caff68945b3f710ce2009521
Diffstat (limited to 'src/qml/qml/qqmlengine.cpp')
-rw-r--r-- | src/qml/qml/qqmlengine.cpp | 79 |
1 files changed, 17 insertions, 62 deletions
diff --git a/src/qml/qml/qqmlengine.cpp b/src/qml/qml/qqmlengine.cpp index 79e9699df0..92f46004ee 100644 --- a/src/qml/qml/qqmlengine.cpp +++ b/src/qml/qml/qqmlengine.cpp @@ -114,12 +114,6 @@ Q_DECLARE_METATYPE(QQmlProperty) QT_BEGIN_NAMESPACE -typedef QQmlData::BindingBitsType BindingBitsType; -enum { - BitsPerType = QQmlData::BitsPerType, - InlineBindingArraySize = QQmlData::InlineBindingArraySize -}; - void qmlRegisterBaseTypes(const char *uri, int versionMajor, int versionMinor) { QQmlEnginePrivate::registerBaseTypes(uri, versionMajor, versionMinor); @@ -1905,66 +1899,27 @@ void QQmlData::parentChanged(QObject *object, QObject *parent) } } -static void QQmlData_setBit(QQmlData *data, QObject *obj, int bit) -{ - uint offset = QQmlData::offsetForBit(bit); - BindingBitsType *bits = (data->bindingBitsArraySize == InlineBindingArraySize) ? data->bindingBitsValue : data->bindingBits; - if (Q_UNLIKELY(data->bindingBitsArraySize <= offset)) { - int props = QQmlMetaObject(obj).propertyCount(); - Q_ASSERT(bit < 2 * props); - - uint arraySize = (2 * static_cast<uint>(props) + BitsPerType - 1) / BitsPerType; - Q_ASSERT(arraySize > InlineBindingArraySize && arraySize > data->bindingBitsArraySize); - - BindingBitsType *newBits = static_cast<BindingBitsType *>(malloc(arraySize*sizeof(BindingBitsType))); - memcpy(newBits, bits, data->bindingBitsArraySize * sizeof(BindingBitsType)); - memset(newBits + data->bindingBitsArraySize, 0, sizeof(BindingBitsType) * (arraySize - data->bindingBitsArraySize)); - - if (data->bindingBitsArraySize > InlineBindingArraySize) - free(bits); - data->bindingBits = newBits; - bits = newBits; - data->bindingBitsArraySize = arraySize; - } - Q_ASSERT(offset < data->bindingBitsArraySize); - bits[offset] |= QQmlData::bitFlagForBit(bit); -} - -static void QQmlData_clearBit(QQmlData *data, int bit) -{ - uint offset = QQmlData::offsetForBit(bit); - if (data->bindingBitsArraySize > offset) { - BindingBitsType *bits = (data->bindingBitsArraySize == InlineBindingArraySize) ? data->bindingBitsValue : data->bindingBits; - bits[offset] &= ~QQmlData::bitFlagForBit(bit); - } -} - -void QQmlData::clearBindingBit(int coreIndex) +QQmlData::BindingBitsType *QQmlData::growBits(QObject *obj, int bit) { - Q_ASSERT(coreIndex >= 0); - Q_ASSERT(coreIndex <= 0xffff); - QQmlData_clearBit(this, coreIndex * 2); -} + BindingBitsType *bits = (bindingBitsArraySize == InlineBindingArraySize) ? bindingBitsValue : bindingBits; + int props = QQmlMetaObject(obj).propertyCount(); + Q_ASSERT(bit < 2 * props); + Q_UNUSED(bit); // .. for Q_NO_DEBUG mode when the assert above expands to empty -void QQmlData::setBindingBit(QObject *obj, int coreIndex) -{ - Q_ASSERT(coreIndex >= 0); - Q_ASSERT(coreIndex <= 0xffff); - QQmlData_setBit(this, obj, coreIndex * 2); -} + uint arraySize = (2 * static_cast<uint>(props) + BitsPerType - 1) / BitsPerType; + Q_ASSERT(arraySize > 1); + Q_ASSERT(arraySize <= 0xffff); // max for bindingBitsArraySize -void QQmlData::clearPendingBindingBit(int coreIndex) -{ - Q_ASSERT(coreIndex >= 0); - Q_ASSERT(coreIndex <= 0xffff); - QQmlData_clearBit(this, coreIndex * 2 + 1); -} + BindingBitsType *newBits = static_cast<BindingBitsType *>(malloc(arraySize*sizeof(BindingBitsType))); + memcpy(newBits, bits, bindingBitsArraySize * sizeof(BindingBitsType)); + memset(newBits + bindingBitsArraySize, 0, sizeof(BindingBitsType) * (arraySize - bindingBitsArraySize)); -void QQmlData::setPendingBindingBit(QObject *obj, int coreIndex) -{ - Q_ASSERT(coreIndex >= 0); - Q_ASSERT(coreIndex <= 0xffff); - QQmlData_setBit(this, obj, coreIndex * 2 + 1); + if (bindingBitsArraySize > InlineBindingArraySize) + free(bits); + bindingBits = newBits; + bits = newBits; + bindingBitsArraySize = arraySize; + return bits; } QQmlData *QQmlData::createQQmlData(QObjectPrivate *priv) |