aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml
Commit message (Collapse)AuthorAgeFilesLines
* Make sure QQmlVmeProfiler methods can be inlinedUlf Hermann2014-01-172-121/+121
| | | | | | | | Move the definitions to the header and adapt the documentation. Task-number: QTBUG-35315 Change-Id: I511a192cfe1e3e09ade035175cb8f3f332022143 Reviewed-by: Kai Koehne <kai.koehne@digia.com>
* Switch QML profiler off when deleting QQmlProfilerServiceUlf Hermann2014-01-171-0/+1
| | | | | | | | | | | Like this we don't have to check for QQmlProfilerService::instance anymore in order to find out if we can use the profiler service. If instance == 0 then enabled == false. Furthermore if it was thread safe before it must still be thread safe like this. Task-number: QTBUG-35315 Change-Id: Ie5737e3586f2431afbf11423ba53fd13dd371feb Reviewed-by: Kai Koehne <kai.koehne@digia.com>
* [new compiler] Add support for type and enum resolution for custom parsersSimon Hausmann2014-01-176-35/+89
| | | | | | | | | This is in preparation for listmodel support, share the code for resolving types and enums between the old and the new compiler, as all it needs is the imports. Change-Id: I4908d71eee50c769108e0e2b68b03496722fa49d Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* [new compiler] Fix error reporting location for custom parsersSimon Hausmann2014-01-172-16/+6
| | | | | | | | | | After the binding of QQmlCompilePass to QQmlTypeCompiler, I forgot to change the customer parser handling to also report the errors correctly back to the QQmlTypeCompiler. Instead they were collected locally with an empty url. Change-Id: I5ee527a77e27c0339c507f326a3b0f0837353db3 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* [new compiler] Fix implicit component definition for default propertiesSimon Hausmann2014-01-171-2/+14
| | | | | | | | | When trying to determine if an object binding should be a component or not and we don't have a property name for the binding, then we must check if the default property happens to be a QQmlComponent. Change-Id: Ie21fc438b8b2d86caa3991794e6eac688c074440 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* [new compiler] Add support for value interceptors / on-assignmentsSimon Hausmann2014-01-176-34/+150
| | | | | | | | | | | | | | Behavior on x { NumberAnimation { ... } } is implemented by assigning a value interceptor (Behavior is a sub-class of that) to the x property in a special way. That requires various things: * A VME meta-object must be created and installed on the surrounding object, in order for the interceptors to work * On assignments need to be excluded from duplicate property assignment checks * Behaviours require also finalization callbacks on component creation Change-Id: I40250b71081a2e315cda3bdb6677fa4b227fa443 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* [new compiler] Clean up property cache / meta object builderSimon Hausmann2014-01-174-54/+86
| | | | | | | | Move the outter loop into the builder class itself, use a vector instead of a list (we know that it's a fixed size and we only do indexed access) Change-Id: I933f0496ea47b3bc7c2bebde7f1a14b4f603b4c3 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* [new compiler] Initial support for QQuick state changesSimon Hausmann2014-01-173-1/+16
| | | | | | | This requires the use of the customer parser together with lazy binding compilation Change-Id: I45d8a206267d3e0c807771a79645168254be9c95 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* [new compiler] Preliminary support for script string propertiesSimon Hausmann2014-01-175-1/+75
| | | | | | | These should later get resolved at compile time, like enum assignments. Change-Id: I2f40c8d13330d2a101f79af12fe708f466eef225 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* [new compiler] Fix group property initializersSimon Hausmann2014-01-171-1/+7
| | | | | | | | | | | | | | | | Bindings with an object initializer without a type name must be group properties, instead of regular object bindings. Fixes font { pixelSize: 24 } versus font.pixelSize: 24 Change-Id: I468caa48be13f91f88545ef001ac9aaa46ba5d14 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Merge remote-tracking branch 'origin/stable' into devSimon Hausmann2014-01-1711-149/+239
|\ | | | | | | | | | | | | | | | | Conflicts: .qmake.conf src/imports/dialogs/DefaultFileDialog.qml src/imports/widgets/qquickqfiledialog.cpp Change-Id: I00de6dd05cb773f01254061d585a82c90b229acd
| * Merge remote-tracking branch 'origin/release' into stableSimon Hausmann2014-01-166-126/+200
| |\ | | | | | | | | | Change-Id: Id18709cb0a4d85ffdadffa28aef98323367292d4
| | * V4: relieve more memory allocator pressure.Erik Verbruggen2014-01-161-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | For _ZN13BenchmarkDemo11initPhysicsEv from the Octane testsuite, the total allocated memory drops from 1.5GB to 51MB. Peak memory usage stays at 29MB. Again, slow implementations of malloc()/free() will see a performance improvement. Change-Id: I21bc2f0d3735de0980fc9b3745906016e2e48a61 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
| | * Fix failing context->next != 0x1 assertionSimon Hausmann2014-01-163-10/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | After commit bf173fe5da381c88343296ca33ef6b06389c6d20 context objects are always on the GC heap and no more in that special linked list or stack allocated, so the next pointer became dangling/uninitialized and asserting on it was bound to fail randomly. Since we no more allocate contexts on the stack, we can safely remove the assertion. Task-number: QTBUG-35917 Change-Id: I104bd129c6c32f46a6302052f563abdf926cb879 Reviewed-by: Albert Astals Cid <albert.astals@canonical.com> Reviewed-by: Jan Arve Sæther <jan-arve.saether@digia.com>
| | * V4 IR: do edge splitting after SSA transformationErik Verbruggen2014-01-161-8/+58
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This reduces the work for the dominator tree/frontier calculations, because there are less blocks to consider. All blocks inserted by splitting the critical edges, have (by definition) no effect on the dominator calculations. However, the immediate dominators for all new blocks needs to be added, because this information is used by the block scheduling. This change reduces memory/time usage during optimization passes, especially when processing excessively big switch statements. Change-Id: Ia69882e9dabdddffa1c98b1079012d8d988e1e8f Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
| | * V4: lower memory allocator pressure.Erik Verbruggen2014-01-163-77/+95
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Changes to datastructures and more re-using of locally used temporary vectors. For the test regress-74474-002.js this lowers the total allocated memory from 1.98GB to 158MB. Thse peak memory usage stays at 75MB. There is no functional change. This should give a modest performance improvement which mainly depends on the speed of malloc()/free(). Change-Id: I1877c1903e59a33ee79ff2b801ef6f2c1cee30a6 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
| | * V4 IR: update immediate dominators when purging unreachable basic-blocksErik Verbruggen2014-01-161-13/+19
| | | | | | | | | | | | | | | | | | | | | | | | | | | The basic block scheduling uses this information to place loops. When the immediate dominator information is invalid, the scheduling can be sub-optimal, or will sometimes forget to schedule some blocks. Change-Id: Iaeb45f2b757b676310be25a658ceadc07d5722ec Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
| | * V4: remove unnecessary spills and order them correctly.Erik Verbruggen2014-01-163-21/+31
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When doing edge resolving, too many spills were generated, and the dependency tracking of moves was not complete. Now we only insert spills that are caused by phi-nodes (because any other spill would be generated at the point a variable was defined). However, there can still be multiple dependencies between the moves generated by the edge resolving. Instead of only checking the first dependency, all of them are tracked. The bug report was a case where an unneccesary spill was generated, that got tracked, but "suppressed" the other (valid!) dependent move. The randomness was caused by the hash seeding of QHash. Task-number: QTBUG-35840 Change-Id: Ifbc3c8fc13de53c46a8b5859721b2497189921a3 Reviewed-by: Fawzi Mohamed <fawzi.mohamed@digia.com> Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
| * | Make sure that profiling can only be started if debugging is enabled.Ulf Hermann2014-01-152-2/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Enabling the profiler doesn't make much sense if there is no debug service as the messages can't be sent anywhere then. Furthermore, the profiler instance is only properly initialized if debugging is enabled and thus enabling profiling without debugging being enabled can cause problems. Change-Id: I784a110126d45a9a2bc9d9e14d9a22e2980c3a42 Reviewed-by: Kai Koehne <kai.koehne@digia.com>
| * | Do not crash if /proc is not mountedAlbert Astals Cid2014-01-152-18/+30
| |/ | | | | | | | | | | | | | | When proc is not mounted pthread_getattr_np fails, so default to 1MB stack in getStackLimit and to exactGC in MemoryManager Change-Id: Ic7515fd420f2d39a656808d24a3915a657722891 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
| * Make qtdeclarative compile with QT_NO_TRANSLATIONTasuku Suzuki2014-01-101-3/+5
| | | | | | | | | | | | Change-Id: I73efc8c568e2368bc804eacab9e8f9cced8a030b Reviewed-by: Alan Alpert <aalpert@blackberry.com> Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
* | Merge "Merge remote-tracking branch 'origin/stable' into dev" into ↵Frederik Gladhorn2014-01-145-147/+66
|\ \ | | | | | | | | | refs/staging/dev
| * | Merge remote-tracking branch 'origin/stable' into devFrederik Gladhorn2014-01-105-147/+66
| |\| | | | | | | | | | | | | | | | | | | Conflicts: src/qml/jsruntime/qv4managed_p.h Change-Id: I5da7ae9c87a539e42292f272d9e2b5faab619c9f
| | * Fix bad cast of virtual class to base class via reinterpret_castThiago Macieira2014-01-101-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Clang 3.4 found it: qv4managed_p.h:202:9: error: 'reinterpret_cast' to class 'QQmlDelegateModelGroupChangeArray *' from its base at non-zero offset 'QV4::Managed *' behaves differently from 'static_cast' [-Werror,--Wreinterpret-base-class] QV4::Managed and QV4::Object are non-virtual classes (they have no virtual table). I'm not sure if they are (C++11) standard layout, but they seem to fit the bill. However, QQmlDelegateModelGroupChangeArray has virtual functions, so the QV4::Managed sub-object in that class does not start at offset zero. That means reinterpret_cast'ing the base to the derived class is *wrong*, even if we're just calling a static function. In any case, we're static_cast'ing in the next line anyway, so this can't hurt. Change-Id: Icc796f7ecf8f41f859ea5fc877f5db5c87799964 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
| | * Remove redundant copies of enabled flag in QML profilerUlf Hermann2014-01-093-145/+63
| | | | | | | | | | | | | | | | | | Task-number: QTBUG-35315 Change-Id: Idd35a330531722cb3d4e0d3e95cb3be6e5697688 Reviewed-by: Michael Brasser <michael.brasser@live.com>
| | * Fix some typos in documentation.Jeff Tranter2014-01-091-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | Fix some spelling and grammatical errors in comments that show up in Qt documentation. No changes to code. Change-Id: I2d91518900c9b60ee8e8a8f549c88a1d50632b3d Reviewed-by: Nico Vertriest <nico.vertriest@digia.com> Reviewed-by: Alan Alpert <aalpert@blackberry.com> Reviewed-by: Martin Smith <martin.smith@digia.com>
| | * Fix broken build with Clang < 3.4 after 60aed669345be33b916c445565Thiago Macieira2014-01-081-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The -Wunused-const-variable option was added in Clang 3.4 and is not yet supported on Apple's Clang. This test needs to be extended with the Apple Clang version that supports the option. Change-Id: Ief6ece91f1c0200c3359e74dafca4b893fcde7ca Reviewed-by: Simon Hausmann <simon.hausmann@digia.com> Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@digia.com> Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>
* | | [new compiler] Fix assignments to enums from string literalSimon Hausmann2014-01-141-1/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | This is the quick fix for the tests. Later we'll need a pass that resolves this and changes the QV4::CompiledData::Binding::Type according to the resolved value of the property. Change-Id: I5a799873ae8fb7f716a6af22f7e67927820c2513 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* | | [new compiler] Fix mix of bindings and signal handlersSimon Hausmann2014-01-141-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When storing a binding, we remove any previous binding. If we store a signal handler, we look up the same property, but we must not destroy any existing bindings: property int someThing: { ...} onSomeThingChanged: { ...} Change-Id: Ie5afd986ee3d8b4f2efd0aabca331c33a225abfc Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* | | [new compiler] Fix error handling for property names that look like signalsSimon Hausmann2014-01-141-4/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | The check for the right hand side of a potential signal handler declaration needs be placed after we determined that we are really assigning to a signal. Change-Id: I7f5417dc30ba7365327560e1b16ee9ceaa9bed76 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* | | [new compiler] Fix scope, binding target and property object for bindings in ↵Simon Hausmann2014-01-142-51/+52
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | group properties Resolve the confusion about _qobject and _qobjectForBindings, use _qobject for all property related bits and _qobjectForBindings is gone, in favor of _scopeObject. Usually they are the same, but in group properties for example, the _scopeObject remains the outter object but the _qobject becomes the object that's returned by the group property, i.e. anchors.fill: parent For that binding, the scope object is the outter object but the _qobject is the value of the anchors property. Then there's binding target, which is revelant for value type properties, where it remains the outter object. In theory one could nest a value type property in a regular group object, in which case _scopeObject would be outter most, _qobject would be the value type wrapper and _bindingTarget would be the group object. Change-Id: Ie3135d951910bf40ece192ab6260d7a9e6e9cdd6 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* | | Allow assignment of a QML Locale object to a C++ QLocale property.Mitch Curtis2014-01-143-65/+75
|/ / | | | | | | | | | | | | Task-number: QTBUG-36125 Change-Id: I58454db0c47684aed3e95c52a8135fd5fd6bf2f9 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* | [new compiler] CleanupsSimon Hausmann2014-01-104-900/+900
| | | | | | | | | | | | | | | | Move all compilation phase related sub-classes (property cache generator, component and alias resolver, etc.) together into qqmltypecompiler.cpp Change-Id: I598c801d9434623fc8e6338dec11e4d4ee6d7232 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* | [new compiler] Add support for implicitly defined componentsSimon Hausmann2014-01-107-35/+124
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Use-cases like itemDelegate: Item { ... } implicitly define a component without the item-surrounding Component {}, base on the fact that the property itself is of type QQmlComponent (or derived). This means we have to synthesize a Component {} object and insert it into the data structure. Change-Id: I8992451a5a6732c7fd898eaf83c276dc6a8b7d19 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* | [new compiler] CleanupsSimon Hausmann2014-01-105-86/+155
| | | | | | | | | | | | | | | | Tie QQmlCompilePass and QQmlTypeCompiler together, so that we can eliminate the battery of parameters to the individual compiler phases. Change-Id: If2b6cf8416e6c2253c8f054048d1fd5ae12282b6 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* | [new compiler] Move component determination and alias resolvingSimon Hausmann2014-01-093-44/+54
| | | | | | | | | | | | | | | | | | Move the code before the JS code generation, as we are going to need the component boundaries for the correct scoping. This requires the component and alias resolver to operate on the pre-compiled-data data structures. Change-Id: I8d2e697d8a05e5a4914db93e785704f6b2434a2e Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* | Classify as Q_PRIMITIVE_TYPE a few private types.Sérgio Martins2014-01-092-0/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Found by clang plugin matching the criteria: - is pod / movable - sizeof(T) <= sizeof(void*) - used by QList The only case that can't be fixed is: QList<TypeCache::Iterator> in qqmltypeloader.cpp:1924 because Iterator is declared in qhash.h:349 Maybe use a QVector ... Change-Id: I9007cf43b0cf29ff39f3d2c95fb60d766c976ce7 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* | Classify struct Use with Q_MOVABLE_TYPE.Sérgio Martins2014-01-091-0/+3
| | | | | | | | | | | | | | It's movable, private, !isLarge and used by QLists in this code. Change-Id: I08c6e7e65625aba1bc798a3911a20d6d2ddc73fb Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* | Cleanup: change signature of Object::insertMember()Lars Knoll2014-01-0910-70/+70
| | | | | | | | | | | | | | | | | | | | | | | | Methods returning a Property pointer have to be removed, so that we can move over to store member data requiring only one value for the common case of data properties. This will in the long term reduce memory consumption on 64 bit systems quite a bit. Change-Id: I78de3794ec7b3bc5db13aa57275d3f08fa9d470a Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* | Smaller code cleanupLars Knoll2014-01-092-24/+13
| | | | | | | | | | | | | | Move the check for isEmpty() into ArrayData::getProperty. Change-Id: I1791ced706afadbb2f45883cb1b3915f40500b71 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* | Rework array handling for JS objectsLars Knoll2014-01-0932-799/+1295
| | | | | | | | | | | | | | | | | | Split up ArrayData into two classes, one for regular arrays, one for sparse arrays and cleanly separate the two cases. Only create array data on demand. Change-Id: I9ca8d0b53592174f213ba0f20caf93e77dba690a Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* | Fixes for argument objectsLars Knoll2014-01-094-4/+14
| | | | | | | | | | | | | | | | | | Fix a possible infinite recursion, and a corner case where we wouldn't set the correct data when writing to the argument object Change-Id: Ia64b9f62e9b881e24d74e23d96d5eb27805a126f Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* | Add Object::hasOwnProperty()Lars Knoll2014-01-095-10/+16
| | | | | | | | | | | | | | | | This allows us to remove more getOwnProperty calls. This will be required later on to extend our array handling. Change-Id: I7b7f5887990cd443accf51891644fdfbb849cf35 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* | Merge remote-tracking branch 'origin/stable' into devSimon Hausmann2014-01-083-10/+168
|\| | | | | | | Change-Id: Ied8d65aaf57e897a3dbc4df100744a594e8ee2cf
| * V4: optimize dominator frontier storage.Erik Verbruggen2014-01-081-7/+164
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Changes the dominator frontier storage from a set of basic-blocks for every basic-block to a BasicBlockSet for every basic-block. This new class stores a maximum of 8 nodes in a vector, and switches to a bit vector when going beyond 8 nodes. This is important in two cases: most basic-blocks have 2-3 nodes in the frontier, and an array is faster than a set in these cases. The few cases where the frontier goes beyond 8 nodes, is when a switch statement is used with lots of cases that all fall-through. On regress-74474-003.js this reduces peak memory usage from 1.68G to 60M. The switch statement in this test results in 27000 basic-blocks. Change-Id: I42646522ba9f8642d42a5d70fc6b760bb47ae69f Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
| * Ameliorate DocumentationAlan Alpert2014-01-071-2/+3
| | | | | | | | | | | | Task-number: QTBUG-33438 Change-Id: I9187513d3b4c68d99c90726288653aae5c553a67 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
| * [ChangeLog][QtQml] Fix JavaScript Array.pop() not updating the internal ↵Simon Hausmann2014-01-071-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | array length correctly While the length property was reporting the correct value, the internal array length was out-of-sync. Task-number: QTBUG-35979 Change-Id: I68820a349cf1ce88c6aabc6a2301a8a861018a10 Reviewed-by: Liang Qi <liang.qi@digia.com> Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* | [new compiler] CleanupsSimon Hausmann2014-01-085-173/+308
| | | | | | | | | | | | | | | | Move the code that calls the main compilation passes into a separate QQmlTypeCompiler class, away from the QQmlTypeLoader. Change-Id: Ia2f33a074d7fe7d9a092ff94d1e6cfc961ad5bdb Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* | [new compiler] Fix signal handlers for properties declared in the same objectSimon Hausmann2014-01-085-82/+103
| | | | | | | | | | | | | | | | | | | | | | | | We need to generate the property caches before we can try converting the signal handler expressions in the AST to function declarations, as that conversion requires looking up the signal signature / meta-data from the property cache. This in turn requires rewriting the property cache generator code to operate on the data structure we have before creating the QV4::CompiledData. Change-Id: I0d1c59d947f36171b4eb89f47a2e1ff1bc493c6f Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* | [new compiler] Fix assigning signal handlersSimon Hausmann2014-01-081-1/+4
| | | | | | | | | | | | | | | | When assigning a signal handler to the fooChanged property, we need to look up fooChanged as signal function, not as data property. Change-Id: I4c0e4374cea8ce9596428975e45e78a0b743a6fc Reviewed-by: Lars Knoll <lars.knoll@digia.com>