diff options
author | Lars Knoll <[email protected]> | 2018-04-03 15:51:43 +0200 |
---|---|---|
committer | Lars Knoll <[email protected]> | 2018-05-02 14:17:17 +0000 |
commit | 13cc936859518b5fa378c7b8242d56ebf49ebce9 (patch) | |
tree | 22d3bd9c771417707c35b8891f69b72b718fb84d /src/qml | |
parent | e9492e7b7b44c1f8cd5489d93463fc2b1f8b6d72 (diff) |
Remove the QString member from Identifier
First step to turning identifier into a simple int.
Change-Id: I4988587aa61f1f02ed80426ccbf00b685f38c829
Reviewed-by: Simon Hausmann <[email protected]>
Diffstat (limited to 'src/qml')
-rw-r--r-- | src/qml/jsruntime/qv4identifier.cpp | 26 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4identifier_p.h | 15 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4identifiertable.cpp | 3 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4identifiertable_p.h | 2 | ||||
-rw-r--r-- | src/qml/qml/v8/qv8engine.cpp | 7 |
5 files changed, 22 insertions, 31 deletions
diff --git a/src/qml/jsruntime/qv4identifier.cpp b/src/qml/jsruntime/qv4identifier.cpp index c122bcb51a..77510d95f6 100644 --- a/src/qml/jsruntime/qv4identifier.cpp +++ b/src/qml/jsruntime/qv4identifier.cpp @@ -38,6 +38,7 @@ ****************************************************************************/ #include "qv4identifier_p.h" #include "qv4identifiertable_p.h" +#include "qv4string_p.h" QT_BEGIN_NAMESPACE @@ -150,18 +151,9 @@ const IdentifierHashEntry *IdentifierHash::lookup(const QString &str) const { if (!d) return nullptr; - Q_ASSERT(d->entries); - uint hash = String::createHashValue(str.constData(), str.length(), nullptr); - uint idx = hash % d->alloc; - while (1) { - if (!d->entries[idx].identifier) - return nullptr; - if (d->entries[idx].identifier->string == str) - return d->entries + idx; - ++idx; - idx %= d->alloc; - } + Identifier *id = d->identifierTable->identifier(str); + return lookup(id); } const IdentifierHashEntry *IdentifierHash::lookup(String *str) const @@ -185,6 +177,18 @@ const Identifier *IdentifierHash::toIdentifier(Heap::String *str) const return d->identifierTable->identifier(str); } +QString QV4::IdentifierHash::findId(int value) const +{ + IdentifierHashEntry *e = d->entries; + IdentifierHashEntry *end = e + d->alloc; + while (e < end) { + if (e->identifier && e->value == value) + return d->identifierTable->stringFromIdentifier(e->identifier)->toQString(); + ++e; + } + return QString(); +} + } diff --git a/src/qml/jsruntime/qv4identifier_p.h b/src/qml/jsruntime/qv4identifier_p.h index 82346d5f68..c0c035479e 100644 --- a/src/qml/jsruntime/qv4identifier_p.h +++ b/src/qml/jsruntime/qv4identifier_p.h @@ -66,7 +66,6 @@ struct ExecutionEngine; struct Identifier { - QString string; uint hashValue; }; @@ -180,20 +179,6 @@ inline int IdentifierHash::value(String *str) const return e ? e->value : -1; } - -inline -QString IdentifierHash::findId(int value) const -{ - IdentifierHashEntry *e = d->entries; - IdentifierHashEntry *end = e + d->alloc; - while (e < end) { - if (e->identifier && e->value == value) - return e->identifier->string; - ++e; - } - return QString(); -} - } QT_END_NAMESPACE diff --git a/src/qml/jsruntime/qv4identifiertable.cpp b/src/qml/jsruntime/qv4identifiertable.cpp index b77f9478d3..9a86e4259f 100644 --- a/src/qml/jsruntime/qv4identifiertable.cpp +++ b/src/qml/jsruntime/qv4identifiertable.cpp @@ -79,7 +79,6 @@ void IdentifierTable::addEntry(Heap::String *str) return; str->identifier = new Identifier; - str->identifier->string = str->toQString(); str->identifier->hashValue = hash; bool grow = (alloc <= size*2); @@ -158,7 +157,7 @@ Identifier *IdentifierTable::identifierImpl(const Heap::String *str) return str->identifier; } -Heap::String *IdentifierTable::stringFromIdentifier(Identifier *i) +Heap::String *IdentifierTable::stringFromIdentifier(const Identifier *i) const { if (!i) return nullptr; diff --git a/src/qml/jsruntime/qv4identifiertable_p.h b/src/qml/jsruntime/qv4identifiertable_p.h index b0b08f1e54..2210a866fb 100644 --- a/src/qml/jsruntime/qv4identifiertable_p.h +++ b/src/qml/jsruntime/qv4identifiertable_p.h @@ -91,7 +91,7 @@ public: Identifier *identifierImpl(const Heap::String *str); - Heap::String *stringFromIdentifier(Identifier *i); + Q_QML_PRIVATE_EXPORT Heap::String *stringFromIdentifier(const Identifier *i) const; void mark(MarkStack *markStack) { for (int i = 0; i < alloc; ++i) { diff --git a/src/qml/qml/v8/qv8engine.cpp b/src/qml/qml/v8/qv8engine.cpp index 8a786e76cf..7106583e6d 100644 --- a/src/qml/qml/v8/qv8engine.cpp +++ b/src/qml/qml/v8/qv8engine.cpp @@ -85,6 +85,7 @@ #include <private/qv4script_p.h> #include <private/qv4include_p.h> #include <private/qv4jsonobject_p.h> +#include <private/qv4identifiertable_p.h> Q_DECLARE_METATYPE(QList<int>) @@ -206,8 +207,10 @@ void QV8Engine::initializeGlobal() { for (uint i = 0; i < m_v4Engine->globalObject->internalClass()->size; ++i) { - if (m_v4Engine->globalObject->internalClass()->nameMap.at(i)) - m_illegalNames.insert(m_v4Engine->globalObject->internalClass()->nameMap.at(i)->string); + if (m_v4Engine->globalObject->internalClass()->nameMap.at(i)) { + QV4::Identifier *id = m_v4Engine->globalObject->internalClass()->nameMap.at(i); + m_illegalNames.insert(m_v4Engine->identifierTable->stringFromIdentifier(id)->toQString()); + } } } } |