platform/upstream/qtdeclarative.git
11 years agoClean-up the linearize function.
Erik Verbruggen [Mon, 10 Jun 2013 14:35:43 +0000 (16:35 +0200)]
Clean-up the linearize function.

Change-Id: I75982638dd90ceb776064b3cd0153b96523a70e1
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoAdd type conversion nodes to the IR.
Erik Verbruggen [Mon, 10 Jun 2013 14:32:48 +0000 (16:32 +0200)]
Add type conversion nodes to the IR.

Change-Id: I5a5a69ccd2e2f2f3c9f8592c4b04455d6a567e83
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoConvert the instance methods of context2d to v4
Lars Knoll [Tue, 11 Jun 2013 11:42:18 +0000 (13:42 +0200)]
Convert the instance methods of context2d to v4

Change-Id: Ic2b80ab828a0f96a72850b0672f5c085a4cfae0a
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoConvert some of the subobjects of context2d to v4
Lars Knoll [Mon, 10 Jun 2013 21:38:55 +0000 (23:38 +0200)]
Convert some of the subobjects of context2d to v4

Change-Id: I0ad5b466e65da41a7acf8a0a89e7cf26ce2df76d
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoConvert the first canvas subobject over to v4 style
Lars Knoll [Mon, 10 Jun 2013 14:44:04 +0000 (16:44 +0200)]
Convert the first canvas subobject over to v4 style

Change-Id: Idb99d4081358b46df6a0b5340c9b4fa220d48e80
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoAdd convenience method for creating accessor properties
Lars Knoll [Mon, 10 Jun 2013 14:16:40 +0000 (16:16 +0200)]
Add convenience method for creating accessor properties

Change-Id: I982cd16e6069e444a9311fe7695a56b7fbdfb161
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoCleanup: Get rid of dynamic property enumerator callbacks in QV4::Object
Simon Hausmann [Mon, 10 Jun 2013 14:29:53 +0000 (16:29 +0200)]
Cleanup: Get rid of dynamic property enumerator callbacks in QV4::Object

These are not needed anymore with the most recent portings away from v8.
Implemented Object::__hasProperty__ by means of query/queryIndexed.

Change-Id: Id02057a34c44a8c4e71912a5b5379740f09ef05d
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoUse QStringLiteral instead of QLatin1String
Lars Knoll [Mon, 10 Jun 2013 14:05:45 +0000 (16:05 +0200)]
Use QStringLiteral instead of QLatin1String

Also fix one place where v8::Value was used

Change-Id: I78745954fc987c7b3f247654706493d90cf91149
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoDon't include v8.h from qv8engine_p.h anymore
Lars Knoll [Mon, 10 Jun 2013 13:59:06 +0000 (15:59 +0200)]
Don't include v8.h from qv8engine_p.h anymore

Change-Id: Idb0f5744f65b28acbe878a3e9d33b4a3946ecab8
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoRemove usage of v8 from the context2d header
Lars Knoll [Mon, 10 Jun 2013 13:52:04 +0000 (15:52 +0200)]
Remove usage of v8 from the context2d header

Change-Id: Icfcae6d55d5f912a756630d10e6a098adada0591
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoRemove v8 usage from qquickglobal
Lars Knoll [Mon, 10 Jun 2013 13:39:00 +0000 (15:39 +0200)]
Remove v8 usage from qquickglobal

Change-Id: I75c803d8dd997703b64f5b75226d76cf498d03d3
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoRemove v8 API usage in qquickitem
Lars Knoll [Mon, 10 Jun 2013 13:18:26 +0000 (15:18 +0200)]
Remove v8 API usage in qquickitem

Change-Id: Iddea91433afaa7f269c66294a500465bd53c40cd
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoRemove two more places where we used v8
Lars Knoll [Mon, 10 Jun 2013 13:10:02 +0000 (15:10 +0200)]
Remove two more places where we used v8

Change Value::isInt32() to convert to an integer if possible.
Use this to avoid casting doubles to ints twice. usage of
v8::Value::IsInt32() in two places.

Change-Id: I5b9d8be7d90b461c11440bf54660ceef7e8f0f1b
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoCleanups
Simon Hausmann [Sat, 8 Jun 2013 11:29:40 +0000 (13:29 +0200)]
Cleanups

Remove some more QV8Engine usage and fix the header guards

Change-Id: I6894fb8b55b254406c192e7c8d0c2ac466643f43
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoFix qqmlecmascript::enums and nonNotifyable
Simon Hausmann [Fri, 7 Jun 2013 21:21:27 +0000 (23:21 +0200)]
Fix qqmlecmascript::enums and nonNotifyable

In the v8 bindings in expressionIdentifier we used to print the url with line
number and only in the base class we printed the expression itself. With
qv8bindings.cpp gone, we can do that now in the base class, as expected by the
test.

