platform/upstream/qtdeclarative.git
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>
11 years agoGet rid of v8::UserObjectComparisonCallback
Lars Knoll [Thu, 30 May 2013 20:57:15 +0000 (22:57 +0200)]
Get rid of v8::UserObjectComparisonCallback

Add a isEqualTo Method to the Managed's vtable, that will be
used for comparing.

Change-Id: I4d253db93851c16a57aa1412fa7142913d1744e6
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoRemove the remaining v8 usage in qqmlbuiltinfunctions
Lars Knoll [Thu, 30 May 2013 20:24:22 +0000 (22:24 +0200)]
Remove the remaining v8 usage in qqmlbuiltinfunctions

Change-Id: Ia643b9d5011f374d6a36045beef5cb0fb1dbb17a
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoPort the list wrapper over to v4
Lars Knoll [Thu, 30 May 2013 20:09:46 +0000 (22:09 +0200)]
Port the list wrapper over to v4

Also fix two places where we did a wrong type check.

Change-Id: Ibc988b1b38803ca6acf6914487415026910f744e
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoSmaller cleanups
Lars Knoll [Thu, 30 May 2013 17:16:21 +0000 (19:16 +0200)]
Smaller cleanups

Change-Id: I7c3ec27b2910a98f667d13011192cbe57bb1d7c7
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoFix all autotests related to value types
Lars Knoll [Thu, 30 May 2013 16:56:47 +0000 (18:56 +0200)]
Fix all autotests related to value types

Fix 3 bugs in the new implementation, and adjust two expected error
messages in the auto test.

Change-Id: Ic3c08e54f9babc7e4779d67829e36f3ff805e127
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoPort the value type wrapper over to use V4
Lars Knoll [Thu, 30 May 2013 13:42:44 +0000 (15:42 +0200)]
Port the value type wrapper over to use V4

Change-Id: I0c566d0ab8cdd0ddbc688b7a1462c4b21084b30a
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoCleanup the context wrapper code
Lars Knoll [Thu, 30 May 2013 11:45:23 +0000 (13:45 +0200)]
Cleanup the context wrapper code

Remove the QV8ContextWrapper class and move the code out
of the v8 directory.

Change-Id: I00c02f7310a3e43bd105c5bc5af034ce652cfd49
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoPort the type wrapper over to v4
Lars Knoll [Thu, 30 May 2013 11:16:44 +0000 (13:16 +0200)]
Port the type wrapper over to v4

Change-Id: Id442281a366914be818b068f70ebe5200c527254
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoMove v8contextwrapper implementation over to v4.
Lars Knoll [Wed, 29 May 2013 13:54:50 +0000 (15:54 +0200)]
Move v8contextwrapper implementation over to v4.

Change-Id: I82a3f79c3d9e7727a35aa08a6ba48d9df9364b90
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoFix tst_qqmlecmascript::switchStatement()
Simon Hausmann [Wed, 29 May 2013 13:46:59 +0000 (15:46 +0200)]
Fix tst_qqmlecmascript::switchStatement()

Adjust the expected error message output to include the column number
instead of just the line number.

Change-Id: Ie8064d6a26f875d8da5b0d68c503d632b6afc69e
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoCleanup: Remove dead code in QObject ownership handling
Simon Hausmann [Wed, 29 May 2013 13:06:54 +0000 (15:06 +0200)]
Cleanup: Remove dead code in QObject ownership handling

The ownership management of QObject JS wrappers is implemented in the engine
now and doesn't require external GC callbacks anymore or extra book keeping
data structures.

Change-Id: If04a09deec6c0342274daa4ed82a34d3503e32e9
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoFix failing tst_qqmlecmascript::deleteRootObjectDuringCreation unit test
Simon Hausmann [Wed, 29 May 2013 10:18:31 +0000 (12:18 +0200)]
Fix failing tst_qqmlecmascript::deleteRootObjectDuringCreation unit test

Respect the rootObjectInCreation flag in QQmlData. Centralize the checking code
for that through the places in the engine where it is checked, along with the
indestructible flag.

Change-Id: Ie977b34ac8d070f6dcd7bab11a95dd27ca25145e
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoRemove now unused subcontext functionality
Lars Knoll [Wed, 29 May 2013 10:30:34 +0000 (12:30 +0200)]
Remove now unused subcontext functionality

