summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2022-06-01 09:46:48 +0200
committerUlf Hermann <ulf.hermann@qt.io>2022-06-20 20:40:06 +0000
commit91577d71ac636f8889422bc74274a01fef6723f6 (patch)
tree092e39eb9ebc732c12720b11601eb71bb02105e9
parent1c0f3cc4d9080ff51bb8a8adbdae1a61fe34871f (diff)
downloadqtdeclarative-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.h28
-rw-r--r--src/qml/compiler/qqmlirbuilder.cpp2
-rw-r--r--src/qml/qml/qqmltypecompiler.cpp4
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;
}