Adjusted the test also by columns.

Change-Id: I8d532d21baf5bf2fbfcca56c2657a1d65025fe84
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoFix two qqmlecmascript tests (assignSequenceTypes one of them)
Simon Hausmann [Fri, 7 Jun 2013 20:43:14 +0000 (22:43 +0200)]
Fix two qqmlecmascript tests (assignSequenceTypes one of them)

In various places in the engine we do QVariant(v4Value.booleanValue()),
which unfortunately constructs a QVariant from an unsigned int.

IIRC we used Bool(uint) as type in the run-time to ensure that the compiler
allocates an entire general purpose register for JIT calls on all platforms, so
those functions remain untouched. But I think it's safe to at least change the
getters in Value, as those are never called directly from generated code.

Change-Id: Ia235141b8bcfc38403a7967436c68e73e7eee669
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoFix qqmlecmascript::sequenceConversionBindings
Simon Hausmann [Fri, 7 Jun 2013 20:11:18 +0000 (22:11 +0200)]
Fix qqmlecmascript::sequenceConversionBindings

Adjust the expected error message with the missing column

Change-Id: Iac6be0cdf7322bfb4289925c4bb67b5b2f0437f5
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoFix equalitySemantics sub-test in qqmlecmascript::sequenceConversionArray
Simon Hausmann [Fri, 7 Jun 2013 20:09:28 +0000 (22:09 +0200)]
Fix equalitySemantics sub-test in qqmlecmascript::sequenceConversionArray

Implement Managed::isEqualTo correctly

Change-Id: Ife4e2bf368037910614401e2ffa0c334b6581e30
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoFix qqmlecmascript::sequenceConversionIndexes
Simon Hausmann [Fri, 7 Jun 2013 18:49:28 +0000 (20:49 +0200)]
Fix qqmlecmascript::sequenceConversionIndexes

Fix line number and source file in generated warnings

Change-Id: Id7a96f67325ad43fd88499359b41944130a46f60
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoRemove failing test
Simon Hausmann [Fri, 7 Jun 2013 18:35:42 +0000 (20:35 +0200)]
Remove failing test

This test doesn't seem to make sense anymore, as it tested an implementation
aspect of the previous engine with the expression rewriter and v8 compilation.

Change-Id: I17a83b82080ab567431d8dc403f14f5266a81ba4
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoFix qqmlecmascript::signalWithJSValueInVariant
Simon Hausmann [Fri, 7 Jun 2013 18:31:57 +0000 (20:31 +0200)]
Fix qqmlecmascript::signalWithJSValueInVariant

Don't use arguments.callee as we're now in strict mode :)

Change-Id: I9992fd6d39a170ce6f6d751aa49393e50ca0e636
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoFix qqmlecmascript::nonExistentAttachedObject
Simon Hausmann [Fri, 7 Jun 2013 18:09:55 +0000 (20:09 +0200)]
Fix qqmlecmascript::nonExistentAttachedObject

Add column to the expected error message output

Change-Id: I585fdcedd7a78f1a208770765851f04ee5a5b207
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoFix tst_qqmlecmascript::propertyAssignmentErrors()
Simon Hausmann [Fri, 7 Jun 2013 14:59:32 +0000 (16:59 +0200)]
Fix tst_qqmlecmascript::propertyAssignmentErrors()

Implement the non-standard but yet widelysupported stack property
in Error objects, that this test requires.

Change-Id: I37effb3c918498ba0d89014fbdcac9b2f623b1fa
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoFix a few more QJSValue autotests
Lars Knoll [Fri, 7 Jun 2013 15:53:44 +0000 (17:53 +0200)]
Fix a few more QJSValue autotests

Change-Id: Ie870da8f6b8f9e34221bbfd10f328df1dc363294
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoQJSValue::property should return the exception if one was thrown
Lars Knoll [Fri, 7 Jun 2013 12:34:41 +0000 (14:34 +0200)]
QJSValue::property should return the exception if one was thrown

Change-Id: If87af8b6562d97a490950212a455ee46631d18f6
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoFix more QJSValue autotest errors
Lars Knoll [Fri, 7 Jun 2013 12:31:19 +0000 (14:31 +0200)]
Fix more QJSValue autotest errors

Fixes to setPrototype and setProperty

Change-Id: I72a5c754e65e4795c1c293525118191f78d91bbe
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoFix various errors in the qjsvalue auto test
Lars Knoll [Fri, 7 Jun 2013 12:06:36 +0000 (14:06 +0200)]
Fix various errors in the qjsvalue auto test

Fix creation of Array's from a QStringList
Properly implement toVariant()
Fix VariantObject::toString()
Fix conversion of variant lists to JS values
Remove an XFAIL

Allow comparison of QJSValue objects created from different
engines. There's no reason why we can't simply do this with v4.

