diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2022-06-01 09:46:48 +0200 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2022-06-20 20:40:06 +0000 |
commit | 91577d71ac636f8889422bc74274a01fef6723f6 (patch) | |
tree | 092e39eb9ebc732c12720b11601eb71bb02105e9 | |
parent | 1c0f3cc4d9080ff51bb8a8adbdae1a61fe34871f (diff) | |
download | qtdeclarative-91577d71ac636f8889422bc74274a01fef6723f6.tar.gz |
QtQml: Move idIndex into bitfield union of Alias
Since we can now add a member that covers the whole storage, we can
clean this up a bit.
Change-Id: I707f1f3706d68a073d4b0f4937c352bd3df34335
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
-rw-r--r-- | src/qml/common/qv4compileddata_p.h | 28 | ||||
-rw-r--r-- | src/qml/compiler/qqmlirbuilder.cpp | 2 | ||||
-rw-r--r-- | src/qml/qml/qqmltypecompiler.cpp | 4 |
3 files changed, 21 insertions, 13 deletions
diff --git a/src/qml/common/qv4compileddata_p.h b/src/qml/common/qv4compileddata_p.h index 3db3010885..8641ee3b26 100644 --- a/src/qml/common/qv4compileddata_p.h +++ b/src/qml/common/qv4compileddata_p.h @@ -770,6 +770,7 @@ private: // object id index (in QQmlContextData::idValues) using TargetObjectIdField = quint32_le_bitfield_member<0, 31>; using AliasToLocalAliasField = quint32_le_bitfield_member<31, 1>; + using IdIndexField = quint32_le_bitfield_member<0, 32>; public: @@ -781,12 +782,8 @@ public: Q_DECLARE_FLAGS(Flags, Flag) quint32_le_bitfield_union<NameIndexField, FlagsField> nameIndexAndFlags; - - union { - quint32_le idIndex; // string index - quint32_le_bitfield_union<TargetObjectIdField, AliasToLocalAliasField> - targetObjectIdAndAliasToLocalAlias; - }; + quint32_le_bitfield_union<IdIndexField, TargetObjectIdField, AliasToLocalAliasField> + idIndexAndTargetObjectIdAndAliasToLocalAlias; union { quint32_le propertyNameIndex; // string index @@ -827,24 +824,35 @@ public: return encodedMetaPropertyIndex == -1; } + quint32 idIndex() const + { + return idIndexAndTargetObjectIdAndAliasToLocalAlias.get<IdIndexField>(); + } + + void setIdIndex(quint32 idIndex) + { + idIndexAndTargetObjectIdAndAliasToLocalAlias.set<IdIndexField>(idIndex); + } + + bool isAliasToLocalAlias() const { - return targetObjectIdAndAliasToLocalAlias.get<AliasToLocalAliasField>(); + return idIndexAndTargetObjectIdAndAliasToLocalAlias.get<AliasToLocalAliasField>(); } void setIsAliasToLocalAlias(bool isAliasToLocalAlias) { - targetObjectIdAndAliasToLocalAlias.set<AliasToLocalAliasField>(isAliasToLocalAlias); + idIndexAndTargetObjectIdAndAliasToLocalAlias.set<AliasToLocalAliasField>(isAliasToLocalAlias); } quint32 targetObjectId() const { - return targetObjectIdAndAliasToLocalAlias.get<TargetObjectIdField>(); + return idIndexAndTargetObjectIdAndAliasToLocalAlias.get<TargetObjectIdField>(); } void setTargetObjectId(quint32 targetObjectId) { - targetObjectIdAndAliasToLocalAlias.set<TargetObjectIdField>(targetObjectId); + idIndexAndTargetObjectIdAndAliasToLocalAlias.set<TargetObjectIdField>(targetObjectId); } }; static_assert(sizeof(Alias) == 20, "Alias structure needs to have the expected size to be binary compatible on disk when generated by host compiler and loaded by target"); diff --git a/src/qml/compiler/qqmlirbuilder.cpp b/src/qml/compiler/qqmlirbuilder.cpp index d5bc17735f..213c73d031 100644 --- a/src/qml/compiler/qqmlirbuilder.cpp +++ b/src/qml/compiler/qqmlirbuilder.cpp @@ -1301,7 +1301,7 @@ bool IRBuilder::appendAlias(QQmlJS::AST::UiPublicMember *node) if (aliasReference.count() < 1 || aliasReference.count() > 3) COMPILE_EXCEPTION(rhsLoc, tr("Invalid alias reference. An alias reference must be specified as <id>, <id>.<property> or <id>.<value property>.<property>")); - alias->idIndex = registerString(aliasReference.first()); + alias->setIdIndex(registerString(aliasReference.first())); QString propertyValue = aliasReference.value(1); if (aliasReference.count() == 3) diff --git a/src/qml/qml/qqmltypecompiler.cpp b/src/qml/qml/qqmltypecompiler.cpp index f45d80e88c..f7a374db28 100644 --- a/src/qml/qml/qqmltypecompiler.cpp +++ b/src/qml/qml/qqmltypecompiler.cpp @@ -1071,7 +1071,7 @@ QQmlComponentAndAliasResolver::resolveAliasesInObject(int objectIndex, seenUnresolvedAlias = true; - const int idIndex = alias->idIndex; + const int idIndex = alias->idIndex(); const int targetObjectIndex = _idToObjectIndex.value(idIndex, -1); if (targetObjectIndex == -1) { *error = qQmlCompileError( @@ -1134,7 +1134,7 @@ QQmlComponentAndAliasResolver::resolveAliasesInObject(int objectIndex, } // restore - alias->idIndex = idIndex; + alias->setIdIndex(idIndex); // Try again later and resolve the target alias first. break; } |