diff options
author | Simon Hausmann <simon.hausmann@digia.com> | 2014-05-22 19:59:58 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-05-22 19:59:58 +0200 |
commit | 8a28462c13907800caf44c16580e0b2a2ee99f69 (patch) | |
tree | e6d1e5d9179dac8edb4d87017442ef8194c80cac /src/qml/compiler | |
parent | b3c2c28746a01f435580b9fbad64d4f614e7f805 (diff) | |
parent | 800025fb70ace453275011c1ae5ce906e0fa3344 (diff) |
Merge "Merge remote-tracking branch 'origin/stable' into dev" into refs/staging/dev
Diffstat (limited to 'src/qml/compiler')
-rw-r--r-- | src/qml/compiler/qv4compileddata_p.h | 11 | ||||
-rw-r--r-- | src/qml/compiler/qv4compiler.cpp | 6 | ||||
-rw-r--r-- | src/qml/compiler/qv4ssa.cpp | 32 |
3 files changed, 18 insertions, 31 deletions
diff --git a/src/qml/compiler/qv4compileddata_p.h b/src/qml/compiler/qv4compileddata_p.h index 1fba6c0d3c..6ee23690a6 100644 --- a/src/qml/compiler/qv4compileddata_p.h +++ b/src/qml/compiler/qv4compileddata_p.h @@ -151,7 +151,7 @@ struct JSClass struct String { quint32 flags; // isArrayIndex - QArrayData str; + qint32 size; // uint16 strdata[] static int calculateSize(const QString &str) { @@ -195,13 +195,12 @@ struct Unit const uint *offsetTable = reinterpret_cast<const uint*>((reinterpret_cast<const char *>(this)) + offsetToStringTable); const uint offset = offsetTable[idx]; const String *str = reinterpret_cast<const String*>(reinterpret_cast<const char *>(this) + offset); - if (str->str.size == 0) + if (str->size == 0) return QString(); - QStringDataPtr holder = { const_cast<QStringData *>(static_cast<const QStringData*>(&str->str)) }; - QString qstr(holder); + const QChar *characters = reinterpret_cast<const QChar *>(str + 1); if (flags & StaticData) - return qstr; - return QString(qstr.constData(), qstr.length()); + return QString::fromRawData(characters, str->size); + return QString(characters, str->size); } const uint *functionOffsetTable() const { return reinterpret_cast<const uint*>((reinterpret_cast<const char *>(this)) + offsetToFunctionTable); } diff --git a/src/qml/compiler/qv4compiler.cpp b/src/qml/compiler/qv4compiler.cpp index 65ef5c4b5e..144ef8a79e 100644 --- a/src/qml/compiler/qv4compiler.cpp +++ b/src/qml/compiler/qv4compiler.cpp @@ -82,11 +82,7 @@ void QV4::Compiler::StringTableGenerator::serialize(uint *stringTable, char *dat QV4::CompiledData::String *s = (QV4::CompiledData::String*)(stringData); s->flags = 0; // ### - s->str.ref.atomic.store(-1); - s->str.size = qstr.length(); - s->str.alloc = 0; - s->str.capacityReserved = false; - s->str.offset = sizeof(QArrayData); + s->size = qstr.length(); memcpy(s + 1, qstr.constData(), (qstr.length() + 1)*sizeof(ushort)); stringData += QV4::CompiledData::String::calculateSize(qstr); diff --git a/src/qml/compiler/qv4ssa.cpp b/src/qml/compiler/qv4ssa.cpp index 880d25e664..842ade4900 100644 --- a/src/qml/compiler/qv4ssa.cpp +++ b/src/qml/compiler/qv4ssa.cpp @@ -154,18 +154,13 @@ public: else flagIt = set.blockFlags->size(); } else { - if (set.blockNumbers) { + if (set.blockNumbers) numberIt = set.blockNumbers->begin(); - } else { - flagIt = 0; - size_t eIt = set.blockFlags->size(); - while (flagIt != eIt) { - if (set.blockFlags->operator[](flagIt)) - break; - else - ++flagIt; - } - } + else + flagIt = std::distance(set.blockFlags->begin(), + std::find(set.blockFlags->begin(), + set.blockFlags->end(), + true)); } } @@ -195,16 +190,13 @@ public: const_iterator &operator++() { - if (set.blockNumbers) { + if (set.blockNumbers) ++numberIt; - } else { - size_t eIt = set.blockFlags->size(); - while (flagIt != eIt) { - ++flagIt; - if (flagIt == eIt || set.blockFlags->operator[](flagIt)) - break; - } - } + else + flagIt = std::distance(set.blockFlags->begin(), + std::find(set.blockFlags->begin() + flagIt + 1, + set.blockFlags->end(), + true)); return *this; } |