aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/compiler/qqmlirbuilder.cpp
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2023-02-16 11:29:30 +0100
committerUlf Hermann <ulf.hermann@qt.io>2023-03-02 17:54:30 +0100
commit35152b432e82fc274c3983d0f369666a899cde49 (patch)
tree8c4fb849f36d0d1b03685a431823c9608a786bd4 /src/qml/compiler/qqmlirbuilder.cpp
parenta703701394820fcfffb544a5bf7c464410cdc0a2 (diff)
QML: Add an "Addressable" value to ValueTypeBehavior
Task-number: QTBUG-94807 Change-Id: I8c78faa99fc4c4b2ffd8c89f1037fc7569212c73 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Diffstat (limited to 'src/qml/compiler/qqmlirbuilder.cpp')
-rw-r--r--src/qml/compiler/qqmlirbuilder.cpp33
1 files changed, 25 insertions, 8 deletions
diff --git a/src/qml/compiler/qqmlirbuilder.cpp b/src/qml/compiler/qqmlirbuilder.cpp
index e85c0fe310..7bca65bb0a 100644
--- a/src/qml/compiler/qqmlirbuilder.cpp
+++ b/src/qml/compiler/qqmlirbuilder.cpp
@@ -865,15 +865,32 @@ private:
return false;
});
} else if constexpr (std::is_same_v<Argument, Pragma::ValueTypeBehaviorValue>) {
+ pragma->valueTypeBehavior = Pragma::ValueTypeBehaviorValues().toInt();
return iterateValues(values, [pragma](QStringView value) {
+ const auto setFlag = [pragma](Pragma::ValueTypeBehaviorValue flag, bool value) {
+ pragma->valueTypeBehavior
+ = Pragma::ValueTypeBehaviorValues(pragma->valueTypeBehavior)
+ .setFlag(flag, value).toInt();
+ };
+
if (value == "Reference"_L1) {
- pragma->valueTypeBehavior = Pragma::Reference;
+ setFlag(Pragma::Copy, false);
return true;
}
if (value == "Copy"_L1) {
- pragma->valueTypeBehavior = Pragma::Copy;
+ setFlag(Pragma::Copy, true);
+ return true;
+ }
+
+ if (value == "Inaddressable"_L1) {
+ setFlag(Pragma::Addressable, false);
+ return true;
+ }
+ if (value == "Addressable"_L1) {
+ setFlag(Pragma::Addressable, true);
return true;
}
+
return false;
});
}
@@ -1716,13 +1733,13 @@ void QmlUnitGenerator::generate(Document &output, const QV4::CompiledData::Depen
}
break;
case Pragma::ValueTypeBehavior:
- switch (p->valueTypeBehavior) {
- case Pragma::Copy:
+ if (Pragma::ValueTypeBehaviorValues(p->valueTypeBehavior)
+ .testFlag(Pragma::Copy)) {
createdUnit->flags |= Unit::ValueTypesCopied;
- break;
- case Pragma::Reference:
- //this is the default;
- break;
+ }
+ if (Pragma::ValueTypeBehaviorValues(p->valueTypeBehavior)
+ .testFlag(Pragma::Addressable)) {
+ createdUnit->flags |= Unit::ValueTypesAddressable;
}
break;
}