Change-Id: I8d8c597dbb032926501508d60bd80622ec964d67
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoRemove the last v8 dependency from the delegate model
Lars Knoll [Fri, 7 Jun 2013 11:10:29 +0000 (13:10 +0200)]
Remove the last v8 dependency from the delegate model

Don't use a qv8objectresource for the items anymore.

Change-Id: I5aadd58bf432e0a8984234c03a369aaea92c5f9e
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoConvert the qml adapter model to v4
Lars Knoll [Fri, 7 Jun 2013 05:53:21 +0000 (07:53 +0200)]
Convert the qml adapter model to v4

Change-Id: Ief02791fd5391653477b0a6031a5e8e644afcfd4
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoConvert more of the delegate model to v4
Lars Knoll [Wed, 5 Jun 2013 21:52:56 +0000 (23:52 +0200)]
Convert more of the delegate model to v4

Change-Id: Ie74d092d9e4fbe66131a61ca7e2e713ef797214d
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoFix tst_qqmlecmascript::scriptErrors()
Simon Hausmann [Fri, 7 Jun 2013 14:20:54 +0000 (16:20 +0200)]
Fix tst_qqmlecmascript::scriptErrors()

* In the context wrapper, throw a real JS exception that when serialized
  to a string includes the "Error:" prefix (due to the error object's name)
* Added column information to one of the expected error messages

Change-Id: I4c1bc749f01425efb0a27121f7f1b8cf4946d644
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoFix tst_qqmlecmascript::signalEmitted
Simon Hausmann [Fri, 7 Jun 2013 13:59:55 +0000 (15:59 +0200)]
Fix tst_qqmlecmascript::signalEmitted

This test executes code in the Component.onDestruction signal handler that ends
up doing things like allocating new V4 objects on the GC heap. Since Component.onDestruction
is called (indirectly) from QV4::QObjectWrapper::~QObjectWrapper(), we have a slight
problem:

From within the destructor of a garbage collected object, _during_ a sweep, we
end up trying to allocate new managed objects. Instead of adding more
complexity to the memory manager, this patch avoids doing clever things in the
destructor, by delaying the emission of the destructed signal to the point
right before the real deletion of the QObject (which was already delayed with a
deleteLater).

Change-Id: I15d5ad36feee930745e1a3a0efb5be9a302426d3
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoRemove unused code from QV8Engine
Simon Hausmann [Fri, 7 Jun 2013 10:47:12 +0000 (12:47 +0200)]
Remove unused code from QV8Engine

Change-Id: Idb327cc50f0058e67f5c91d6ca35191b9ae64320
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoFix tst_qqmlecmascript::signalArguments
Simon Hausmann [Fri, 7 Jun 2013 10:05:42 +0000 (12:05 +0200)]
Fix tst_qqmlecmascript::signalArguments

Don't check for arguments.callee, which is only available in non-strict
mode

Change-Id: I90851862e36e5bc7c518198f9fe5672178a3ec58
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoMove QV4::QObjectWrapper into the v4/ subdirectory
Simon Hausmann [Fri, 7 Jun 2013 09:21:18 +0000 (11:21 +0200)]
Move QV4::QObjectWrapper into the v4/ subdirectory

Change-Id: I1c5b3e343e259adbf2f1ff3fa7b2ff225eb9b192
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoRemove last traces of v8:: API from QObject bindings
Simon Hausmann [Fri, 7 Jun 2013 09:02:03 +0000 (11:02 +0200)]
Remove last traces of v8:: API from QObject bindings

Change-Id: I41ed89c6a21dba67ad28f201e8f444bbcb039142
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoGet rid of QV8QObjectWrapper
Simon Hausmann [Fri, 7 Jun 2013 08:47:07 +0000 (10:47 +0200)]
Get rid of QV8QObjectWrapper

Change-Id: I3205a85cb9163d7b51cc58ba17f9056a2d50451c
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoGet rid of QV8QObjectWrapper:setProperty and SetProperty
Simon Hausmann [Thu, 6 Jun 2013 14:11:23 +0000 (16:11 +0200)]
Get rid of QV8QObjectWrapper:setProperty and SetProperty

Fold it all into QV4::QObjectWrapper::setQmlProperty and remove
a lot of otherwise unused code.

Change-Id: Ic28233fa7d4df898ff39ac065044319e01d47b88
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoSimplify QObjectWrapper calls from within other type wrappers
Simon Hausmann [Thu, 6 Jun 2013 13:59:41 +0000 (15:59 +0200)]
Simplify QObjectWrapper calls from within other type wrappers

... with the help of a getQmlProperty static function.

Change-Id: Ia823ba9ac995cb1a0591081bf18418f48d60e04d
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoGet rid of QV8QObjectWrapper::GetProperty
Simon Hausmann [Thu, 6 Jun 2013 13:18:03 +0000 (15:18 +0200)]
Get rid of QV8QObjectWrapper::GetProperty

Fold it completely into QV4::QObjectWrapper::getQmlProperty

Change-Id: I95093ce0b3d56a3a0b641f57ce2232bb5d4f0091
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoGet rid of QV8QObjectWrapper::getProperty
Simon Hausmann [Thu, 6 Jun 2013 12:52:07 +0000 (14:52 +0200)]
Get rid of QV8QObjectWrapper::getProperty

Replace the call sites with calls to getQmlProperty on the QObjectWrapper.

Change-Id: I3dbc3788c8d1631d817f65c738f0a8a31deb2866
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoRemove signal & slot related code from QV8QObjectWrapper
Simon Hausmann [Thu, 6 Jun 2013 12:18:11 +0000 (14:18 +0200)]
Remove signal & slot related code from QV8QObjectWrapper

The code isn't needed anymore. Also moved ExtractQtSignal/QtMethod
out, too.

Change-Id: I8d7a0ef89ad5ea1ca102a416b70e27597c0279b7
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoImplement QObject Signal <> JS Slot connections using QSlotObjectBase
Simon Hausmann [Thu, 6 Jun 2013 06:18:53 +0000 (08:18 +0200)]
Implement QObject Signal <> JS Slot connections using QSlotObjectBase

This eliminates the need for any extra bookkeeping.

This change relies on https://codereview.qt-project.org/#change,58112 in qtbase.

Change-Id: I873b77da342b5f7cbb862f13b53582ffd363e2c8
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoFix build failure introduced by the SSA
Peter Varga [Fri, 7 Jun 2013 08:00:41 +0000 (10:00 +0200)]
Fix build failure introduced by the SSA

Initialize DominatorTree::N in the constructor.

Change-Id: I9bf2e4f9a08253e024d3e0ff93cb45c279daf808
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoImproved block scheduling with "tuned" DFS.
Erik Verbruggen [Wed, 5 Jun 2013 14:30:44 +0000 (16:30 +0200)]
Improved block scheduling with "tuned" DFS.

Properties:
- all predecessors of a block are located before this block
- all blocks that are part of the same loop are contiguous, i.e., there
are no non-loop blocks between two loop blocks.

This is done by doing DFS, and preferring the "if-true" for CJUMP. Also,
any block with multiple incoming edges can only be scheduled if all
those edges have been scheduled, except for loop conditions. All loop
conditions are marked in the IR with "group containers", which in turn,
is used to schedule them contiguously.

This layout should minimise the life-ranges for variables.

Change-Id: I3c9fb4f18bb0fc89048e71905f48eb889d763ba0
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoMark loop blocks as belonging to a group.
Erik Verbruggen [Wed, 5 Jun 2013 14:19:48 +0000 (16:19 +0200)]
Mark loop blocks as belonging to a group.

This will be used for block scheduling.

Change-Id: I071c2107c0303d09dfd595c9825256a5167a1514
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoIntroducing SSA.
Erik Verbruggen [Thu, 2 May 2013 13:40:35 +0000 (15:40 +0200)]
Introducing SSA.

Change-Id: Id3315f3560a8a7c996147eb070876b0065a23c76
Reviewed-by: Fawzi Mohamed <fawzi.mohamed@digia.com>
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoMore verbose error message
Lars Knoll [Wed, 5 Jun 2013 23:38:16 +0000 (01:38 +0200)]
More verbose error message

Also fixes one auto test.

Change-Id: I165d7f00b43ee923f1f1f84cf772afa5dae0dcd7
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoRemove v8 usage in a few places
Lars Knoll [Wed, 5 Jun 2013 23:16:49 +0000 (01:16 +0200)]
Remove v8 usage in a few places

Change-Id: Ib9885d395dd799c0f9dc68e16efea44b60cb1418
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoRemove reliance on delayed template parsing.
Erik Verbruggen [Wed, 5 Jun 2013 12:51:31 +0000 (14:51 +0200)]
Remove reliance on delayed template parsing.

Change-Id: I11e7fd994123de9b947a51001f36dd8bf3938b44
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoPort the first half of the delegate model code to v4
Lars Knoll [Mon, 3 Jun 2013 21:01:00 +0000 (23:01 +0200)]
Port the first half of the delegate model code to v4

Change-Id: Ieda3de0a297ba15e4d6634a1123df27347830cfa
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoGet rid of the QV8Engine pointer in QV8QObjectConnectionList
Simon Hausmann [Wed, 5 Jun 2013 08:04:16 +0000 (10:04 +0200)]
Get rid of the QV8Engine pointer in QV8QObjectConnectionList

Change-Id: I06ee7afb9abd81a354d84d312be9ea90b91d9baf
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoImprove type error messages when reading properties
Simon Hausmann [Wed, 5 Jun 2013 07:59:18 +0000 (09:59 +0200)]
Improve type error messages when reading properties

This fixes the expected output of the qobjectConnectionListExceptionHandling and
while we're at it this patch also re-enables the importScripts test. The test
expects similar output that now passes. importScripts_data produces two failures
though, that are unrelated to expected error message but indicate real bugs.

Change-Id: I606b8791524d19a4bb20a81c30abc2285a1a0a0f
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoMove QV8QObjectWrapper::newQObject into QV4::QObjectWrapper
Simon Hausmann [Tue, 4 Jun 2013 14:35:00 +0000 (16:35 +0200)]
Move QV8QObjectWrapper::newQObject into QV4::QObjectWrapper

...where it is just called wrap(), because it doesn't always create a new
JS wrapper for the QObject.

Change-Id: Ieed0fc97174eb51cd04df0149e715c234a5822bd
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoFix crashes in workerscript tests (qqmlecmascript and qquickworkerscript)
Simon Hausmann [Tue, 4 Jun 2013 14:00:13 +0000 (16:00 +0200)]
Fix crashes in workerscript tests (qqmlecmascript and qquickworkerscript)

We need access to the QNam for a worker and other bits from the v8Engine,
so for that it's easiest right now to store the v8engine pointer directly.

There aren't many occurrences of v8engine left and we're gradually getting rid
of them, but this let's the tests not crash at least :). Once the transition
is complete, QV8Engine should collapse and v4->v8Engine->jsengine should become
v4->publicEngine again.

Change-Id: I98558dd687875f20f1dbe25381ee7efe502c7f24
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoCleanup: Get rid of v8engine pointer in QObjectWrapper
Simon Hausmann [Tue, 4 Jun 2013 13:42:38 +0000 (15:42 +0200)]
Cleanup: Get rid of v8engine pointer in QObjectWrapper

Change-Id: I3a077c6a8ed61ce6dc6a06cf4c4d181509ee8565
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoRemoved unused typedef
Simon Hausmann [Tue, 4 Jun 2013 12:56:56 +0000 (14:56 +0200)]
Removed unused typedef

Change-Id: I17a3fcbbad5169999125aad11ec90cfbd7d4a456
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoMove handling of multiply wrapped QObjects from QV8QObjectWrapper into QV4::Execution...
Simon Hausmann [Tue, 4 Jun 2013 12:28:13 +0000 (14:28 +0200)]
Move handling of multiply wrapped QObjects from QV8QObjectWrapper into QV4::ExecutionEngine

The bookkeeping is annoying to do, but it should be a rare case. The common case of a
QObject being wrapped only once is still lightweight as-is.

Change-Id: I12e9b67270ca2afbd77b4395246eef0dfc324f8f
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoMove internal QV8QObjectWrapper::newQObject helper to QV4::QObjectWrapper
Simon Hausmann [Tue, 4 Jun 2013 10:02:29 +0000 (12:02 +0200)]
Move internal QV8QObjectWrapper::newQObject helper to QV4::QObjectWrapper

Change-Id: Ieb1a36ce240b894d19c410b94eccfa79150054c7
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoCleanups in QObject bindings
Simon Hausmann [Tue, 4 Jun 2013 08:05:51 +0000 (10:05 +0200)]
Cleanups in QObject bindings

* Rename v8object to jsWrapper in QQmlData
* Rename v8objectid to jsEngineId, as that's the identifier of the engine
  that currently owns the primary JS wrapper

This is in preparation for moving newObject away from QV8QObjectWrapper

Change-Id: I6432365e849d159600e22f09e7e2ab2ae2117db6
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoSimplify the object iterator API
Lars Knoll [Tue, 4 Jun 2013 08:36:39 +0000 (10:36 +0200)]
Simplify the object iterator API

We were really missing methods to get both the key and the value
in one go.

Change-Id: I996bde79265f45312e68fcc6bdce76704385ea5b
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoFix VALUE/VALUEPTR macros in the interpreter.
Erik Verbruggen [Mon, 3 Jun 2013 11:32:51 +0000 (13:32 +0200)]
Fix VALUE/VALUEPTR macros in the interpreter.

Change-Id: I04f7625979974809bd62006520f67c5cb2d9c5fd
Reviewed-by: Fawzi Mohamed <fawzi.mohamed@digia.com>
11 years agoRemove unused QV4::Executionengine member
Simon Hausmann [Tue, 4 Jun 2013 07:52:39 +0000 (09:52 +0200)]
Remove unused QV4::Executionengine member

Change-Id: I38b1e860bc9f2333d0c4a1a53557753e0a07c1ca
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoConvert QQmlListModel to v4
Lars Knoll [Mon, 3 Jun 2013 20:12:36 +0000 (22:12 +0200)]
Convert QQmlListModel to v4

Remove all usages of v8 API in the list model.

Change-Id: I9dc8acecbbc77a97cf3c2a318e222bdb4b05c7c5
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoRemove unused variable
Lars Knoll [Mon, 3 Jun 2013 19:35:51 +0000 (21:35 +0200)]
Remove unused variable

Change-Id: I8dbd4307b0b5dad1d35e28d13703ceeeeaaa66c5
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoFold the qv4jsonwrapper into the json object
Lars Knoll [Mon, 3 Jun 2013 19:28:07 +0000 (21:28 +0200)]
Fold the qv4jsonwrapper into the json object

Removes the need for an extra file, and cleans up the QV8Engine
a bit more.

Change-Id: I25e4c9252357a098041ecb188960777094c6b959
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoAnother property query fix for the QObject bindings
Simon Hausmann [Mon, 3 Jun 2013 20:25:39 +0000 (22:25 +0200)]
Another property query fix for the QObject bindings

Include attached properties only for lookups coming through JS, not
when going through the context wrapper. (This doesn't feel quite
right, but preserves behavior right now)

Change-Id: I2fedfd3343614733c8d556f56e604118e19314dc
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoGet rid of inner MethodClosure object in QV8QObjectWrapper
Simon Hausmann [Mon, 3 Jun 2013 14:41:14 +0000 (16:41 +0200)]
Get rid of inner MethodClosure object in QV8QObjectWrapper

Instead let's have a convenient create function in QV4::QObjectMethod

Change-Id: I7369e614993eebcf9cbb5bc186979dcaa2b2593c
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoFix regression with meta object revision checking
Simon Hausmann [Mon, 3 Jun 2013 14:29:16 +0000 (16:29 +0200)]
Fix regression with meta object revision checking

Commit 00a07bcbd7a592072822b0e55ab2e75e90c3f9f5 replaced the CheckRevision
parameter on the call GetProperty on the scope QObject with a get that
would do IgnoreRevision.

This adds a property getter on the QV4::QObjectWrapper that allows for checking
the meta object revision. The plan is to move all of the property getter code
from QV8QObjectWrapper into QV4::QObjectWrapper incrementally.

Change-Id: I8e5a93ce3351a8c5dba13f14cd43e4036875b792
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoGet rid of QV8Engine::toQObject and QV8QObjectWrapper::toQObject
Simon Hausmann [Mon, 3 Jun 2013 13:51:45 +0000 (15:51 +0200)]
Get rid of QV8Engine::toQObject and QV8QObjectWrapper::toQObject

Change-Id: I8726148093079b3385c6b0f16284af0b5ba92066
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoGet rid of QV8Engine::isQObject and QV8QObjectWrapper::isQObject
Simon Hausmann [Mon, 3 Jun 2013 13:23:20 +0000 (15:23 +0200)]
Get rid of QV8Engine::isQObject and QV8QObjectWrapper::isQObject

The goal is to ultimately get rid of those wrapper instances

Change-Id: I77d806e09c163e4e41915dd6cee3082099f1a3b1
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoRemove some more v8 usage
Lars Knoll [Mon, 3 Jun 2013 13:59:00 +0000 (15:59 +0200)]
Remove some more v8 usage

Change-Id: I00c4a2403e12bc87743a073f245c38b007e9531d
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoRemove last v8 dependency in qqmlvmemetaobject
Lars Knoll [Mon, 3 Jun 2013 13:15:40 +0000 (15:15 +0200)]
Remove last v8 dependency in qqmlvmemetaobject

Change-Id: If3b45ea3048f6167a121011191aa5f42b2fe2e88
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoConvert the localstorage plugin to v4
Lars Knoll [Sun, 2 Jun 2013 20:58:56 +0000 (22:58 +0200)]
Convert the localstorage plugin to v4

Change-Id: I397c3a7e67a65696bb7cb35502e59b49f3928a05
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoGet rid of the QV4FUNCTION macro in qv8engine_p.h
Lars Knoll [Mon, 3 Jun 2013 12:56:12 +0000 (14:56 +0200)]
Get rid of the QV4FUNCTION macro in qv8engine_p.h

Change-Id: I4fdff5159c2443dab232d90a906cfb8203bf9c05
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoInitial port of connect/disconnect from V8 to V4
Simon Hausmann [Mon, 3 Jun 2013 12:41:17 +0000 (14:41 +0200)]
Initial port of connect/disconnect from V8 to V4

Change-Id: I289a49ab60cce33bf03724e93df9a9cac2b2aa1a
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoFix failing QJSValue test for QObject JS wrapper prototype
Simon Hausmann [Mon, 3 Jun 2013 10:52:53 +0000 (12:52 +0200)]
Fix failing QJSValue test for QObject JS wrapper prototype

We need to initialize the prototype correctly.

Change-Id: I466c132b5f6bd5761b5943aaea91ed811b82a8f7
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoFix tst_qqmlecmascript::signalHandlers auto-test
Simon Hausmann [Mon, 3 Jun 2013 11:27:38 +0000 (13:27 +0200)]
Fix tst_qqmlecmascript::signalHandlers auto-test

Provide a more elaborate error message when a type error is thrown as
the result of trying to call a property as function.

Change-Id: Ie4cd56e2f0d16b90060af1f596a48914a868244a
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoImplement QJSValue::toQObject and isQObject
Lars Knoll [Sun, 2 Jun 2013 21:25:52 +0000 (23:25 +0200)]
Implement QJSValue::toQObject and isQObject

Change-Id: I03c4dc285039503762c65936a7e66714754ea2e1
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoSet the Lexer into qml mode when parsing binding expressions
Lars Knoll [Sun, 2 Jun 2013 20:56:59 +0000 (22:56 +0200)]
Set the Lexer into qml mode when parsing binding expressions

Binding expressions allow multiline strings and digits starting
with 0. Simply setting the lexer into qmlmode when parsing them
will allow these expressions to pass.

Fixes 3 more test failures in qqmlecmascript

Change-Id: Ia14ec6d3facaf31883bb824c57096e59df3efea2
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoAllow return statement when parsing bindings
Lars Knoll [Sun, 2 Jun 2013 14:58:01 +0000 (16:58 +0200)]
Allow return statement when parsing bindings

An explicit return statement was allowed in bindings with v8 (as
they were rewritten as function closures. There's no reason to forbid them
now.

Fixes two tests in qqmlecmascript.

Change-Id: I27a6f88d17d8c35b37735ad321b7607f09b1e67c
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoImplement line number resolving of stack traces in the interpreter
Simon Hausmann [Sun, 2 Jun 2013 12:12:26 +0000 (14:12 +0200)]
Implement line number resolving of stack traces in the interpreter

Change-Id: I18fc141c4cf8a38036ec78e45fe380c2c1fa3055
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoFix uninitialized memory read in tst_qqmlecmascript::include auto-test
Simon Hausmann [Sat, 1 Jun 2013 19:47:43 +0000 (21:47 +0200)]
Fix uninitialized memory read in tst_qqmlecmascript::include auto-test

Make sure to initialize the callback variable, in the unlikely (but possible)
event of it not getting initialized otherwise.

Change-Id: Ic8bbf90b825157e55bb93dd9e600ff22ca11b911
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoFix missing object markings in QV4::Script
Simon Hausmann [Sat, 1 Jun 2013 13:08:17 +0000 (15:08 +0200)]
Fix missing object markings in QV4::Script

Store the qml activation object as Persistent value, as the script object is
often stored on the heap. Also make sure to mark it in QmlBindingWrapper. Fixes
various valgrind errors in tst_qqmlecmascript.

Change-Id: I7edf1e18db0e6a5ab9dcbfd57e258d72fe62cd77
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agovalgrind support: Destroy mempool when memoryManager is destroyed
Simon Hausmann [Sat, 1 Jun 2013 12:27:45 +0000 (14:27 +0200)]
valgrind support: Destroy mempool when memoryManager is destroyed

Fixes "impossible situation!" abort in valgrind when running tests that
create and destroy a lot of engines.

Change-Id: I58cfd2380b0149d25ebecdb270be428ec6b8a64f
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoFix uninitialized return value for QQmlJavaScriptExpression::evaluate
Simon Hausmann [Sat, 1 Jun 2013 12:25:32 +0000 (14:25 +0200)]
Fix uninitialized return value for QQmlJavaScriptExpression::evaluate

In case of an exception, we'd return an uninitialized value.

(visible when running tst_qqmlecmascript in valgrind)

Change-Id: I2c95a112b09ba527e61088904fa7daff003be05d
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoPort QObject bindings to use new cast
Simon Hausmann [Sat, 1 Jun 2013 12:07:44 +0000 (14:07 +0200)]
Port QObject bindings to use new cast

Change-Id: Ib0a8ba76df51276d53cf251b0ed979176e1fba01
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoConvert qqmlcomponent to use v4 API
Lars Knoll [Fri, 31 May 2013 20:59:42 +0000 (22:59 +0200)]
Convert qqmlcomponent to use v4 API

Change-Id: I070053d6d66e289d6d737f2a33e18b5c41a49843
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoFix crashes when running tst_qqmlecmascript with MM_AGGRESSIVE_GC
Simon Hausmann [Fri, 31 May 2013 07:41:54 +0000 (09:41 +0200)]
Fix crashes when running tst_qqmlecmascript with MM_AGGRESSIVE_GC

Make sure to initialize the property data (especially setter/getter) in
insertMember() right away to zero, to avoid marking uninitialized objects
in code like this when the GC happens in code like this:

Property *pd = o->insertMember(...)
f = someFunctionThatAllocates();
pd->setSetter(f);

Change-Id: I55e4846c0e5027bb95a1da13df30bcf9eca28645
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoMake debug annotations more robust against statement re-ordering
Simon Hausmann [Thu, 30 May 2013 08:55:41 +0000 (10:55 +0200)]
Make debug annotations more robust against statement re-ordering

As suggested by Erik, instead of storing debug annotations as separate
statements in the IR, annotate the Stmt itself instead.

Change-Id: I690ae602fba500a39909eb3ef71b50f39b98ec86
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoAllow construction of array with a predefined length
Lars Knoll [Fri, 31 May 2013 14:40:12 +0000 (16:40 +0200)]
Allow construction of array with a predefined length

The execution engine was missing this method for a long
time. This should simplify some code and allow more optimised
paths in other places.

Change-Id: Iaf576beb3bc006cdcfd65b518a2121a13629f462
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoRemove last v8 dependency in the testlib
Lars Knoll [Fri, 31 May 2013 14:32:19 +0000 (16:32 +0200)]
Remove last v8 dependency in the testlib

Change-Id: I68fa531a3db0becf0a449265562e8d20b9fa967f
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoClean up more stuff in qv8engine
Lars Knoll [Fri, 31 May 2013 14:06:42 +0000 (16:06 +0200)]
Clean up more stuff in qv8engine

Change-Id: Ia31d5abd4694b1c67115e75f0d0f134a65d4d775
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoRemove some unused code
Lars Knoll [Fri, 31 May 2013 13:54:43 +0000 (15:54 +0200)]
Remove some unused code

Change-Id: Ie865cdf564e2562db7febbdef6b7bfa75e44859c
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoConvert more subclasses of Managed to the new casting scheme
Lars Knoll [Fri, 31 May 2013 12:02:15 +0000 (14:02 +0200)]
Convert more subclasses of Managed to the new casting scheme

Change-Id: I4105f61d8b1d32b59281eb28fc31002a0ac4e4eb
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoMove Variant and QtObject over to new casting scheme
Lars Knoll [Fri, 31 May 2013 11:39:15 +0000 (13:39 +0200)]
Move Variant and QtObject over to new casting scheme

Change-Id: Ie9e5e40b4bea4d4379dc9bdd103852c32d6ae478
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoStart converting casting of Managed to subtypes to a better scheme
Lars Knoll [Fri, 31 May 2013 11:05:37 +0000 (13:05 +0200)]
Start converting casting of Managed to subtypes to a better scheme

There is now a template based as<Foo>() method available in
Managed, that'll allow casting to the proper subclass. It uses
the pointer to the vtable and compares it to the classes static
vtable for type checking. Like this we can avoid that Managed has
to know about all subclasses.

Change-Id: Ic966bbe00d85224b8d96cc0ff00f69a6ac67129e
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoFix a wrong sign in timezone parsing
Lars Knoll [Fri, 31 May 2013 08:58:24 +0000 (10:58 +0200)]
Fix a wrong sign in timezone parsing

This fixes a few test cases in qqmlecmascript

Change-Id: Id1cb2205bd47ff656c50a8e49fabc690b7623a91
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoQObject bindings: Cleanups
Simon Hausmann [Thu, 30 May 2013 19:53:27 +0000 (21:53 +0200)]
QObject bindings: Cleanups

Remove some uses of v8 API.

Change-Id: Ie888ff8a183de0dea82f358365c70650fb09d6c4
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoFix tst_qqmlecmascript::jsOwnedObjectsDeletedOnEngineDestroy
Simon Hausmann [Wed, 29 May 2013 12:58:52 +0000 (14:58 +0200)]
Fix tst_qqmlecmascript::jsOwnedObjectsDeletedOnEngineDestroy

When destructing the JS engine and deleting the JS wrappers, we may decide
to delete the QObjects of JS owned JS QObject wrappers. During this phase
(engine destruction) we need to delete the QObject instantly instead of
deferred (the default when _running_ the engine).

* Delete the memory manager first in the ExecutionEngine destructor, as
  some of the user code destructors we may end up calling still expect
  a somewhat functioning engine unfortunately.
* Fixed also some bugs in Persistent/WeakValue: When assing a value,
  detach properly if refcount > 0
* Fixed a bug when clearing a weak value during sweep, when we wouldn't
  pick up the correct next pointer for a weak value that didn't have the mark
  bit set

Change-Id: I960e58ecbb40b0ecf2bc07fe661a1ec706fcca61
Reviewed-by: Lars Knoll <lars.knoll@digia.com>