aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/jsruntime
Commit message (Collapse)AuthorAgeFilesLines
* QtQml: Fill in the const iterator functions in the empty sequenceUlf Hermann7 days1-0/+11
| | | | | | | | | | Without these you may get an infinite sequence when trying to iterate using const iterators. Pick-to: 6.10 6.8 Task-number: QTBUG-142097 Change-Id: Iae93063b240ebe9426804197533ed7efd8e007bc Reviewed-by: Sami Shalayel <sami.shalayel@qt.io>
* JSRuntime: Don't immediately connect reference objectsOlivier De Cannière2025-11-133-47/+90
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The change in a7349e6433d092398d76cafa5408753f06892cd7 reduced the number of readbacks of reference objects by using connections to set the dirty state only when necessary. Establishing connections, however, comes at a cost and this introduced a regression in the delegates_item_childrenRect QmlBench benchmark. The mitigation introduced in this patch is to delay creating the connection. When a reference object is created, it does not read or create a connection but is simply marked as dirty. Only on a subsequent read from within a different statement than the reference object's creation's statement, does a connection get created. This keeps the benefit of reducing unnecessary reads on objects that are used multiple times while not spending too much on creating connections. This brings back the benchmark to its original level of performance. The referenceObjectChainReadsBackAsRequiredBasedOnParentSignals test was changed to expect 8 reads instead of 4. Since all the accesses are part of the same statement, no connection is ever created and more reads are required than before. The referenceObjectDoesNotFetchWithoutNotifyEventDateObject test is reformatted to separate the assignment from the reads. Otherwise no connection is ever created. The referenceObjectDoesNotLeakAConnectionToTheDestroyedSignalOnANotifyBindable test can be updated to expect 0 connections. With this change, we only connect if the reference object is read again from a different statement. Amends a7349e6433d092398d76cafa5408753f06892cd7 Fixes: QTBUG-140757 Pick-to: 6.10 Change-Id: I5d02ec6266c51fbbe5f2e01405081dd5a167a833 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* JSRuntime: Extract ReferenceObject::init lambdas into functionsOlivier De Cannière2025-11-132-64/+67
| | | | | | Pick-to: 6.10 Change-Id: I489b515388f9aba9250bfb05687331c92578ca57 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
* Doc: Fix small typos in ReferenceObject's documentationOlivier De Cannière2025-11-132-7/+7
| | | | | Change-Id: I71ba63cdde7c8f3e18b89a1a4e35da30202fd8e4 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
* QtQml: Try harder to find a propertyCache for destroy() and toString()Ulf Hermann2025-11-073-11/+15
| | | | | | | | | | | | | Those are conceptually part of the QObject property cache, even though they have no property data. So, if the object at hand does not have a property cache of itself (e.g. because its fully dynamic), look up the QObject one and use that. Fixes: QTBUG-141704 Pick-to: 6.10 6.8 6.5 Change-Id: Ia333ac8c29f3797fb4b3ff37863b7c01fae8b076 Reviewed-by: Sami Shalayel <sami.shalayel@qt.io> Reviewed-by: Joshua GPBeta <studiocghibli@gmail.com>
* Doc: Fix QDoc warnings for internal classes and functionsJerome Pasion2025-11-072-1/+8
| | | | | | | | | | -Mark internal functions with \internal -Sometimes the solution is to have a \class command and marked internal -Fixed whitespace issues when the new marking introduced them Task-number: QTBUG-141665 Change-Id: I4f744aa94ca679da74b6c5e846e49a73346e2625 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* QtQml: Don't delete the Qt object when clearing singletonsUlf Hermann2025-11-051-1/+12
| | | | | | | | | | | | | | | | | We need the object not only as singleton but also as member of the global object. If there is a QJSEngine, parent it to the engine and make it explicitly C++-owned. This way clearSingletons() won't delete it. If there is no QJSEngine, there can't be any clearSingletons(). Therefore we're safe in that case. The only known example for an ExecutionEngine without a QJSEngine is the WorkerScript case, but since ExecutionEngine is exported, it could be instantiated on its own in other Qt modules. Amends commit 9dc7a22b212c18215942b9a4bfa17bd16dd5151b. Pick-to: 6.10 6.8 Task-number: QTBUG-95788 Change-Id: I5a0aa35fadd552af208538ab2715efaff77f8f4e Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
* QtQml: Avoid ternary expression in return statementUlf Hermann2025-10-281-4/+4
| | | | | | | | | This trips up Coverity. Instead use an "if" clause. Coverity-Id: 896869 Change-Id: I0eddc4b4547a7bb9055734b7304112e9174ff5fc Reviewed-by: Sami Shalayel <sami.shalayel@qt.io> Reviewed-by: Marc Mutz <marc.mutz@qt.io>
* V4 Date: Support more nonstandard date formatsSami Shalayel2025-10-211-1/+4
| | | | | | | | | | | | | | Introduce support for obsolete RFC2822 dates that has 2 digitted years, or 1-digited hours (2 instead of 02), which now should be rejected by qdatetime and instead parsed via a custom string format in ParseString(). Amends 43eaa77e8ed03153335c0002dcc8b660c39a0beb and 41a5c7b223d958bd40240aee81bb8fb96540735d. Pick-to: 6.10 6.8 Task-number: QTBUG-100377 Change-Id: I802af9edc7f755b7dba345bf60548714a7335545 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
* Set default stack size safety margin for VxWorksKarim Pinter2025-10-212-9/+23
| | | | | | | | | | | | | The default safety margin for VxWorks is 1/8 of the stack size, which is read from the OS. Also adds environment variable QV4_STACK_SOFT_LIMIT, to overwrite V4 stack safety margin. These can be used to finetune the application with limited resources, also on other OSes. Task-number: QTBUG-115777 Change-Id: I82b5b02e75fae3f5d1971504d16a3dc0f1d5f3fd Pick-to: 6.8 6.9 6.10 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* QtQml: Fix coverity warningUlf Hermann2025-10-201-2/+3
| | | | | | | | | We don't need to store the scheme/host part of the origin in a temporary. The whole string can be constructed in one go. Coverity-Id: 896383 Change-Id: I1978ea26d3946c8f905f76d18192c5f1ced1e647 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
* QtQml: Store QUrl as-is in QV4::UrlObjectUlf Hermann2025-10-142-247/+160
| | | | | | | | | | All the conversion back and forth only adds noise and overhead. Use an array of std::byte to trick the memory manager into believing that QV4::Heap::UrlObject is still trivial. Task-number: QTBUG-138545 Change-Id: Ic382741d441cfb8a7446d6c46ded77173325ce34 Reviewed-by: Sami Shalayel <sami.shalayel@qt.io>
* QtQml: Fix instanceof for URL and URLSearchParamsUlf Hermann2025-10-131-2/+6
| | | | | | | | | | The ctors and prototypes need to be linked together. Task-number: QTBUG-138545 Change-Id: I5423dfb7d04c4d496d734ab5fc8252b6feb54a11 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> Reviewed-by: Sami Shalayel <sami.shalayel@qt.io> Reviewed-by: Olivier De Cannière <olivier.decanniere@qt.io>
* CRA review qml/jsruntimeFabian Kosmale2025-09-16156-0/+161
| | | | | | | | | | | | | | | | | | This relies heavily on the documented fact that we only support trusted QML/JS content, meaning most files are only significant, not critical. This also extends to the handling of qmlc files (as in compilationunitmapper), as we store them in a user owned, non-shared cache directory – so any vulnerability there would already mean that an attacker has write-priviledges on user data. An exception is ArrayBuffer, which can be used with arbitrary user data, and should create a valid QBA. Fixes: QTBUG-136970 Pick-to: 6.10 6.9 6.8 QUIP: 23 Change-Id: I22033fe6ab4acf8362a8183e25b92331d45cb32c Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* Fix build with V4_USE_VALGRIND definedAndreas Hartmetz2025-09-141-1/+1
| | | | | Change-Id: I3f3a58771d2721dc822add922c16a7efab3024ab Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* QtQml: Empty SimpleArrayData vacant space when truncatingUlf Hermann2025-09-121-2/+7
| | | | | | | | | | | Without this we effectively soft-leak the contents of any SimpleArrayData whenever we truncate it. Only when the array was either completely dropped or re-filled would the extra objects be reclaimed. Task-number: QTBUG-139025 Pick-to: 6.10 6.9 6.8 Change-Id: I88e9dc3ea8ec57c1de71b7b5417ebcfbaa75bb61 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
* QtQml: Untangle "locals" member of stack frame a bitUlf Hermann2025-09-111-2/+0
| | | | | | | | | | It's only valid in the MetaTypesStackFrame and we should use its accessor. Amends commit 2d016a2653c59f10a57dc1903b817f71d16d0622. Change-Id: I6900fc01a0af2acf29324e54c0206c84f032c22d Reviewed-by: Sami Shalayel <sami.shalayel@qt.io>
* QtQml: Avoid double-wrapping when converting to QVariantListUlf Hermann2025-09-111-3/+17
| | | | | | | | | Amends commit 1b89c1edcae68351632c2755e5408410c2ff98e3 Fixes: QTBUG-139764 Pick-to: 6.10 6.9 6.8 Change-Id: I1488527a235d74fc0352c72b9bfb69589c2f3d93 Reviewed-by: Sami Shalayel <sami.shalayel@qt.io>
* Fix JS URL behavior when setting an empty search stringAndreas Hartmetz2025-09-051-1/+7
| | | | | | | | | | | | | | | | This code needs to bridge the following difference: In JS: "" search string -> "" "?" search string -> "?" In QUrl: null search string -> "" "" search string -> "?" Pick-to: 6.10 Change-Id: I0b1bf64f0b251eba75b852adee5db05abe87f6fe Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* QtQml: Optimize a few more methods of QV4::SequenceUlf Hermann2025-09-052-5/+150
| | | | | | | push, pop, shift, and unshift should be pretty common. Change-Id: Ia27e29e79d5909f146836bf91499fafbf3f9ce4e Reviewed-by: Sami Shalayel <sami.shalayel@qt.io>
* QtQml: Mark values on the AOT-compiled stack during gcUlf Hermann2025-09-021-1/+11
| | | | | | | | | | Keep them in a special generated struct with virtual method that gets called from the GC for each frame. Pick-to: 6.10 6.9 6.8 Fixes: QTBUG-139059 Change-Id: I81bcbeab6531e174a5207d03f57d241461ae9ba3 Reviewed-by: Olivier De Cannière <olivier.decanniere@qt.io>
* QtQml: Store detached Sequence objects on the JS heapUlf Hermann2025-09-022-38/+259
| | | | | | | | | | | | | | | | | | | | | While the Sequence is detached it is subject to the GC or unrelated C++ code deleting objects from its internals. Since it's then not the owning object's responsibility to track this anymore, we need to track it ourselves. The way to do it is to use the existing V4 objects. We don't have to store the sequence on the JS heap if it cannot store a QObject. Only lists of variants or pointers are affected. This independently fixes QTBUG-129972 for 6.8 where VariantAssociationObject does not exist, yet. This is because the detached sequence shown in that bug won't need to be written back to anymore in order to stay up to date. Pick-to: 6.10 6.9 6.8 Fixes: QTBUG-129972 Task-number: QTBUG-139025 Change-Id: Ib469c6c65f2f96041e2ad2fd106f8cd60a182e13 Reviewed-by: Sami Shalayel <sami.shalayel@qt.io>
* QtQml: Demote error to warning in Sequence's method_getLengthUlf Hermann2025-09-011-3/+5
| | | | | | | All other qsizetype <-> uint range violations are only warnings. Change-Id: I611e423c115483e3f72b4cc542b3154478c347ca Reviewed-by: Olivier De Cannière <olivier.decanniere@qt.io>
* QtQml: Consistently check isReadOnly in QV4::SequenceUlf Hermann2025-09-011-1/+10
| | | | | | | | | We want generally want to throw an exception. Except in virtualMetaCall, since that would lead to cascading exceptions. There, just return 0 to notify the caller about the metaCall failure. Change-Id: Ie3970d01a5b433100f9722a2f12843abfe8d512a Reviewed-by: Olivier De Cannière <olivier.decanniere@qt.io>
* QtQml: Remove obscure exception checkUlf Hermann2025-09-011-2/+0
| | | | | | | | | | There is no way we can have produced an exception in Sequence::virtualPut(). Change-Id: I1f6f4d933b34b9f86c3a9093929815e9071eb61e Reviewed-by: Luca Di Sera <luca.disera@qt.io> Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> Reviewed-by: Olivier De Cannière <olivier.decanniere@qt.io>
* QtQml: Extract method to create the inline storage for SequenceUlf Hermann2025-09-012-9/+20
| | | | | | | | | | | | | | | | We will get a different kind of storage in addition. The unification of the different init() methods uncovers a bug: The storage can indeed be nullptr when querying the size later. If you construct a detached sequence from a null container, there is no reason to create the internal storage. The size is evidently 0 in that case. Fix sizeInline() to tell us as much. Pick-to: 6.10 6.9 6.8 Task-number: QTBUG-129972 Task-number: QTBUG-139025 Change-Id: I33347805fc79f81c69c3191a76ff9167186b43f0 Reviewed-by: Olivier De Cannière <olivier.decanniere@qt.io>
* QtQml: Avoid repeated retrieval of Heap::Sequence::storagePointer()Ulf Hermann2025-09-011-4/+5
| | | | | | | | | | Each of those incurs a null check. Pick-to: 6.10 6.9 6.8 Task-number: QTBUG-129972 Task-number: QTBUG-139025 Change-Id: I7bc96755629d57e1a8f0bf69e0db8de8df737665 Reviewed-by: Olivier De Cannière <olivier.decanniere@qt.io>
* QtQml: Rephrase Sequence's appendInline()Ulf Hermann2025-09-011-12/+9
| | | | | | | | | | | | What we actually want is append default constructed elements. Doing this the natural way avoids needless complication. Pick-to: 6.10 6.9 6.8 Task-number: QTBUG-129972 Task-number: QTBUG-139025 Change-Id: I97318b0e093a76a3d67539ea0d4e28614db4879b Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> Reviewed-by: Olivier De Cannière <olivier.decanniere@qt.io>
* QtQml: Heap::Sequence::isReference() where appropriateUlf Hermann2025-09-011-6/+6
| | | | | | | | | | | | | In order to determine whether we need to write back, conceptually we need to know whether the sequence is a reference. That happens to be the case if there is an object to write back to, but that's not how object() was meant to be used. Pick-to: 6.10 6.9 6.8 Task-number: QTBUG-129972 Task-number: QTBUG-139025 Change-Id: Ie3e0e0318ecabd6f25d545d1198c07a0037b68fe Reviewed-by: Olivier De Cannière <olivier.decanniere@qt.io>
* QtQml: Inline Sequence's shiftInline into its ownly userUlf Hermann2025-09-011-30/+21
| | | | | | | | | | It gets in the way if kept seperate. Pick-to: 6.10 6.9 6.8 Task-number: QTBUG-129972 Task-number: QTBUG-139025 Change-Id: I105ee78e89ce561ec27e8badc27aa94a717ace39 Reviewed-by: Olivier De Cannière <olivier.decanniere@qt.io>
* QtQml: Accept Heap::Sequence in doGetIndexed()Ulf Hermann2025-09-011-8/+6
| | | | | | | | | | It only operates on the heap object anyway. Pick-to: 6.10 6.9 6.8 Task-number: QTBUG-129972 Task-number: QTBUG-139025 Change-Id: I7e6c232fd68893429533e1b10363ef9922a33ae7 Reviewed-by: Olivier De Cannière <olivier.decanniere@qt.io>
* QtQml: Eliminate Heap::Sequence::hasData()Ulf Hermann2025-09-012-4/+4
| | | | | | | | | | We want to encapsulate the container as much as possible. Pick-to: 6.10 6.9 6.8 Task-number: QTBUG-129972 Task-number: QTBUG-139025 Change-Id: I7cf991ea7a3a879584066e7121c49e102ebadf08 Reviewed-by: Olivier De Cannière <olivier.decanniere@qt.io>
* QtQml: Inline Sequence::containerIsEqualTo into its only userUlf Hermann2025-09-012-19/+21
| | | | | | | | | | We don't want to expose it from Sequence's interface. Pick-to: 6.10 6.9 6.8 Task-number: QTBUG-129972 Task-number: QTBUG-139025 Change-Id: Iae144bb8a66a24660dd8da490edb0b4bd7cdc81e Reviewed-by: Olivier De Cannière <olivier.decanniere@qt.io>
* QtQml: Inline containerDeleteIndexedProperty into its only userUlf Hermann2025-09-012-26/+24
| | | | | | | | | | We don't want to expose it from Sequence's interface. Pick-to: 6.10 6.9 6.8 Task-number: QTBUG-129972 Task-number: QTBUG-139025 Change-Id: I35c37ea1da675a83a1a8d3a4af08e4301c8cd60c Reviewed-by: Olivier De Cannière <olivier.decanniere@qt.io>
* QtQml: Inline Sequence::containerPutIndex into its only userUlf Hermann2025-09-013-46/+40
| | | | | | | | | | We don't want to expose it from Sequence's interface. Pick-to: 6.10 6.9 6.8 Task-number: QTBUG-129972 Task-number: QTBUG-139025 Change-Id: I12453fed0143e5e75dfc749b87b197ec328085f7 Reviewed-by: Olivier De Cannière <olivier.decanniere@qt.io>
* QtQml: Inline Sequence::containerGetIndexed() into its only userUlf Hermann2025-09-012-22/+20
| | | | | | | | | | We don't want to expose it from Sequence's interface. Pick-to: 6.10 6.9 6.8 Task-number: QTBUG-129972 Task-number: QTBUG-139025 Change-Id: Ic001925c7fc1ae3be623e2fd7451f99d17899471 Reviewed-by: Olivier De Cannière <olivier.decanniere@qt.io>
* QtQml: Remove some methods from Sequence's public APIUlf Hermann2025-09-012-67/+50
| | | | | | | | | | | | | Inline at() into its only caller, move size() further up to be visible from all callers, and make them all static functions taking a Heap::Sequence. This prevents them from being called from elsewhere and improves encapsulation. Pick-to: 6.10 6.9 6.8 Task-number: QTBUG-129972 Task-number: QTBUG-139025 Change-Id: I65c724119c0df95f2d26116b3ff6ab0a4218d91f Reviewed-by: Olivier De Cannière <olivier.decanniere@qt.io>
* QtQml: Move Sequence's {load|store}Reference into the heap objectUlf Hermann2025-09-012-42/+58
| | | | | | | | | | | It's fine to call them from Sequence and its helper classes, but it shouldn't be called from outside. Pick-to: 6.10 6.9 6.8 Task-number: QTBUG-129972 Task-number: QTBUG-139025 Change-Id: I0bfe5d813ec8fdee6c814269df069935fe304ccd Reviewed-by: Olivier De Cannière <olivier.decanniere@qt.io>
* QtQml: Move Sequence's length accessors into SequencePrototypeUlf Hermann2025-09-012-3/+9
| | | | | | | | | | We will need to befriend them. Pick-to: 6.10 6.9 6.8 Task-number: QTBUG-129972 Task-number: QTBUG-139025 Change-Id: I0d877627f2b838f2bf06a7049cd51927e13bd24d Reviewed-by: Olivier De Cannière <olivier.decanniere@qt.io>
* QtQml: Inline containerOwnPropertyKeys into its only userUlf Hermann2025-09-011-7/+2
| | | | | | | | Pick-to: 6.10 6.9 6.8 Task-number: QTBUG-129972 Task-number: QTBUG-139025 Change-Id: I2062b537c1c00908b7cc86f394d95ffdf2eabbee Reviewed-by: Olivier De Cannière <olivier.decanniere@qt.io>
* QtQml: Factor out Sequence's variant data creationUlf Hermann2025-09-011-10/+10
| | | | | | | | | | We want to use it in other places. Pick-to: 6.10 6.9 6.8 Task-number: QTBUG-129972 Task-number: QTBUG-139025 Change-Id: I720c4a71144ab634d70a1ec0115ca81b8030d083 Reviewed-by: Olivier De Cannière <olivier.decanniere@qt.io>
* QtQml: Refactor QV4::Sequence's raw container operationsUlf Hermann2025-09-014-27/+88
| | | | | | | | | | We want to encapsulate the container as well as possible. Pick-to: 6.10 6.9 6.8 Task-number: QTBUG-129972 Task-number: QTBUG-139025 Change-Id: I87841fbe9a9c9f1756eddc979b82ec8b90eec8e2 Reviewed-by: Olivier De Cannière <olivier.decanniere@qt.io>
* QtQml: Store detached VariantAssociation objects on the JS heapUlf Hermann2025-08-213-169/+248
| | | | | | | | | | | | While the VariantAssociation is detached it is subject to the GC or unrelated C++ code deleting objects from its internals. Since it's then not the owning object's responsibility to track this anymore, we need to track it ourselves. The way to do it is to use the existing V4 objects. Pick-to: 6.10 6.9 Task-number: QTBUG-139025 Change-Id: Ic1d5aa85171b5d91c2b9d546963268b6f09c2802 Reviewed-by: Sami Shalayel <sami.shalayel@qt.io>
* QtQml: Add method to generate a QVariantHash from a JS objectUlf Hermann2025-08-162-7/+20
| | | | | | | | | | This generalizes the QVariantMap code path. Pick-to: 6.10 6.9 6.8 Task-number: QTBUG-139025 Change-Id: Ibbdc1da974d3c166474c4bd02fb4c70d8df3e688 Reviewed-by: Semih Yavuz <semih.yavuz@qt.io> Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
* QtQml: Fix formattingUlf Hermann2025-08-163-370/+364
| | | | | | | | ReferenceObject and VariantAssociationObject were indented in rather confusing ways. Change-Id: I3a4ef04f716609a0b32844bb14e4dfded6a1f2fa Reviewed-by: Semih Yavuz <semih.yavuz@qt.io>
* QtQml: Properly null-check module exports when iteratingUlf Hermann2025-08-121-2/+2
| | | | | | | | | | | | | We construct the iterator from the exports of the module in all current code paths. Therefore, this case can't happen in the current code. Still, the fact that we have a branch that throws a reference error there tells us that it's intended to work on other collections of names, too. Let's complete the check and also check for nullptr since resolveExport can indeed return that. Coverity-Id: 486706 Change-Id: Ieaf3996e76265e9e6ef59c2168699e47e41e8ff5 Reviewed-by: Olivier De Cannière <olivier.decanniere@qt.io>
* JSRuntime: Add const correctnessOlivier De Cannière2025-08-122-5/+5
| | | | | | Change-Id: I2fc82de562909ab2e0eecfbbe1e2e53953a33756 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* QtQml: Optimize retrieval of string from ValueUlf Hermann2025-08-121-2/+2
| | | | | | | | stringValue() already checks isString(). We don't have to do it twice. Coverity-Id: 486710 Change-Id: I074228f9a120c3bbfe6d4a65f05fe11322fbd07b Reviewed-by: Olivier De Cannière <olivier.decanniere@qt.io>
* QtQml: std::move strings rather than copying themUlf Hermann2025-08-121-2/+2
| | | | | | | | Coverity-Id: 486699 Coverity-Id: 486697 Coverity-Id: 486715 Change-Id: Icdd15ff578f8be55fe9db3ffc38e893f667edc40 Reviewed-by: Olivier De Cannière <olivier.decanniere@qt.io>
* QtQml: Drop dead codeUlf Hermann2025-08-121-2/+0
| | | | | | | | | The propertyList is an array allocated on the JavaScript stack. None of it can be null. Coverity-Id: 486709 Change-Id: I3178181aa89bfff86fb5aa469660a912b4f1691c Reviewed-by: Olivier De Cannière <olivier.decanniere@qt.io>