Change-Id: I63b1803397dc79a671bd4cf35fb667ecacb10cab
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoFix Qt.include related autotests
Lars Knoll [Wed, 29 May 2013 07:59:40 +0000 (09:59 +0200)]
Fix Qt.include related autotests

Resolve relative file names correctly. This works, but is
not how it should look finally, as the whole context handling
for include() and imports will still change somewhat.

Change-Id: I64cdda222f13c3ca650a1dfe2f97e97adafe53a8
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoRemove some leftovers from the v8bindings
Lars Knoll [Tue, 28 May 2013 11:33:50 +0000 (13:33 +0200)]
Remove some leftovers from the v8bindings

The shared context concept was only used there, so remove
code that was referring to it.

Change-Id: I5ae56049a83818c898ef1cc4e68a5333a9374656
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoFix compilation on linux and clang
Lars Knoll [Tue, 28 May 2013 20:18:54 +0000 (22:18 +0200)]
Fix compilation on linux and clang

Change-Id: I49b71ca6f48b849db9c8bbc1fd8a0687a0a05bb1
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoFix toString and destroy on QObject JS bindings
Simon Hausmann [Mon, 27 May 2013 18:23:13 +0000 (20:23 +0200)]
Fix toString and destroy on QObject JS bindings

The auto-tests requires these member functions to not rely on the
thisObject at all.

Also fixed lookup of QObject properties through the context wrapper
to go through get() as the new interface (to catch destroy/toString).

Change-Id: Iacbe8b5ce1895195a84a1224faba3f3bd34cd03b
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoImplement stack trace support for Windows
Simon Hausmann [Tue, 28 May 2013 07:36:04 +0000 (09:36 +0200)]
Implement stack trace support for Windows

Using StackWalk64

Change-Id: I8a4e1fe8f9338da60bd4b93b26f2cdfac2cf3cbb
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoFix crashes in some worker threads auto tests
Simon Hausmann [Tue, 28 May 2013 07:46:12 +0000 (09:46 +0200)]
Fix crashes in some worker threads auto tests

Replace the crashing use of QV4::ExecutionEngine::publicEngine from within
worker threads (null pointer there) with direct pass-through of the QQmlEngine
pointer. It will be null within worker threads, but that the code can handle.

Change-Id: I8eff9d2cc6ca6f2afd9c0eef203975be9119b9b6
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoCleanup handlReferenceManagement auto test
Simon Hausmann [Tue, 28 May 2013 07:01:00 +0000 (09:01 +0200)]
Cleanup handlReferenceManagement auto test

Replace the vtable hacks with a simple property to maintain a GC visible
object reference.

Change-Id: Iae178d59dac23114353c152ef86224c9373a6025
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoFix uninitialized reads during GC
Simon Hausmann [Tue, 28 May 2013 06:54:59 +0000 (08:54 +0200)]
Fix uninitialized reads during GC

Make sure to initialize both setter and getter fields for accessors

Change-Id: Ic1187da9e97694e58d4dd7634988dabd55b0700b
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoFix crash in various qqmlbuiltinfunctions
Simon Hausmann [Mon, 27 May 2013 18:40:33 +0000 (20:40 +0200)]
Fix crash in various qqmlbuiltinfunctions

These functions use QV8Engine::callingContext(), which relies on QV4::ExecutionEngine::qmlContextObject()
to retrieve the correct QML context. That function relies on outer, which isn't set for the SimpleCallContext
objects we set up.

Added a quirk to start the outer traversal with the parent if the current context is a SimpleCallContext.

Change-Id: Iebc3a6b68c9966ad7278a05bf37a6fb55523bff4
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoFix file and line number reporting of QML/JS errors
Simon Hausmann [Mon, 27 May 2013 12:19:35 +0000 (14:19 +0200)]
Fix file and line number reporting of QML/JS errors

