diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2023-02-16 11:29:30 +0100 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2023-03-02 17:54:30 +0100 |
commit | 35152b432e82fc274c3983d0f369666a899cde49 (patch) | |
tree | 8c4fb849f36d0d1b03685a431823c9608a786bd4 /src/qml/compiler/qqmlirbuilder.cpp | |
parent | a703701394820fcfffb544a5bf7c464410cdc0a2 (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.cpp | 33 |
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; } |