Lars Knoll [Wed, 5 Mar 2014 07:40:11 +0000 (08:40 +0100)]
Better way of retrieving the prototype property for FunctionObjects
Make sure FunctionObjects always have the prototype property at
index 0. This way we can speed up the instanceOf operator even more,
and at the same time save 16-28 bytes of memory per FunctionObject.
Change-Id: I8527bc8f9dc7b04a9db8395b5f05bab47ddc21ce
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Tue, 4 Mar 2014 12:19:27 +0000 (13:19 +0100)]
Remove the name member of FunctionObject
The data is anyway stored in the name property of
the FunctionObject, and is not performance critical.
Change-Id: If1784b0ec6f368bc474c246bb9c2c50d5e56b689
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Mon, 3 Mar 2014 20:00:30 +0000 (21:00 +0100)]
Reduce memory consumption of FunctionObject
Remove varCount and formalParameterCount members
in FunctionObject and retrieve them from the
CompiledFunction instead.
Change-Id: I8a6cdc6d354b0f33da9d67a4c3dbfe8a7cc96176
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Mon, 3 Mar 2014 19:51:25 +0000 (20:51 +0100)]
Remove unused entries in CompiledData
Change-Id: Ie5313371fa5dec6630a1d955d4409ea4d6163810
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Thu, 6 Mar 2014 08:09:05 +0000 (09:09 +0100)]
Fix test failure in qqmldebugjs autotest
The debugger should only have one breakpoint that can
be set per line. Nevertheless, we should have proper
line number information available in case we stop at
other places.
We also need a debug instruction before the return
statement, so that step out will always find a last
stopping point in the parent frame.
Change-Id: I86145fc244148f106a4a97ce69ab60b568c8dac6
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Tue, 4 Mar 2014 09:35:11 +0000 (10:35 +0100)]
Fixes to breakpoint handling
Make sure stepping works correctly, and we always
break at a valid breakpoint.
Change-Id: I6a3032b3ae204484b8a92b2031904a7f681c7f80
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Mon, 3 Mar 2014 13:41:31 +0000 (14:41 +0100)]
Add a Line instruction to the interpreter
This unifies the way we handle line numbers in the
JIT and Interpreter.
Remove the now unused lineNumberMapping code and data.
Change-Id: I1d60b1fbb77e70b531fa73d93410683e84dd1e3c
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Mon, 3 Mar 2014 13:20:54 +0000 (14:20 +0100)]
Simplify our breakpoint handling
Only store a Hash of break points in the debugger,
instead of the involved logic that currently adds and
removes break points. Add the current line number to
the Debug statements in the interpreter, and pass them
on to the debugger for checking whether we should really
break.
This adds a slight additional overhead to running inside the
debugger, but greatly simplifies the logic and doesn't require
modifying the bytecode anymore. This in turn opens up the
possibility to run the debugger on JIT generated code later on.
Change-Id: If2a3ae8f8d08b69a3a704cbbe0a84000f917a32e
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Simon Hausmann [Thu, 6 Mar 2014 15:55:09 +0000 (16:55 +0100)]
Remove old compiler and VME
This removes the bulk of the code. A few smaller cleanups remain, to be
done in smaller changes as they move code around.
Additionally the "optimize" option of qqmlbundle was removed. It called QQmlScript::Parser::preparseData,
which however was not implemented and always returned an empty QByteArray. Therefore "optimize" would not
do anything and the class is gone now :)
Change-Id: I0c265e756704cb53c5250be1f69e4a3e1b6e64d5
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Paul Olav Tvete [Thu, 6 Mar 2014 13:25:08 +0000 (14:25 +0100)]
QQuickWidget: make sure to use the proper GL format
We cannot be sure that the toplevel widget has the correct GL format,
and we do not want to force depth and stencil buffers on surfaces that
do not need them. Therefore, we have to create an offscreen surface for
the FBO.
Change-Id: I7dfc3a6f84bf79125f3ab811a204972e95e245a3
Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
Giorgos Tsiapaliokas [Wed, 23 Oct 2013 13:47:30 +0000 (16:47 +0300)]
Add the features of QLoggingCategory to QML's debugging methods.
It is now possible to modify the output of QML's debugging methods. Also the
prefix of "qml" makes it possible to capture the output from the QML
files using qInstallMessageHandler.
This commit depends on qtbase/
4967c7106568d5df0be4d40bf793583c7c6bdb69
Change-Id: I2c7a2cb96a0b91fd3249dc2dacbab63e6ac68243
Reviewed-by: Kai Koehne <kai.koehne@digia.com>
Erik Verbruggen [Thu, 6 Mar 2014 11:39:45 +0000 (12:39 +0100)]
V4 JIT: fix stack space reserving code
sub32 will truncate the register's content, which is a bit problematic
when the stack is located outside the first 4G (e.g. on win64).
Change-Id: I8c2c55c0e08f4e5b67295ba6a8a26d7d55d4477f
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Erik Verbruggen [Thu, 6 Mar 2014 11:37:06 +0000 (12:37 +0100)]
V4: fix address printing on 64bit platforms
The addresses were truncated to 32bits, which is a problem on win64,
because JITted code ended up outside that range.
Change-Id: I0d8b92486714340dffe4b4c2de29cf11a929a149
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Erik Verbruggen [Wed, 5 Mar 2014 17:03:31 +0000 (18:03 +0100)]
Fix MSVC2012 compiler warnings in disabled code.
... that should soon get enabled.
Change-Id: I2f8393cab5e99a7f5d3c7df6af6385fefd2d4dd1
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Erik Verbruggen [Wed, 5 Mar 2014 16:47:59 +0000 (17:47 +0100)]
V4 JIT: fix up register usage for linux/macos on x86_64.
Change-Id: Ia6f3a78410fd41c58904a60f4c7a0630cf5230d0
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Erik Verbruggen [Wed, 5 Mar 2014 14:34:08 +0000 (15:34 +0100)]
Fix more MSVC2012 compiler warnings.
All are conversions from size_t to int or to unsigned.
Change-Id: Ic94c938dcad6d50a32dd6ec62da2341869cf994d
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Friedemann Kleint [Thu, 6 Mar 2014 15:54:32 +0000 (16:54 +0100)]
QML testlib: Do not modify the arguments passed into QGuiApplication.
argc/argv passed into QGuiApplication must match those
of main on Windows due to the special command line parsing.
Task-number: QTBUG-36466
Change-Id: Id722692d2bdc18a6627fdaeffb349b78137ae314
Reviewed-by: Alan Alpert <aalpert@blackberry.com>
Shawn Rutledge [Tue, 4 Mar 2014 11:52:10 +0000 (12:52 +0100)]
MouseArea: make clear containsMouse requires the cursor to be inside
Task-number: QTBUG-37133
Change-Id: I5d0943963bf423c3f930365502e42b54a71d9e88
Reviewed-by: Jerome Pasion <jerome.pasion@digia.com>
Reviewed-by: Alan Alpert <aalpert@blackberry.com>
Laszlo Papp [Wed, 5 Mar 2014 06:42:45 +0000 (06:42 +0000)]
Fix a couple of typos in the documentation
Change-Id: Ie06af2e33e5adf6d56391929bd763b01e57557b0
Reviewed-by: Jerome Pasion <jerome.pasion@digia.com>
Andrew Knight [Thu, 6 Mar 2014 12:59:42 +0000 (14:59 +0200)]
QSGBatchRenderer: return when a shader is not returned by the manager
If a shader can't be found from the manager (e.g., if it failed to link),
return from rendering. This prevents the renderer from crashing on a
null pointer.
Task-number: QTBUG-37290
Change-Id: I44d0bbb721854c0bc6da681ff55f71140a5cb0bc
Reviewed-by: Gunnar Sletta <gunnar.sletta@jollamobile.com>
Simon Hausmann [Wed, 5 Mar 2014 09:27:14 +0000 (10:27 +0100)]
Switch the code path from the old compiler and VME to the new code path
Change-Id: Ib1b38ec07830f8df9fa4caacd00879434608053b
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Thu, 6 Mar 2014 12:44:40 +0000 (13:44 +0100)]
[new compiler] Fix crash in tst_qquickpathview
QQuickPathView's attached object uses a dynamic meta-object. So when installing
bindings - such as a signal handler - on it and we want to determine the
property cache for it, we must not use the QQmlEnginePrivate::cache overload
that takes a QObject pointer, as that will - rightly so - return a null
pointer. Instead in this case it is okay to go with the static type overload,
by using the meta-object of the attached type known at compile time. This is
consistent with the VME code path.
Change-Id: Iffc64f7ee4677c6cc60d071b80f4032cf8037ab7
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Thu, 6 Mar 2014 12:25:02 +0000 (13:25 +0100)]
[new compiler] Fix potential infinite recursion when using the incubator
Some auto-tests use the incubation controller with a one-step boolean,
so shouldInterrupt() always returns true. When we're in the finalization phase
enabling the bindings one-by-one, pop one off the bindings stack and enable it
_before_ doing the shouldInterrupt() check. Otherwise we don't progress at all.
Change-Id: Ibd5bbc253f8e8f74b08c91b018533c9e2735d2c8
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Thu, 6 Mar 2014 09:18:08 +0000 (10:18 +0100)]
[new compiler] Fix incorrect accelerated lookups to id objects
When compiling JS code in the scope of a component, make sure to always
set the id object mapping, even if it is empty. Otherwise the id objects
from one scope might leak into another, leading to id object dependencies
that are invalid.
Change-Id: Ib2bca11203acd6924e8c74f9560a1ee3e00d7e39
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Takumi Asaki [Tue, 4 Mar 2014 06:59:34 +0000 (15:59 +0900)]
Doc: Fix "Right-to-left User Interfaces"
* Change from QApplication to QGuiApplication
* Change from qmlviewer to qmlscene
Change-Id: I6ceee763c125c4896905884f55437e3f375408d7
Reviewed-by: Topi Reiniƶ <topi.reinio@digia.com>
J-P Nurmi [Wed, 5 Mar 2014 19:25:14 +0000 (20:25 +0100)]
Stabilize tst_QQuickPathView:dataModel()
- QQuickPathView::setCurrentIndex() result must be immediate
=> no need for random QTest::qWait(100) there.
- Remove another random QTest::qWait(100) after inserting
a model item. Instead, wait for the desired result ie.
delegate creation with QTRY_VERIFY().
- Furthermore, disable the default highlight move duration to
avoid the auto test and QQuickPathView's internal timeline
fighting over the current index.
Task-number: QTBUG-35705
Change-Id: Ie53fdcc8f7955a03027da38b075e6042a3aea7f2
Reviewed-by: Alan Alpert <aalpert@blackberry.com>
J-P Nurmi [Tue, 4 Mar 2014 14:40:14 +0000 (15:40 +0100)]
Fix GridView flow enum docs
Task-number: QTBUG-37232
Change-Id: Ib975181e6cff9a86f642d822dfc92773528598cb
Reviewed-by: Leena Miettinen <riitta-leena.miettinen@digia.com>
Reviewed-by: Thomas Hartmann <Thomas.Hartmann@digia.com>
Reviewed-by: Alan Alpert <aalpert@blackberry.com>
Gunnar Sletta [Mon, 3 Mar 2014 20:02:30 +0000 (21:02 +0100)]
Reset the expose cycle when polishAndSync aborts.
On platforms with misbehaving expose behavior, we will get
and exposure, even though the window is not renderable.
This results in the renderthread being in the "wait for polish"
state while the GUI thread goes back to "no state". Check
for this and reset render thread's expose cycle when it
is hit.
Task-number: QTBUG-37201
Change-Id: I6a6c89d9016301ff19443f88a2c182012b4eb65f
Reviewed-by: Ulf Hermann <ulf.hermann@digia.com>
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com>
Ulf Hermann [Tue, 4 Mar 2014 15:34:48 +0000 (16:34 +0100)]
Add some leading white space to generated code for QML signals.
Like this the column numbers in the generated code are correct. We rely
on the column numbers in quite a few places.
The alternative solution of extending the Javascript parser to add an
initial column offset would result in much more code and complexity.
const-casting the column number and adding to it after compiling would
be an option but as the column number may be saved in other places, too,
this is not desirable.
Task-number: QTBUG-37226
Change-Id: I0d11816d96ff4e7c756064646755a3e9874f9790
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Simon Hausmann [Wed, 5 Mar 2014 09:49:22 +0000 (10:49 +0100)]
[new compiler] Fix designer integration
If the QML puppet disables onComplete callbacks, we must obey that also
in the new code path.
Change-Id: Ic9b74c6a5ee04dc5b8e4f545a8e6cc0fa8dd28f1
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Wed, 5 Mar 2014 09:25:02 +0000 (10:25 +0100)]
Make tst_qqmlincubator::chainedAsynchronousIfNested more robust
Don't rely on the exact number of instructions executed in the VME to
determine the loading state of the incubator. With the simpler object
creator that's not based on instructions we might end up creating objects
in less steps, so make the test work with both.
Change-Id: If8a3628cac97251036c9b2cd8f26e75eca1d39ed
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Wed, 5 Mar 2014 09:21:52 +0000 (10:21 +0100)]
[new compiler] Fix auto component creation with composite types
A binding like this
property Component foo: SomeComposite {}
should not do an implicit component insertion if SomeComposite is actually
a component. The property assignment is compatible and can proceed normally.
Fixes tst_qquickcanvasitem, but added a separate unit test for this case.
Change-Id: I7221eebd38dba3f2a82b59341739b9b67211e352
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Tue, 4 Mar 2014 19:48:11 +0000 (20:48 +0100)]
[new compiler] Add support for deferred properties
Change-Id: I592518444ef353cfcf153df0e6afa2fbac613560
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Tue, 4 Mar 2014 15:15:26 +0000 (16:15 +0100)]
[new compiler] Fix invalid memory reads when JS closures outlive QML types
If QQmlCompiledData gets destroyed while somebody still has refcount on the
QV4::CompiledData::CompilationUnit, then unit's _data_ would be freed already
by ~QQmlCompiledData. Given that compilationUnit->data is pointing to the same
malloc'ed address as QQmlCompiledData::qmlUnit, we can just let the
CompilationUnit always own the data.
Fixes tst_qquickloader and makes it possible to run the qquickcomponent tests.
Change-Id: Ie3f3e5335139236d7c2524a327665bda0a9cc847
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Andrew Knight [Wed, 5 Mar 2014 08:23:08 +0000 (10:23 +0200)]
Fix qquickfolderlistmodel test compilation on WinRT
Like WinCE, the changeDrive() test should be disabled on WinRT.
Change-Id: I85749b84fef372e166fe52c263225478094ccdb4
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
Erik Verbruggen [Tue, 4 Mar 2014 11:29:03 +0000 (12:29 +0100)]
Fix MSVC2012 compiler warnings.
Tested on both win32 and win64.
Change-Id: I47755e2da51829e61e1452eaaf84a057224b478b
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Reviewed-by: Gunnar Sletta <gunnar.sletta@jollamobile.com>
Friedemann Kleint [Wed, 5 Mar 2014 09:44:52 +0000 (10:44 +0100)]
Add some error handling to the QWindowContainer example.
Use a QMainWindow and display errors occurring during loading
QML as well as scene graph errors (for example, failure
to create an Open GL context) in the status bar.
Change-Id: Id9cf190e8a4f40de0f18ab081e2747135221bb88
Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
Gunnar Sletta [Tue, 4 Mar 2014 14:30:29 +0000 (15:30 +0100)]
Don't sort batches when there are no changes.
On node removal we change the batch, but don't set rebuild
as everything else should be drawn as is. A sort after such a removal
could result on the order of batches being changed without the other
nodes being updated. This would then result in incorrect ordering
and nodes could be obscured.
Task-number: QTBUG-37222
Change-Id: I57dd2fbc945e8c10c949743f59315b3372a4b6f4
Reviewed-by: Michael Brasser <michael.brasser@live.com>
Simon Hausmann [Tue, 4 Mar 2014 14:26:18 +0000 (15:26 +0100)]
[new compiler] Fix property initialization order for mixed list and default property setups
Get a little closer to replicating the old compiler's behavior without
introducing a new nested data structure for lists:
* List property assignments should happen in declaration order for the items.
Instead of doing magic in QmlObject::appendBinding, simply traverse the UiArrayBinding
members in reverse order. Within a list, the items remain in order then, due to
QmlObject::appendItem prepending. In the overall picture for the entire object,
the reverse initialization order for properties is also preserved this way.
* When an object has property bindings to the default property and also bindings
to a named property that - after meta-object determination - turns out to be
the default property, then we need to merge the bindings and preserve the
declaration order. (tst_qqmlecmascript::defaultPropertyListOrder checks that)
Fixes tst_qqmlenginedebugservice that expects bindings to an entire list to
happen in reverse order (like other properties).
Change-Id: I7408c97cdb971e06b1ee43a2a85f8cc6f008c444
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Tue, 4 Mar 2014 12:11:59 +0000 (13:11 +0100)]
Fix crash when accessing var properties in objects with invalid context
We've had two indepedent reports of people running into the issue of
their QML code accidentally trying to access var properties in item view
delegates that were on the path of destruction, i.e. their QQmlContext was
already marked as invalid. Any such access would cause a failing assertion
in debug builds or a crash in release builds.
This patch removes the dependency to QQmlContextData for accessing the
var properties and adds a test-case that covers this use-case.
This is a regression from Qt 5.1.x.
Task-number: QTBUG-37227
Change-Id: Icf55d5fa8c15e45974e78086e9e11b2401ea9bad
Reviewed-by: Albert Astals Cid <albert.astals@canonical.com>
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Tue, 4 Mar 2014 08:45:13 +0000 (09:45 +0100)]
Combine the source file, line and column number triplet in a common structure
This avoids unnecessary function calls when all of the three pieces need
to be retrieved from a QQmlBoundSignalExpression.
Change-Id: Ibcd498c907ea723baf6439cf32ca5fc704f204b5
Reviewed-by: Ulf Hermann <ulf.hermann@digia.com>
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Mon, 3 Mar 2014 07:36:32 +0000 (08:36 +0100)]
[new compiler] Fix profiler support
Add profiler tracing calls during objection creation and make sure to set the
function token / source location correctly for the synthesized function
declarations of signal handlers.
Change-Id: Ie4f8accce3a5c5d1d57bb0646cda588b89b76718
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Thu, 27 Feb 2014 13:30:09 +0000 (14:30 +0100)]
[new compiler] Fix some qqmlincubator tests
We need to track the objects created and pass them over to the VME guard used in the
incubator. The incremental build nature of the incubator requires that to avoid crashes.
For nested incubators we need to set the activeVMEData field in the root QQmlContext, to allow
child incubators to locate the parent.
Lastly we need can emulate most of the VME behavior in terms of build states when running with
QQmlInstantiationInterrupt by presenting four build steps: The initial state, two build steps,
a finalization step and the state when we're done.
Change-Id: I16cd7f71744decb9d4735ec77e9d944fad18e88d
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Mitch Curtis [Mon, 3 Mar 2014 12:18:36 +0000 (13:18 +0100)]
Document qmlContext() and qmlEngine().
146b942d59cca446516652d42718197573d34e46 documented them (Qt 5), but
for some reason they aren't visible [1].
c74e4a74ba97d32df7406fb684527d415dd8a6ba (Qt 5.1) then moved them into
the QtQml namespace "to avoid symbol conflicts with QtDeclarative", and
then did the following trick so that they could be called without
qualifying the functions with the namespace:
using namespace QtQml;
For that reason, qdoc shouldn't see the namespace, so we #ifdef it out.
[1] project.org/doc/qt-5.0/qtqml/qqmlengine.html
Change-Id: Id815ae4de7f081c22755eef7c37a2bc6e812b440
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Reviewed-by: Jerome Pasion <jerome.pasion@digia.com>
Laszlo Agocs [Tue, 4 Mar 2014 10:28:44 +0000 (11:28 +0100)]
Remove isES() usage in scenegraph
The error signal patch added some usages of QOpenGLFunctions::isES().
These need to be temporarily removed.
Change-Id: Ibd1d8094059020708aefe4b3502ba56d624928b3
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
Reviewed-by: JĆørgen Lind <jorgen.lind@digia.com>
Erik Verbruggen [Mon, 3 Mar 2014 12:40:39 +0000 (13:40 +0100)]
V4 JIT: enable register allocator on win32.
Change-Id: I7134bd3721df0e000ad0bd135c01e76c55271156
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Michael Brasser [Mon, 3 Mar 2014 18:06:51 +0000 (12:06 -0600)]
Reduce size of QQmlBoundSignalExpression in the common case.
This reduces the base size of QQmlBoundSignalExpression by 20 bytes,
by moving member variables specific to runtime rewrites in to an "extra"
structure.
Task-number: QTBUG-37134
Change-Id: I235895a395ba4304a7ea071d88aa9aebcfff61cb
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Fri, 21 Feb 2014 07:45:09 +0000 (08:45 +0100)]
Move all binop related code into qv4binop*
Change-Id: I8f96b8d570dd4c0139b0a2e595055b3b2c6dae70
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Simon Hausmann [Mon, 3 Mar 2014 11:39:32 +0000 (12:39 +0100)]
[new compiler] Fix tst_qqmlvaluetypes
* Make sure to remove earlier set bindings for any value type property, not just
scripts. We want font.bold: false to also override an earlier actual binding
for example.
* Propagate on assignments on qualified property names throughout the
chain of bindings - that makes it easier to detect them early on.
* The group property collection in the bindings validator should only include
value bindings to group properties, not on assignments - as they can always
appear in parallel.
Change-Id: Ib7ec4de755a5a8d269324a77cba36eb945366274
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Mon, 3 Mar 2014 11:04:57 +0000 (12:04 +0100)]
[new compiler] Detect when writing to read-only value type property and bail out
Also annotate QML expressions in the IR with a proper function name, to
make debugging easier.
Change-Id: I5bacf446f40d35896f50bed0732f6f10408d9c97
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Lars Knoll [Mon, 3 Mar 2014 11:21:22 +0000 (12:21 +0100)]
Remove unused ExecutionEngine::allFunctions
Change-Id: I69a736ac7920a10667949475600460ee43d61480
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Mon, 3 Mar 2014 11:13:52 +0000 (12:13 +0100)]
Remove unused codeSizes
Change-Id: I13c7d9dda7cd1e771079f6fdaa175008b3a3e0e5
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Mon, 3 Mar 2014 10:51:17 +0000 (11:51 +0100)]
Remove nArguments and name from QV4::Function
Saves 12 bytes per Function
Change-Id: I9a495805f9201eb6162a520ff5c2defeb73dc37a
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Reviewed-by: Michael Brasser <michael.brasser@live.com>
Simon Hausmann [Wed, 26 Feb 2014 15:59:46 +0000 (16:59 +0100)]
[new compiler] Fix tst_qquickloader::deleteComponentCrash by introducing a watcher for self-deletion
Change-Id: I809a4860831847ab61c7ca0ba302057ec165ee24
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Sergio Ahumada [Mon, 3 Mar 2014 16:28:30 +0000 (17:28 +0100)]
Fix some typos
Change-Id: Iea540b768232ea423ea7f04e41655198931cf36d
Reviewed-by: Jerome Pasion <jerome.pasion@digia.com>
Simon Hausmann [Mon, 3 Mar 2014 14:01:04 +0000 (15:01 +0100)]
Work around MSVC having issues with nested classes and templates
Move SharedState into its own top-level structure.
Change-Id: I0b6baeade57ff342df23672808d77933fa6ad26d
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Jerome Pasion [Tue, 18 Feb 2014 15:32:48 +0000 (16:32 +0100)]
Doc: Renamed Qt Quick Code Samples page.
-new name is Qt Quick Examples and Tutorials
-includes tutorials, not just examples or code samples.
Task-number: QTBUG-36838
Change-Id: I660770cac1cdd71cd3b34bad878b0e59a088924b
Reviewed-by: Leena Miettinen <riitta-leena.miettinen@digia.com>
Erik Verbruggen [Mon, 3 Mar 2014 12:39:48 +0000 (13:39 +0100)]
V4 JIT: enable disassembler on windows.
Change-Id: I55a2a96a1a774c79cc2146c6b47d441fede1d102
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Erik Verbruggen [Mon, 3 Mar 2014 12:12:09 +0000 (13:12 +0100)]
V4 JIT: fix MSVC warning.
d:\dev\qt5-dev\qtdeclarative\src\qml\jit\qv4assembler_p.h(394) : warning C4146: unary minus operator applied to unsigned type, result still unsigned
Change-Id: Iff972f419d7505ecedeb42b4b7eb456295225cb2
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Konstantin Ritt [Tue, 25 Feb 2014 15:11:50 +0000 (17:11 +0200)]
Fix build with QT_FORCE_ASSERTS
Change-Id: Ie87b574f6cabe6095a531129511823ec55c58929
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Sergio Ahumada [Sun, 2 Mar 2014 10:32:29 +0000 (11:32 +0100)]
Prefer to use normalised signal/slot signatures
Change-Id: I9856c110399c4b6b1ea6aba2d92392cecff04656
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Simon Hausmann [Sun, 2 Mar 2014 21:28:25 +0000 (22:28 +0100)]
[new compiler] Set class name for QML types correctly
As required by the tst_qqmlinfo tests.
Change-Id: Id163c9dab539e7fd1e1da43c4fa0dfb0d1fb6e34
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Lars Knoll [Fri, 21 Feb 2014 14:48:39 +0000 (15:48 +0100)]
Fix a crash in the register allocator
The base for an indexed access can be a constant.
Change-Id: Icc529c02fb0ff2ac30d6f40088781b6ecfba81fc
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com>
Albert Astals Cid [Fri, 28 Feb 2014 12:45:29 +0000 (13:45 +0100)]
Make QQmlPropertyData::name const
Change-Id: Idfa52f625fd116b9fc858bb383a1ee17b3ff3e66
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Fri, 28 Feb 2014 15:19:10 +0000 (16:19 +0100)]
Make it possible to call QQmlEngine::setObjectOwnership at any time
QJSEngine::newQObject should call setObjectOwnership only if it wasn't
called before, to preserve any policy set by the user earlier. Otherwise
it's only safe to call after newQObject and then you'd have to call it
_every_ time the QObject is wrapped, at all call sites. Instead this
patch preserves any policy set.
Task-number: QTBUG-37160
Change-Id: I6178fa38cd7f4b09d818b6f18762c21588562422
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Fri, 28 Feb 2014 15:01:53 +0000 (16:01 +0100)]
Fix calls to overloaded slots for QObjects not created by QML
If we don't have a property cache, we need to fall back to a slower method of
determining the overload methods. We have the code for that in RelatedMethod,
once we determine that we're calling overloads, but we never hit that code path
because we did not _initially_ determine that the method was an overload.
Task-number: QTBUG-37157
Change-Id: I8ff39156e5668236b3797400b4086ed545624398
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Sun, 2 Mar 2014 19:43:09 +0000 (20:43 +0100)]
[new compiler] Fix warnings in qml list model custom parser
For the warnings to have the correct column/line number information, we
need to set it on the QQmlData before calling the custom parser.
Change-Id: I6e1c729491df6af846e41ee88e785b32e4715751
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Sun, 2 Mar 2014 19:35:57 +0000 (20:35 +0100)]
[new compiler] Add the correct object index to the custom parser
Without the correct index the calls to astForBinding run out of bounds. Fixes
tst_qqmllistmodel crash.
Change-Id: I6fb8b77866cbf247e7373cdbece6833c92be3615
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Sun, 2 Mar 2014 10:22:26 +0000 (11:22 +0100)]
Make QQmlExpression more robust when initializing from script string
Don't require a binding id to initialize the url/col/line. Fixes
tst_qqmlexpression with the new compiler code path, where the id isn't needed.
Change-Id: Ic09d850038c93fdc4f2bee6190cb515081dd5865
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Fri, 28 Feb 2014 15:49:51 +0000 (16:49 +0100)]
[new compiler] Cleanup
Move SignalHandlerConverter into the type compiler and make it a proper
compile pass sub-class.
Change-Id: Ice8fc9acdfdb613e1d7b25728401a2376a692ccc
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Fri, 28 Feb 2014 12:06:28 +0000 (13:06 +0100)]
[new compiler] Fix for tst_qqmlconnections
Make sure to pass onFooChanged handlers to QQmlConnection's custom parser by
not relying on the signal handler converter to set the
IsSignalHandlerExpression flag. That should only be set for real signal
handlers, the custom parser gets the raw bindings.
Also don't try to initialize bindings at creation time the custom parser
covers.
Change-Id: Iae22bc886c312843136f073959e59da440f4184c
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Fri, 28 Feb 2014 07:12:55 +0000 (08:12 +0100)]
[new compiler] Fix qquickvisualdatamodel tests
Allow for signal handlers to be installed on group property objects. We determine
the property cache objects earlier correctly, so the empyt type name check is not
necessary.
Change-Id: Idc38fdc1a78c0f4d5147ec882e7872a62510e790
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Thu, 27 Feb 2014 20:48:18 +0000 (21:48 +0100)]
[new compiler] Fix QQmlPropertyMap tests
QQmlPropertyMap is treated as a type that cannot be cached with QQmlPropertyCache,
doesn't allow for accelerated property access and also doesn't allow for declarations
of any kind in sub-types.
Change-Id: Id8a6811120aa61ffb5037394e758cc62501e0fc3
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Thu, 27 Feb 2014 12:06:10 +0000 (13:06 +0100)]
[new compiler] Fix tst_qqmlengine::trimComponentCache
Fix bug in QQmlCompiledData refcounting.
Change-Id: I09528419c602d3173db2f13c516d2f0d79abd92e
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Thu, 27 Feb 2014 12:05:47 +0000 (13:05 +0100)]
[new compiler] Fix tst_qqmlqt's trace test
Fix name of signal handler functions to be the original onFoo name.
Change-Id: I80247cd9be9d77d99e4de0f0e945ff5a1a420244
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Thu, 27 Feb 2014 08:59:43 +0000 (09:59 +0100)]
[new compiler] Clean up error handling in AST pass
When traversing the AST, record all errors using the same method, which makes sure to
include the url - as expected by some tests.
Change-Id: Ib83623742db86f20144b9aa41f7f0628702d285a
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Thu, 27 Feb 2014 07:41:26 +0000 (08:41 +0100)]
[new compiler] Fix tst_qqmlqt::createComponent
Initialize the binding's self-pointer before calling addObject(), as some funky tests
try to delete the binding from within there and the self-pointer allows us to find out
later that the binding was deleted.
Change-Id: I8c9e3fe7304f304eace29c0631263b1ec021a8c4
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Thu, 27 Feb 2014 07:11:40 +0000 (08:11 +0100)]
[new compiler] Fix a few more tests related to property declarations with initializers
Consistently declare the property first before processing the initializer tree or binding
statement. Some tests expect errors in the declaration to show up before errors in the
statement for example.
Change-Id: If66bc4969fe9db7ae32f00023f3c90343bbe98e0
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Wed, 26 Feb 2014 17:43:28 +0000 (18:43 +0100)]
Add a column to the default method error message
This brings both compilers in sync by reporting line and column if doing a signal object
assignment without a default method.
Change-Id: I8b1bf90c4ce3cd7b117ad7eecdbfe319b07b1191
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Wed, 26 Feb 2014 14:58:12 +0000 (15:58 +0100)]
[new compiler] Report an error when trying to append to a read-only list
Change-Id: I9c6d7f2f0983274ecb8b7cc15c0dbe21f3e0d58f
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Wed, 26 Feb 2014 13:22:12 +0000 (14:22 +0100)]
[new compiler] Fix property assignments to resolved enums
Force the type of the property to write to int, if we resolved the enum earlier
at type compile time. This is consistent with the VME and allows for
assignments to enum properties without a string converter. Fixes
tst_qquickgridview in particular.
Change-Id: Ic29f4a6115930bd7fff45f1658c00d0bfc24c7ec
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Wed, 26 Feb 2014 10:54:50 +0000 (11:54 +0100)]
[new compiler] Remove incorrect assertion
It is perfectly valid for example to do
Behaviour on someColor.r
Change-Id: I39961509b4698c19441f71baa4af197f633c5b39
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Wed, 26 Feb 2014 10:48:50 +0000 (11:48 +0100)]
[new compiler] Fix remaining qquickanimation test failures
It can happen that even during initial binding evaluation, additional
finalization callbacks are registered. Catch those by setting the
activeObjectCreator pointer in the QQmlEngine accordingly - the VME does
it the same way.
Change-Id: If0fc902a4c8bdf7e8eec17bf433fd2bf11be7c04
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Wed, 26 Feb 2014 10:43:21 +0000 (11:43 +0100)]
[new compiler] Fix qquickanimation test crash
Share finalization callbacks across all sub-instances of ObjectCreator,
by moving into into SharedState.
Change-Id: Ibcd679caecd2009b4705d04c859b2fea4c2295fd
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Wed, 26 Feb 2014 09:53:02 +0000 (10:53 +0100)]
[new compiler] Fix implicit component determination inside group properties
Don't only scan full-typed objects for property bindings that may define
components implicitly, do this for any types we know (propertyCache populated)
and that aren't explicitly of Component type.
Change-Id: I918b636be6d524e919cdd4efd49c33e63da64de3
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Wed, 26 Feb 2014 09:26:51 +0000 (10:26 +0100)]
[new compiler] Fix evaluateEnum for custom parsers
When storing the string for a script binding - next to to the AST node - then
for expression statements skip the (potentially synthetically inserted)
semicolon. Its omission is required for the use of QQmlCustomParser::evaluateEnum.
Change-Id: I3b556fd6a884f5c9c290d7d793eeab4dd135343e
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Tue, 25 Feb 2014 15:36:41 +0000 (16:36 +0100)]
[new compiler] Compile functions and bindings in appropriate scopes
This enables accelerated property access also for this code path.
Change-Id: Iafb177b1fe7878e6c54cfb258f2e8d8ea32aa59e
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Tue, 25 Feb 2014 13:22:36 +0000 (14:22 +0100)]
[new compiler] Fix memory leaks
In memory pool allocated classes we cannot have members that require a
destructor to run to free memory. Therefore this patch removes the QSets in the
object class used for duplicate property and signal name checking. The checking
is instead done using linear search, which should be fine given that usually
the number declared signals and newly declared properties is low per type.
Change-Id: Id7a7a9bdd9e145975dcee4d5340489615f4f71e3
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Mon, 24 Feb 2014 15:35:20 +0000 (16:35 +0100)]
[new compiler] Fix error location for run-time binding errors
We should point to the expression itself, not to the property.
Change-Id: I1d5b7dd80f7865076852228985717f79ceb79134
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Mon, 24 Feb 2014 15:28:25 +0000 (16:28 +0100)]
[new compiler] Fix lazy binding evaluation
Similar to commit
5dc7649f5ad7dca6e13707e827d001c3f118a6ef in the vme, we
need to set the pending binding bit for non-value-type property bindings
in order for the optimization to work and the tests to pass.
Change-Id: I89c0a3ea78c331b9c82eb8595bd4ab252b271ab5
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Thu, 20 Feb 2014 12:48:24 +0000 (13:48 +0100)]
[new compiler] Fix error reporting for group properties
Report errors when setting group properties multiple times, or when
assigning values to them. Some of this can be done right after parsing,
some of it requires knowledge about the type of group property (QObject or
value type)
Change-Id: I1aa33e64a5f64dfa4f625469f5b6a84cd8dfb18d
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Thu, 20 Feb 2014 11:51:53 +0000 (12:51 +0100)]
[new compiler] Fix error reporting when trying to set list properties multiple times
Change-Id: Ifcbed45894b739a57873356e8963670084614880
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Thu, 20 Feb 2014 11:25:36 +0000 (12:25 +0100)]
[new compiler] Don't allow for attached properties inside group properties or nested
Change-Id: I7ca4e1c1b111d587f519275b146179b4e6f6a51f
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Thu, 20 Feb 2014 11:21:21 +0000 (12:21 +0100)]
[new compiler] When resolving names of attached properties, don't report the error at import time
Instead report it later with a more specific error message. This is consistent with the old compiler.
Change-Id: Iba345b7ecc8a9ff474938f69118665eb0d965594
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Wed, 19 Feb 2014 16:16:35 +0000 (17:16 +0100)]
[new compiler] Fix determination of property caches for attached properties
That in turn fixes error messages around property validation in attached
types.
Change-Id: Idef9f7652b225c5769b7fdf43e41731b197c1144
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Wed, 19 Feb 2014 15:03:03 +0000 (16:03 +0100)]
[new compiler] Improve error message for incorrect signal assignments
Change-Id: I16e7cdc6b5b49200259ea7e57d84e00f095554f4
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Wed, 19 Feb 2014 14:55:11 +0000 (15:55 +0100)]
[new compiler] Ensure that qualified type names end in an id with an upper case letter
Change-Id: I35166b86ddc7c2e87dc77b59f4d8272279ca5688
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Wed, 19 Feb 2014 14:40:17 +0000 (15:40 +0100)]
[new compiler] Report errors when a property name starts with an upper case letter and lacks a qualification
Change-Id: I66e9669459920cfb3543a3ebcec8501465c2ef85
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Wed, 19 Feb 2014 12:08:34 +0000 (13:08 +0100)]
[new compiler] Fix error reporting for invalid component specifications
Change-Id: I435845ab1188e65a7ef019d758fbbba57e2e0bec
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Wed, 19 Feb 2014 11:54:02 +0000 (12:54 +0100)]
[new compiler] Fix error location when id property is used in list model elements
Change-Id: Iec648d593d30117c512009dcc6ab0d50b8fc51af
Reviewed-by: Lars Knoll <lars.knoll@digia.com>