diff options
| author | Ulf Hermann <ulf.hermann@qt.io> | 2021-04-15 10:11:43 +0200 |
|---|---|---|
| committer | Ulf Hermann <ulf.hermann@qt.io> | 2021-04-15 11:14:19 +0200 |
| commit | 221b2789dbc64520c97bf39a7d8465780c6fddfc (patch) | |
| tree | 6cb0604ec881a1fec0a13abcf2663294dd530802 /src/qml/jsruntime | |
| parent | 198120212285e4cda45caaf0c32c15c25eddc6c8 (diff) | |
Streamline retrieval of context property names and IDs
Most of this can be inline, and we never need to copy the actual
identifier hash.
Change-Id: I6468b6b1a571e4854c00c865a2aa57c3b2f0ca8c
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'src/qml/jsruntime')
| -rw-r--r-- | src/qml/jsruntime/qv4executablecompilationunit.cpp | 1 | ||||
| -rw-r--r-- | src/qml/jsruntime/qv4executablecompilationunit_p.h | 1 | ||||
| -rw-r--r-- | src/qml/jsruntime/qv4identifierhash.cpp | 1 | ||||
| -rw-r--r-- | src/qml/jsruntime/qv4qmlcontext.cpp | 18 |
4 files changed, 8 insertions, 13 deletions
diff --git a/src/qml/jsruntime/qv4executablecompilationunit.cpp b/src/qml/jsruntime/qv4executablecompilationunit.cpp index 8ef8ae2221..01c8f0a7c9 100644 --- a/src/qml/jsruntime/qv4executablecompilationunit.cpp +++ b/src/qml/jsruntime/qv4executablecompilationunit.cpp @@ -401,6 +401,7 @@ IdentifierHash ExecutableCompilationUnit::createNamedObjectsPerComponent(int com const CompiledData::Object *namedObject = objectAt(*namedObjectIndexPtr); namedObjectCache.add(runtimeStrings[namedObject->idNameIndex], namedObject->id); } + Q_ASSERT(!namedObjectCache.isEmpty()); return *namedObjectsPerComponentCache.insert(componentObjectIndex, namedObjectCache); } diff --git a/src/qml/jsruntime/qv4executablecompilationunit_p.h b/src/qml/jsruntime/qv4executablecompilationunit_p.h index 1b1b9add5c..3dc0e58ca5 100644 --- a/src/qml/jsruntime/qv4executablecompilationunit_p.h +++ b/src/qml/jsruntime/qv4executablecompilationunit_p.h @@ -319,6 +319,7 @@ IdentifierHash ExecutableCompilationUnit::namedObjectsPerComponent(int component auto it = namedObjectsPerComponentCache.find(componentObjectIndex); if (Q_UNLIKELY(it == namedObjectsPerComponentCache.end())) return createNamedObjectsPerComponent(componentObjectIndex); + Q_ASSERT(!it->isEmpty()); return *it; } diff --git a/src/qml/jsruntime/qv4identifierhash.cpp b/src/qml/jsruntime/qv4identifierhash.cpp index 7d2d3143b2..d349b7c4fe 100644 --- a/src/qml/jsruntime/qv4identifierhash.cpp +++ b/src/qml/jsruntime/qv4identifierhash.cpp @@ -50,6 +50,7 @@ namespace QV4 { IdentifierHash::IdentifierHash(ExecutionEngine *engine) { d = new IdentifierHashData(engine->identifierTable, 3); + Q_ASSERT(!isEmpty()); } void IdentifierHash::detach() diff --git a/src/qml/jsruntime/qv4qmlcontext.cpp b/src/qml/jsruntime/qv4qmlcontext.cpp index 18d611f2c3..f845f1d6e5 100644 --- a/src/qml/jsruntime/qv4qmlcontext.cpp +++ b/src/qml/jsruntime/qv4qmlcontext.cpp @@ -88,11 +88,7 @@ static OptionalReturnedValue searchContextProperties( bool *hasProperty, Value *base, QV4::Lookup *lookup, QV4::Lookup *originalLookup, QQmlEnginePrivate *ep) { - const QV4::IdentifierHash &properties = context->propertyNames(); - if (properties.count() == 0) - return OptionalReturnedValue(); - - const int propertyIdx = properties.value(name); + const int propertyIdx = context->propertyIndex(name); if (propertyIdx == -1) return OptionalReturnedValue(); @@ -429,17 +425,13 @@ bool QQmlContextWrapper::virtualPut(Managed *m, PropertyKey id, const Value &val ScopedString name(scope, id.asStringOrSymbol()); while (context) { - const QV4::IdentifierHash &properties = context->propertyNames(); // Search context properties - if (properties.count()) { - const int propertyIndex = properties.value(name); - if (propertyIndex != -1) { - if (propertyIndex < context->numIdValues()) { - v4->throwError(QLatin1String("left-hand side of assignment operator is not an lvalue")); - return false; - } + if (const int propertyIndex = context->propertyIndex(name); propertyIndex != -1) { + if (propertyIndex < context->numIdValues()) { + v4->throwError(QLatin1String("left-hand side of assignment operator is not an lvalue")); return false; } + return false; } // Search scope object |