* Replace QUrl with QString in V4 for the source location (we don't need URL parsing)
* Replace line number and file in QV4::Exception with the information we retrieve from
  the stack trace of the exception.

Fixes about five tst_qqmlecmascript tests that relied on correct file/line number information

Change-Id: I2a3daa72be6c5587fd965211ea8f6fb77142e7ee
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoAdd support for line numbers in stack traces (Linux/Mac OS X only at this point)
Simon Hausmann [Sat, 25 May 2013 13:31:23 +0000 (15:31 +0200)]
Add support for line numbers in stack traces (Linux/Mac OS X only at this point)

* Add support for debug annotations on statement boundaries to the
  IR, to get accurate line/column information
* Use binary search to retrieve the function and line number for a given
  program counter
* Save the stack trace in the exception class and print it in v4
* Fix initial line number in QV4::Script to start a 1, just like the initial column
  in QQmlJS::Lexer also starts at 1

The native stack frame tracing is currently only implemented on Linux and Mac OS X.
The implementation for Windows using StackWalk64 is still missing.

Change-Id: I771fe44816397e29c69952772a772bf0d985236f
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoConvert builtin methods from v8 to v4
Lars Knoll [Sat, 25 May 2013 13:38:27 +0000 (15:38 +0200)]
Convert builtin methods from v8 to v4

Change-Id: I37006c60f0de131eefa53d8ee81844c2fb47f8b9
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoInitialize vmFunction.
Erik Verbruggen [Mon, 27 May 2013 12:10:50 +0000 (14:10 +0200)]
Initialize vmFunction.

Change-Id: I7047bd221f00a121af9e515257863e3d326b5e82
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoRemove template argument from MemberAccessorGetterSetter class
Lars Knoll [Sat, 25 May 2013 12:32:31 +0000 (14:32 +0200)]
Remove template argument from MemberAccessorGetterSetter class

Like this we don't need to have the call method inline. This is bad, as the
method uses try/catch, and leads to compile errors with clang if the header is
included from libs compiled without exceptions enabled.

Change-Id: I801e21aafafc255836dfa19b81c84f884de0b395
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoSmall cleanup
Lars Knoll [Fri, 24 May 2013 17:56:58 +0000 (19:56 +0200)]
Small cleanup

We don't do rewriting for bindings anymore.
Remove a method overload that's not really needed
anymore.

Change-Id: I9d57d30dce4848cb06c88c3f042ccf30e6d41aab
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoRemove some unused code
Lars Knoll [Fri, 24 May 2013 16:14:58 +0000 (18:14 +0200)]
Remove some unused code

Change-Id: I2d3d4cbc69d2a6e5d8b33a5ac23f24bcf19418ec
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoImplement JS ownership policy for var and variant properties
Simon Hausmann [Fri, 24 May 2013 15:12:57 +0000 (17:12 +0200)]
Implement JS ownership policy for var and variant properties

Instead of a GC callback, let's keep the lifecycle of the var properties and
the QObject wrapped variants in sync with the lifecycle of the JS QObject
wrapper, through a markObjects re-implementation.

handleReferenceManagement test passes now, fixed a few incorrect gc() calls
in there.

Change-Id: I78e8ca700e41bba788b61d3816a77cfb3a7c5e58
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoPort method closures over to V4
Simon Hausmann [Fri, 24 May 2013 15:02:48 +0000 (17:02 +0200)]
Port method closures over to V4

Replace the JS/V8 based closure wrappers for invokable Qt methods with
a simple QV4::FunctionObject subclass.

Change-Id: Ibd16cf8a871ce2bf0692c7c0032527109065aa8a
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoCleanup: Get rid of special toString and destroy handling in QObject bindings
Simon Hausmann [Fri, 24 May 2013 12:33:19 +0000 (14:33 +0200)]
Cleanup: Get rid of special toString and destroy handling in QObject bindings

These are meant to go through the regular V4 binding layer

Change-Id: I23743e183b0c85cad2e047eb99dca1a9382597fb
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoPort Qt.include() over to v4
Lars Knoll [Fri, 24 May 2013 13:25:20 +0000 (15:25 +0200)]
Port Qt.include() over to v4

Still doesn't quite work as it should, but that's no regression to
before neither. The reason is that the context handling is still v8
based and needs to be rewritten.

Change-Id: I51216f93d6db4ba26f8adddaeb39d8a8c62df7ee
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoFixup list model serialization
Lars Knoll [Fri, 24 May 2013 12:50:03 +0000 (14:50 +0200)]
Fixup list model serialization

We need to properly refcount the agent, so it doesn't get
deleted when it's still in use.

Change-Id: Id9a0764e15c10e7b15a216523d6b22764ac863dc
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoFixed struct/class friend decl.
Erik Verbruggen [Fri, 24 May 2013 12:28:13 +0000 (14:28 +0200)]
Fixed struct/class friend decl.

Change-Id: I779126401b36a1a20dc93d0f88317f9632849276
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoAdd symbolification for MacOS.
Erik Verbruggen [Fri, 24 May 2013 11:19:49 +0000 (13:19 +0200)]
Add symbolification for MacOS.

Change-Id: I95fc25afef56dad7c51f417959728397e63a8dc1
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoGet rid of Get/SetHiddenValue in the v8 API
Lars Knoll [Fri, 24 May 2013 11:26:38 +0000 (13:26 +0200)]
Get rid of Get/SetHiddenValue in the v8 API

It was only used to mark an object as something to be used as a binding.
Simply use one of the free bits in QV4::Managed for that.

Also changed a bit more code over from v8 to v4.

Change-Id: I6e787e611041e058fe109df1d7a13598655f8eba
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoImplement QObject ownership policy for QObject JavaScript wrappers
Simon Hausmann [Fri, 24 May 2013 11:19:15 +0000 (13:19 +0200)]
Implement QObject ownership policy for QObject JavaScript wrappers

A parent with C++ ownership keeps its children alive. We know that all
QObject wrappers are kept in a QWeakValue inside the QObject's QQmlData.
As the weak values are registered to the MM, we can traverse there and
mark the children if necessary in one extra pass.

The handleReferenceManagement auto-test that covers this was actually
testing the addGCRelationship implementation as well as the overal behavior.
Some of the tests verify that a handle based overload of addGCRelationship
works, so since those tests don't make sense anymore, I've removed them.

Also fixed some cases where the test ran gc(engine) when it should've called
gc() on the specific local QQmlEngine instance used in the test. This worked
in V8 because the GC was "global".

Change-Id: Ib394b46e034b016196804a9e73682507fa791445
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoGet rid of some v8 based code
Lars Knoll [Fri, 24 May 2013 10:45:13 +0000 (12:45 +0200)]
Get rid of some v8 based code

Change-Id: Iee910dcc1d3148922d2f92055eb06cdb0b889502
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoRemove the remaining dependencies onto the binding rewriter
Lars Knoll [Fri, 24 May 2013 10:10:46 +0000 (12:10 +0200)]
Remove the remaining dependencies onto the binding rewriter

Remove the remaining places that were rewriting bindings. Remove the
binding rewriter class.

Change-Id: Ib1e9121dc10f4526ddb7cf0ae32fecd8ce2d4993
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoRemove QV8Bindings class
Lars Knoll [Fri, 24 May 2013 09:21:10 +0000 (11:21 +0200)]
Remove QV8Bindings class

This class tries to optimise binding compilation with v8. With the
approach in v4 where we don't rewrite binding expressions anymore,
this is not required anymore.

Change-Id: I616aeeba85bc17a950d4c7341b3042ed8aa42bff
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoAdd support for direct binding evaluation in QV4Script
Lars Knoll [Thu, 23 May 2013 20:56:38 +0000 (22:56 +0200)]
Add support for direct binding evaluation in QV4Script

This way there is no need to rewrite the binding expressions
anymore, instead we can directly compile them into a
binding function.

Change-Id: I91a0c540d066976e363590fe9ccde6a81ee92b1d
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoFix QObject ownership
Simon Hausmann [Thu, 23 May 2013 20:13:42 +0000 (22:13 +0200)]
Fix QObject ownership

Implement the JS vs. C++ ownership policy. QV4::WeakValue is a weak
reference that's now used instead of PersistentValue in QQmlData.
Whether or not to delete the QObject when the JS object is garbage
collected is decided in the ~QObjectWrapper destructor (conveniently).

Fixes four ownership tests.

Change-Id: Iedeb498f510295b5e656d0bb3b324084efa98f0f
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoFix some leftovers from the last v4 removal patch
Lars Knoll [Thu, 23 May 2013 20:47:55 +0000 (22:47 +0200)]
Fix some leftovers from the last v4 removal patch

A few things overlooked. Also adjust the numbering in one enum
to fix a crash.

Change-Id: Iedf641452f6f14ffc36d548d970079f0d6024bb6
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoReplace QV8QObjectResource with QV4::QObjectWrapper
Simon Hausmann [Wed, 22 May 2013 14:51:34 +0000 (16:51 +0200)]
Replace QV8QObjectResource with QV4::QObjectWrapper

Use a proper sub-class instead of external object resources, as a first
step towards porting the QObject bindings away from V8.

This also replaces the function template / constructor approach and the
faster getter optimization with a plain virtual get in the V4::Object.

Property lookup in QObject bindings will be subject to future optimizations
that will work very differently once we enable the faster V4 lookup mechanism
in QML.

Change-Id: Ib7c2eead5323c22290c2924de786d9cfcf308c03
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoRemove all references to the old v4 code
Lars Knoll [Thu, 23 May 2013 13:23:06 +0000 (15:23 +0200)]
Remove all references to the old v4 code

The old v4 files have already been removed, so cleanup
all the #ifdef'ed code that still references them.

Change-Id: Ifc5c59add5af36a61586a43b13291d7836cccd78
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoAdd some null pointer checks to v4::Script
Lars Knoll [Thu, 23 May 2013 12:03:03 +0000 (14:03 +0200)]
Add some null pointer checks to v4::Script

This makes all eval() related tests pass again.

Change-Id: I067f2e0acf17932ec9b212723fc8df1ffc4c4884
Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com>
11 years agoFix failing assertion in tst_qqmlecmascript::singletonType
Simon Hausmann [Thu, 23 May 2013 10:50:39 +0000 (12:50 +0200)]
Fix failing assertion in tst_qqmlecmascript::singletonType

Don't try to call the singleton callback with the current scope but instead
execute it well-defined within the scope of the global context.

Change-Id: I6b59fad7d466a6070d1c748f909e1d8c0a1045ea
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoFix crash in tst_qqmlecmascript::qtbug_22843()
Simon Hausmann [Wed, 22 May 2013 21:10:01 +0000 (23:10 +0200)]
Fix crash in tst_qqmlecmascript::qtbug_22843()

Parse errors throw exceptions, which we must catch here. The caller will
check !m_program and return accordingly. This restores the previous
behavior also found in stable/dev.

Change-Id: Iecff94858ba12f13e581ec1664a092b3e9cd963d
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoFix failing assertion in QObject bindings when catching exception
Simon Hausmann [Wed, 22 May 2013 20:48:38 +0000 (22:48 +0200)]
Fix failing assertion in QObject bindings when catching exception

Add missing accept() to ensure the context is unwound correctly.

Change-Id: I42f9d17c8df25beb151675377d4395f1e2b35eef
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoFix another failing assertion when running qqmlecmascript tests
Simon Hausmann [Wed, 22 May 2013 20:45:45 +0000 (22:45 +0200)]
Fix another failing assertion when running qqmlecmascript tests

Value::IsUInt32() and friends are not implemented. Port this built-in
stringArg() function over to QV4::Value.

Change-Id: I48674892c238473f1d70b2184249b0db377ae399
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoCompile fixes for clang.
Erik Verbruggen [Wed, 22 May 2013 14:19:52 +0000 (16:19 +0200)]
Compile fixes for clang.

Change-Id: I691347f7cbd1023ce3c9c2e116d3ca5029f4a8e1
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoFix crash in Engine::currentStackFrame()
Simon Hausmann [Wed, 22 May 2013 17:37:34 +0000 (19:37 +0200)]
Fix crash in Engine::currentStackFrame()

Don't accidentally shadow c with c :)

Change-Id: I4c5022428e8dfb0cda432283decaac8edae512f1
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
11 years agoVarious fixes
Lars Knoll [Wed, 22 May 2013 14:53:35 +0000 (16:53 +0200)]
Various fixes

Fix a regression in Script::run, and compilation for
v4 and an auto test.

Change-Id: I4026eebec0e02f4af03ca49ba714916ad90b34e7
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoRemove QV8Engine::scriptValueFromInternal
Lars Knoll [Wed, 22 May 2013 14:35:28 +0000 (16:35 +0200)]
Remove QV8Engine::scriptValueFromInternal

Change-Id: I43d672d17c0bbb498be71d7a25f8ca1389aeadf7
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
11 years agoMove evaluateScript into QV4::Script
Lars Knoll [Wed, 22 May 2013 14:26:45 +0000 (16:26 +0200)]
Move evaluateScript into QV4::Script

also remove an unused method in QV8Engine

Change-Id: I1e655e714755426ac0c48ee9cc08059104ddb3b3
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>