summaryrefslogtreecommitdiff
path: root/tests/auto/qml/qmlcppcodegen/data/javaScriptArgument.qml
Commit message (Collapse)AuthorAgeFilesLines
* QmlCompiler: Really fix writing into argument valuesUlf Hermann2022-07-051-0/+82
| | | | | | | | | | | | | | | | | | | | | | Arguments are now treated as registers "written" at the beginning of the first basic block. By modeling them this way, we can avoid all the complicated logic on whether to use a local or the arguments array when accessing any particular one of them. Furthermore, we can detect whether they are overwritten or not. If they are not overwritten, we can initialize them as a const reference into the arguments array. This way we save a copy. Treating the arguments as generic registers causes the basic blocks pass to aggressively adjust their types, pushing some conversions back into the QML engine. This is good. Unused arguments become void, for example, and don't have to be passed at all. However, we also need a special case for QJSPrimitiveValue arguments now. Pick-to: 6.4 Fixes: QTBUG-104462 Change-Id: I994bea0929bd508aa41db58dee4a7f12cd20f053 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> Reviewed-by: Sami Shalayel <sami.shalayel@qt.io>
* QmlCompiler: Fix miscompilation if arguments are overwrittenUlf Hermann2022-06-231-0/+34
In that case we need to allocate extra registers. We already did so before, but we wouldn't use the registers afterwards. This works nicely in 6.4 because we have a separate type for each store operation. Therefore, the original function argument (being of a different "type") won't be found in the list of local registers. Access to it falls back on the actual arguments array. Only once we've stored something into the register that mirrors the argument we can retrieve it. Pick-to: 6.4 Fixes: QTBUG-104462 Change-Id: Ibb0315cd2f8a8e4106d39fff88a6097b1623eb48 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>