Simon Hausmann [Mon, 24 Jun 2013 07:31:43 +0000 (09:31 +0200)]
Fix crash on ARMv7 when leaving functions
Don't clobber r6 (ScratchRegister) when adjusting the stack pointer for the
locals, as it is a callee-save register.
Change-Id: Ib14fca0cb0807e7b07d0210d102ae9cc57828741
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Fri, 21 Jun 2013 12:56:21 +0000 (14:56 +0200)]
Fix build on Android (part 2)
Don't include linux kernel headers from user space just for one constant :)
Change-Id: Ia760b3f0cccbdad49f3f2ce31598a109b63ac788
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Fri, 21 Jun 2013 12:12:02 +0000 (14:12 +0200)]
Fix build with traditional (non-thumb2) ARM
Pull in the BSD licensed SegmentedVector (that is based on Vector)
and use malloc/free instead of fastMalloc/fastFree in the constant pool.
Change-Id: I25aeb34a6f778f2c886a331851d8fc1dd0fc1d61
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Fri, 21 Jun 2013 12:05:56 +0000 (14:05 +0200)]
Fix build on Android
Don't include execinfo.h and use open_memstream on Android
Change-Id: I5b45dd4fc7f3b435b35e1951d6e722d4b52a6ea4
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Fri, 21 Jun 2013 06:58:02 +0000 (08:58 +0200)]
Prospective fix for JIT crashes on ARM
Don't do the ret(n) cleanup dance on ARM, as the address of where to
store the return value is provided in r0 and therefore there's nothing
to clean up.
Change-Id: I5b34355e52c9d374d31981361bdfb67193530d38
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Mon, 24 Jun 2013 07:57:15 +0000 (09:57 +0200)]
Mark automatic-semicolon insertion bugs as XFAIL
(but marked as needs-fix in trello)
Change-Id: I7cfebc9494dd0d5cb027b36f8c8cbcd02a520302
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Sun, 23 Jun 2013 18:11:21 +0000 (20:11 +0200)]
Fix tst_qjsengine::jsIncDecNonObjectProperty
With pre increment/decrement expressions, don't rely on the
target expr to be readable after the write to it. In case of
++someString.length for example the value of the property may not
change, but the result of the expression still has to be the
incremented value.
Change-Id: I2389eeee38dbed75aa2764638cb40950e32b8a68
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Sun, 23 Jun 2013 13:45:46 +0000 (15:45 +0200)]
Fix failing tst_qqmlecmascript::qtbug_22843:"with .pragma library"
Try to to load a .pragma library type of script only once, even if
it has a syntax error.
Change-Id: I32d7fb71647f413dc75e339e7bff8d74f7754c87
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Sun, 23 Jun 2013 13:08:13 +0000 (15:08 +0200)]
Fix tst_qqmlecmascripts::importScripts with private imports
* In QQmlContextWrapper::get we must check the calling context before
allowing the get, just like in the Getter() in qv8contextwrapper.cpp
* When trying to call a method on undefined/null, throw a readable error message,
as expected by the test.
Change-Id: Ie39e8ae82a108deef264e4044e12e7b15959caf9
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Sun, 23 Jun 2013 12:31:12 +0000 (14:31 +0200)]
Fix expected error messages in singleonType test
Writing to a property of a frozen object doesn't throw a type error
exception in non-strict mode.
Change-Id: I408078a2a09d16868b95f275f13f2f7a176f66e9
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Sun, 23 Jun 2013 11:35:17 +0000 (13:35 +0200)]
Fix a memory management issues with the name map in internal classes
The string pointer we store in the nameMap is not marked directly, i.e. our
class hierarchy doesn't have a recursive mark() function. So we must otherwise
make sure that that string is marked, otherwise we get dangling pointers that
are likely to point to _other_ strings later. This is hard to reproduce, but it
does happen with MM_AGGRESSIVE_GC=1 and the singletonType test in
qqmlecmascript, when due to the dangling pointer we end up using the wrong
property name in freeze() when iterating through the name map.
This patch fixes that by storing the actual identifier string, that's
guaranteed to get marked.
Change-Id: I28d1a2d2f56fe3abf692229ba008af8b0789189e
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Lars Knoll [Sat, 22 Jun 2013 13:03:27 +0000 (15:03 +0200)]
Fixes to __qmljs_strict_equal
The implementation was broken if we had mixed int/double
values. In addition, this code should be slightly faster.
Change-Id: I5cf0c493902e33ed242c3ca7034fc369e840167f
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Sat, 22 Jun 2013 12:55:05 +0000 (14:55 +0200)]
Small cleanup
Change-Id: If46ef96f0ab64240b4811645f768844ad43ef48d
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Sat, 22 Jun 2013 08:02:06 +0000 (10:02 +0200)]
Remove the context argument from Managed::call
Change-Id: I0895f9a94af47c8aab1dc93579921737e9516f7d
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Sat, 22 Jun 2013 07:29:23 +0000 (09:29 +0200)]
Remove the context argument from Managed::construct
Change-Id: I39f5c23de787da70cd4259b3cdcd56391ee0dc7b
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Fri, 21 Jun 2013 22:52:47 +0000 (00:52 +0200)]
Remove context argument from Object::get/putValue
Change-Id: I981b95e30b7761574ddd7891b5dfc24a0136af7f
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Fri, 21 Jun 2013 22:16:40 +0000 (00:16 +0200)]
Remove context argument from String::makeIdentifier()
Change-Id: I7c02301499cb1a6895e94beb40ec35c2094bb999
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Fri, 21 Jun 2013 22:09:24 +0000 (00:09 +0200)]
Remove context parameter from Manged::put.
Change-Id: Ib99e726ffbb20463d45a8444b4fbdfe32cd6dbef
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Fri, 21 Jun 2013 21:42:08 +0000 (23:42 +0200)]
Remove the context argument from Managed::putIndexed
Change-Id: If311140333a1c45be6c6d5464d43898e09eb4322
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Fri, 21 Jun 2013 21:26:11 +0000 (23:26 +0200)]
Remove context parameter from Managed::get()
Change-Id: I61837e4b17d7475dcda2f31b8a293c0020930d52
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Fri, 21 Jun 2013 20:55:13 +0000 (22:55 +0200)]
Remove context parameter from Managed::getIndexed
Change-Id: Ibc6271dbe789ef5ed063d8650ee36978f7c18021
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Fri, 21 Jun 2013 20:04:54 +0000 (22:04 +0200)]
Remove the execution context from most lookup calls.
Change-Id: I6f2bdfa233ebda1596a5a1d2b9d418cd45033d23
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Fri, 21 Jun 2013 19:48:06 +0000 (21:48 +0200)]
Remove the ExecutionContext parameter from Managed::get/setLookup
Change-Id: I9d3763b97438db83fef899917cbaee2f7cd59f96
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Fri, 21 Jun 2013 18:53:13 +0000 (20:53 +0200)]
Remove the context argument from Managed::hasInstance()
Change-Id: I33937a469c7ad1c6c9913068e7dc898a39d8bf49
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Fri, 21 Jun 2013 18:33:39 +0000 (20:33 +0200)]
Remove the context argument from Managed::delete(Indexed)Property
It's not required, as we can always get the current context from
the Managed object for the cases we need it.
Change-Id: I29fb9861a73ece1b3d5aa45f3bc350d8a5f76fa9
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Simon Hausmann [Fri, 21 Jun 2013 19:28:11 +0000 (21:28 +0200)]
Fix GC errors in small objects during construction
When creating small objects with for example only one accessor property,
then that is stored in the inline member allocation, which needs to
be initialized as well to prevent GCs during construction to access
uninitialized members.
Change-Id: Ie20d27a650e09475845f8ee6aa79b8e62a4bb795
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Fri, 21 Jun 2013 19:27:33 +0000 (21:27 +0200)]
Fix GC errors with Error object
Don't forget to properly mark the stack value we're keeping
Change-Id: Ifb002a5e8519e40cd1a4c7f7845171452a585562
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Fri, 21 Jun 2013 14:51:51 +0000 (16:51 +0200)]
Mark qqmlecmascript::hasOwnProperty as xfail
hasOwnProperty is not currently properly supported on dynamic objects that
re-implement get.
Change-Id: Ib6cfe13bbdbe4457adf05cd20e42d3a5e85ac318
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Fri, 21 Jun 2013 14:15:09 +0000 (16:15 +0200)]
Fix qqmlmoduleplugin
Adjust the expected error message after commit
227f7ed60cfb34f7c3d91b27b07ddc5bbd1a2922
Change-Id: I328072dfb0151d6cd9b8452d8d3f9a306a132203
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Fri, 21 Jun 2013 14:10:43 +0000 (16:10 +0200)]
Fix tst_qqmlcomponent::onDestructionLookup
Don't rely on the JIT generated code to immediately discard and ignore
the return value of createObject(). Instead move that call into another
function that, so that the return value of createObject() is guaranteed
to be invisible to the GC and thus collect the recently created object
as expected.
Change-Id: I08a0a35fc895482792deffbae7f7f6437727d871
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Fri, 21 Jun 2013 14:05:53 +0000 (16:05 +0200)]
Fix enumerating QObject properties
Make sure to enumerate the properties as well as the invokable methods.
Fixes various tests in qmltest
Change-Id: If40dbc8f2203f99d75523e40f78849224e301481
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Fri, 21 Jun 2013 13:36:25 +0000 (15:36 +0200)]
Mark a sub-test in qqmlecmascript::scope() as xfail
This test relies on the global object vs. context ordering and consequently
fails right now
Change-Id: I6b6cec38bf2d2074c2fcfacf9b499bc7a97cca44
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Fri, 21 Jun 2013 13:19:20 +0000 (15:19 +0200)]
Fix tst_qjsvalue::engineDeleted()
Move the engine pointer from QJSValuePrivate to PersistentValuePrivate
and set it back to null in the memory manager destructor.
Change-Id: I904b365221e1559701353cb359eac768928ad918
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Lars Knoll [Fri, 21 Jun 2013 12:36:54 +0000 (14:36 +0200)]
Fix expected error message
Change-Id: I41ebd1506b0d1675cac1205d5fd8f60fd751a4aa
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Fri, 21 Jun 2013 12:14:37 +0000 (14:14 +0200)]
Fix conversion of variantlists to ArrayObjects
Fixes a crash in the qquickmultipointtoucharea test
Change-Id: Ic1ca5220e5e7a569e3cc499ba120296fb885d6c0
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Fri, 21 Jun 2013 12:07:31 +0000 (14:07 +0200)]
Fix expected test output for one list model test
There's no reason to disallow calling model.set() with
an ArrayObject as argument.
Change-Id: I44baad677ca34e1fb4188b89f0a548af84580b4f
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Simon Hausmann [Fri, 21 Jun 2013 12:01:21 +0000 (14:01 +0200)]
Remove XFAILs that was due to strict mode
In non-strict mode we can use with() and eval() again, and so these tests pass.
Change-Id: I66b16653a28b1d7e420e53c012d7908c8fc6c29a
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Fri, 21 Jun 2013 11:56:52 +0000 (13:56 +0200)]
Mark test as xfail that assumes writability of the global object
As discussed, this needs to be fixed post merge
Change-Id: Iebdc06da4977158b5d6190b3f093f8962459e109
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Lars Knoll [Fri, 21 Jun 2013 11:11:37 +0000 (13:11 +0200)]
Disable the v8profiler, not the qml profiler
Change-Id: I6113ef5cefa5be8d53e45857ab76c23deb6fe805
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Fri, 21 Jun 2013 10:58:49 +0000 (12:58 +0200)]
Skip some tests that are failing because of our date time parser
The parser needs to be fixed to better parse localized dates, times
and timezone fields
Change-Id: I6542ee459e7135b6f845fb5fc89685cb8c2d67c5
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Fri, 21 Jun 2013 10:38:01 +0000 (12:38 +0200)]
Disable some debugger tests until we have a reimplementation for v4
Change-Id: I273fba969c72299e84c091afd7d4a43f9dbd1bf8
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Fri, 21 Jun 2013 10:28:34 +0000 (12:28 +0200)]
Revert to non strict mode for qml expressions etc.
Forcing them to strict lead to too many incompatibilites
to 5.1, so let's rather leave them non strict
Change-Id: I7c3bafc9a840daa565add7abbad0d0042cdae332
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Fri, 21 Jun 2013 08:39:03 +0000 (10:39 +0200)]
Fix scope chain for eval in strict mode
Change-Id: Ie00046f98a126cd46cd79758a78be1d0e1d17c61
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Simon Hausmann [Thu, 20 Jun 2013 09:32:45 +0000 (11:32 +0200)]
Fix qqmlvaluetypewrapper auto-tests
QQmlValueTypeWrapper stores its prototype in a global variable
(PersistentValue), which doesn't work when using multiple engines. Instead
this patch introduces the QML extensions structure to hold things like
prototypes for type extensions to JS that are specific to QML.
Change-Id: I41a71029edb6ce895eb80db7aa0809aab86b31db
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Thu, 20 Jun 2013 06:01:58 +0000 (08:01 +0200)]
Fix instanceStateValues xhr test
Writing to a read-only property or trying to deleting will throw an exception
in strict mode and thus abort the execution. Make the test work in strict and
non-strict mode by surrounding the offending statements with individual
try/catch pairs.
Change-Id: I25f803b6ffd7ef721ac874f53a37b3208b5c05ab
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Erik Verbruggen [Tue, 11 Jun 2013 10:18:44 +0000 (12:18 +0200)]
Prevent generating jumps to blocks following the current block.
Copied the JIT logic for it.
Change-Id: I4a11f4c8ede1d093f367b714d92b393c810b4fb5
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Erik Verbruggen [Mon, 10 Jun 2013 15:59:41 +0000 (17:59 +0200)]
Remove the index magic from the temp.
Change-Id: If746ebdd6f29d7140781869af6d589cc4c5b8c9e
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Simon Hausmann [Tue, 18 Jun 2013 12:15:19 +0000 (14:15 +0200)]
Fix tst_qqmlecmascript::functionAssignmentfromJS_invalid
Remove the column number from the expected output, as we generate those
QQmlBinding objects from within a v4 callback and produce the line number
and column number from the stack trace of the engine, which currently
doesn't produce column numbers.
Change-Id: I9840f0ab571d4261570dd079436aaa9f81e27abf
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Tue, 18 Jun 2013 13:07:24 +0000 (15:07 +0200)]
Fix tst_qqmlecmascript::functionAssignment_afterBinding
When calling Qt.binding(f), don't modify f and set the bindingKeyFlag
there, but instead we must return a _new_ function that acts as proxy
and has the bindingKeyFlag set to true, similar to how the V8 based
implementation created a clone.
Change-Id: I4998359869c02e32c89e929793bf74a4adafcb72
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Tue, 18 Jun 2013 12:01:52 +0000 (14:01 +0200)]
Fix tst_qqmlecmascript::functionAssignment_fromJS
Make the test-case compile with strict mode, where function declarations
are not allowed within blocks. An alternative would be to use function
expressions here.
Change-Id: If7e1cc23ef4a0c6a83e4ba8ae03dc9c6b678730d
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Tue, 18 Jun 2013 11:47:33 +0000 (13:47 +0200)]
Fix tst_qqmlecmascript::functionAssignment_fromBinding
Function declarations in QML mode should be similar to function expressions and
therefore need to go to the return value of the function..
Change-Id: Ib1dd8a970a967f2456d0558be74edf5d74d288e5
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Lars Knoll [Tue, 18 Jun 2013 11:17:01 +0000 (13:17 +0200)]
Fix two more errors in the worker script auto test
Change-Id: Ib1359a985efae18cd4fc8344b81092af57f1a9d4
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Tue, 18 Jun 2013 10:48:08 +0000 (12:48 +0200)]
Fix parts of workerscript
The worker script creates a special QmlContextWrapper
that doesn't contain many things found in the main thread.
However we still need to be able to cast to it, so it
should be the same class as the regular context wrapper.
Fixes parts of the worker script auto tests.
Change-Id: I3697b2b0080dc4ac967eb447e2efd0f28fbab465
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Simon Hausmann [Tue, 18 Jun 2013 10:59:51 +0000 (12:59 +0200)]
Fix inifite loop when running ecmascript tests
Revert the initialization part of
42825af048ab2724e0d434178dcef1b23b4850ff in
the IR, apparently it is needed.
Change-Id: Ia415133ee2fb6cd060fa5a0e5da7b711ac98ddd1
Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com>
Lars Knoll [Mon, 17 Jun 2013 20:44:49 +0000 (22:44 +0200)]
Fix the first half of qqmllocale auto tests
Change-Id: I0f37208eaefcb668d3b61d294129134cfaa7c8f4
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Simon Hausmann [Mon, 17 Jun 2013 12:27:55 +0000 (14:27 +0200)]
Fix url test in qqmllanguage
In V4 URLs were mapped to strings, with V8 they were mapped to opaque
variants, which is also what we do with v4 at the moment. In the future
we want to provide a real JS API for URLs, but that is a feature that
should be discussed in a wider scope and developed on the dev branch.
Change-Id: I17660066b2797239eddebad03f49ffa424f86f78
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Mon, 17 Jun 2013 11:36:21 +0000 (13:36 +0200)]
Make it possible to evaluate JS with the v4 tool the QML way
Change-Id: I2a40e82612c2da1b52a37cbff2507951e4ac0349
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Lars Knoll [Mon, 17 Jun 2013 12:27:06 +0000 (14:27 +0200)]
Fix the console autotests
Change-Id: I8936c6baa274e673c23c65637fa199a6140e0a15
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Mon, 17 Jun 2013 11:52:38 +0000 (13:52 +0200)]
Fix qmlmin test
Exclude the test262 test suite, as qmlmin can't deal with
all of the test cases there.
Change-Id: Ie56c0d9adecc6b1ae0ddcbcd3edd5b0eaf30cd4d
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Mon, 17 Jun 2013 11:47:24 +0000 (13:47 +0200)]
Fix the remaining test failures in the jsonbinding autotest
Skip properties that are function objects when converting a V4 Object to a
QJsonObject. For arrays the function object gets replaced with null.
Fix the test case for arrays to have the correct expected output.
Change-Id: I3ee63935d038e0922e33ac6e64e9c31ecfbd4a7e
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Mon, 17 Jun 2013 11:35:07 +0000 (13:35 +0200)]
Fix memory corruption in qjsvalueprivate
When converting to a memory managed string, we need to add
the PersistentValuePrivate to the chain of persistent objects.
Otherwise the string stored in the JSValue can get garbage
collected.
Change-Id: I159fd77a7ae6f29e4121969cac962bd12b0f9bc7
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Mon, 17 Jun 2013 07:55:40 +0000 (09:55 +0200)]
Fix and enable the qmldirparser autotest
Change-Id: I2e9b64e5df63dbd9fffc204b7058d3c77255b09c
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Mon, 17 Jun 2013 07:18:19 +0000 (09:18 +0200)]
Fix most qjsonbinding auto tests
Change-Id: I67476bc7e931e2f4790e859d4a3c00c050752271
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Simon Hausmann [Mon, 17 Jun 2013 05:31:41 +0000 (07:31 +0200)]
Mark the eval() test as xfail
eval() works differently in strict mode, and it's nicely covered by
test262
Change-Id: I9bb84753032d5106c94d78afe765680f3d85348d
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Sun, 16 Jun 2013 20:42:47 +0000 (22:42 +0200)]
Revert "Local initialisation is now done in codegen."
This reverts commit
2bd6e240a3c2b3dc7a2c81c639d4f30e4dfd685f.
This doesn't work properly as the code generator will not keep those
initializations at the beginning of the function, resulting in
uninitialized values in ctx->locals[], which gives valgrind warnings
when they're marked.
Change-Id: I81501e0ea80e7f76b7d9112fea261e406084b69b
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Sun, 16 Jun 2013 20:42:34 +0000 (22:42 +0200)]
Revert "Local initialization is now done in codegen"
This reverts commit
01526deb814cf53a9dc80014960da2f4e8def3e2.
This doesn't work properly as the code generator will not keep those
initializations at the beginning of the function, resulting in
uninitialized values in ctx->locals[], which gives valgrind warnings
when they're marked.
Change-Id: I8f671c85b6744c80b6fe11b628bf6b6de125a6bd
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Sat, 15 Jun 2013 20:43:58 +0000 (22:43 +0200)]
Adjust expected error message for qqmlecmascript::qtbug_22843
Change-Id: Ib6f58c2d7ee5e4f03fcc755d2290bdf204e3aa61
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Fri, 14 Jun 2013 20:12:04 +0000 (22:12 +0200)]
Re-enable two disabled var property tests and make them pass
When marking the var properties of a VME-metaobject (we decided to keep its
QObject alive), then we must also mark the var properties of the parent
VME-metaobject. The two property var inheritance tests verify that.
Change-Id: If1f0d4f3daef78d42adb7052cc1ce7bbdd6da585
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Fri, 14 Jun 2013 06:07:01 +0000 (08:07 +0200)]
Fix qqmlproperty::warnOnInvalidBinding
* Add column to expected warning message
* Get rid of eval that doesn't make sense with only one JS engine
and doesn't work in strict mode
Change-Id: I63cd3784cd8c255af8832ea5ca1e6e5e2d48431e
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Fri, 14 Jun 2013 14:08:48 +0000 (16:08 +0200)]
Fix QVariantObject destruction
Make sure to call the VariantObject destructor from its destroy method,
in order to ensure that the ExecutionEngine::ScarceResourceData destructor
we inherit from is also called, which ensures that the refcount in the
QVariant it holds also drops correctly.
Fixes tst_qqmlecmascript::propertyVarCircular
Change-Id: I14df8e2f0d5be6f3049a295a527afa09e19f0ef2
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Fri, 14 Jun 2013 10:21:45 +0000 (12:21 +0200)]
Fix JS ownership of children of marked but floating QObjects
This patch fixes four qqmlecmascript tests: propertyVarImplicitOwnership,
propertyVarReparent, propertyVarReparentNullContext, propertyVarCircular2
Usually QObjects wrapped in JS are kept alive because the GC knows about their
weak values stored in the QQmlData, and so it has to do few steps only to
locate those and mark them.
A slightly less common case is a QObject that's wrapped in JS, without a parent
and is stored in a var or variant property. It's visible to the GC, but the
only strong reference to it is through that var property. So when such an
object gets marked (it's without parent), we also have to mark the child
QObjects's JS wrappers (if existent), all recursively.
Change-Id: Ice347a37a841212c145b6d7a58216e449e5cce08
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Lars Knoll [Fri, 14 Jun 2013 11:58:07 +0000 (13:58 +0200)]
Reset the persistent values to undefined on destruction
This is what we expect the JSValue to return after
engine destruction.
Change-Id: I448b7987fa46f0e31711fa0c30561712bab5eca5
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Fri, 14 Jun 2013 11:54:36 +0000 (13:54 +0200)]
Fix some bugs related to QJSValue
Give PersistentValuePrivate a virtual destructor. This makes
sure we properly delete things as QJSValuePrivate inherits from
it.
Also always access the QV4::Value through getValue() before passing
it off into the JS engine, so that we properly convert a QString
based JSValue into a QV4::String.
Change-Id: I4c6cb8d0e043e0d7f66fa545abe898e189051049
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Fri, 14 Jun 2013 11:09:19 +0000 (13:09 +0200)]
Comment out test of octal numbers
We don't currently support octal numbers in v4
Change-Id: Icb31d399a199eb573068b431954a22d169de9b9e
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Fri, 14 Jun 2013 11:08:13 +0000 (13:08 +0200)]
Implement error.fileName and error.lineNumber
Useful extensions to the error object. This also helped
track down a few places in the parser where we wouldn't give
correct error information.
Change-Id: Id03653e096216e097c13a7a6e698ca142d92da13
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Fri, 14 Jun 2013 09:18:12 +0000 (11:18 +0200)]
Check for duplicated label statements as to 12.12 of the spec
Change-Id: Ia2ccddef08a2b3dedd46c509a8693d52dc472982
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Fri, 14 Jun 2013 08:17:30 +0000 (10:17 +0200)]
Fixes to __defineGetter__ and __defineSetter__
Makes the qjsengine test for them pass.
Change-Id: I7bc45665d35b87db8500dc0544c8f7a9872b7014
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Thu, 13 Jun 2013 16:27:06 +0000 (18:27 +0200)]
fix deleteProperty on a string objects
For array indices that are part of the string,
deleteProperty should fail.
Change-Id: Ib253ddd5b3b04d2edc9b744a9407451c2a9778fd
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Thu, 13 Jun 2013 16:14:28 +0000 (18:14 +0200)]
Remove test case that violates the ecma spec
It's actually also hard for us to support this properly, so
let's simply not do it.
Change-Id: I107e1c1f482d64c9d4d58c805e0446e76e85d840
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Thu, 13 Jun 2013 15:44:44 +0000 (17:44 +0200)]
Fix test case
The for..in statements behavior is actually undefined when
it comes to inserting values into the object being iterated
over. Simply adjust the test case to the v4 behavior.
Change-Id: I85774ae98810d8c14ee457138ccc54082de47802
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Simon Hausmann [Thu, 13 Jun 2013 15:10:35 +0000 (17:10 +0200)]
Fix ownership of JS value returned by QJSEngine::newQObject
As documented, the ownership should be JavaScriptOwned, which means:
Keep the QObject alive if there's a parent or some other JS object is
referencing it.
Fixes three QJSEngine auto-tests
Change-Id: I75503273b34e78355b08526da591b8d307a1c6e6
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Thu, 13 Jun 2013 14:49:34 +0000 (16:49 +0200)]
Fix qqmlecmascript::propertyVarOwnership
Don't rely on o = new Date in the test-case to really clear the last "reference"
on the stack. As it turns out, in v4, we sometimes allocate the result of "new Date"
in a different slot and the old slot is still around (and thus the object is
visible and marked).
Instead work with separate scopes, which requires a little helper function in JS.
Change-Id: I5f318feaccfc7d83dbe28be043a0ee83e0c16355
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Thu, 13 Jun 2013 13:27:00 +0000 (15:27 +0200)]
Rework QObject deletion mechanism
Instead of the qv4mm knowing about different ways of deleting the QObjects
of the QObject JS wrappers (and their timing!), provide an interface between
the two.
Before destroying a managed object, we allow for the object to register a
Deletable instance in a singly linked list of deletable objects that will be
deleted right after the sweep, but before the gc returns to application.
This allows for a behavior that is identical with V8: When GC runs, the
QML Component.onDestruction callbacks are called _after_ the sweep but
before returning to the application. The QObject however is deleted later,
unless this is the very last run of the GC (as indicated by the lastCall
property).
Change-Id: I1a2f127f4634c7ecc8c89b45e8b0a575c0ef772e
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Thu, 13 Jun 2013 12:36:32 +0000 (14:36 +0200)]
Don't allow for a QJSValue to be taken from one engine to another through QVariant
Change-Id: I21127d22f595b0ff88f6073bddf617423ad17867
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Thu, 13 Jun 2013 12:22:49 +0000 (14:22 +0200)]
Fix Array.prototype.splice to not require the instance to be a true array
Use putIndexed instead of arraySet, so that it also works with "host" arrays.
Fixes tst_qqmlecmascript::sequenceConversionArray, which calls splice on a
JS-wrapped QList<QString>
Change-Id: Ic9cbf12d625adf7c3c47ce4a7996d2623f843601
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Lars Knoll [Thu, 13 Jun 2013 15:15:57 +0000 (17:15 +0200)]
Fix for..in with duplicated properties
Properties that already appeared earlier in the
proto chain should get skipped by for..in (as they
are inaccessible from JS).
Change-Id: Ia0d9cc8582f96df4b2aaaa409d884f206456fe89
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Thu, 13 Jun 2013 14:13:10 +0000 (16:13 +0200)]
Fix a few spec compliance issues with Number.toExponential/Precision
Fixes an autotest in qjsengine as well.
Change-Id: I6f30d360d4f43ec50a11bed669ff84d84db59589
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Thu, 13 Jun 2013 13:36:53 +0000 (15:36 +0200)]
Fix test case. QDateTime actually writes milliseconds since 5.2
Change-Id: I21a7b63175b173a5036892dd932614a299d519c3
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Simon Hausmann [Thu, 13 Jun 2013 11:46:48 +0000 (13:46 +0200)]
Revert "Simplify JS bindings generation"
This reverts commit
f227c3392beda68beb2792eb9fec467d9a0794da.
Conflicts:
src/qml/qml/v4/qv4object_p.h
src/qml/qml/v4/v4.pri
src/qml/qml/v4/v4classgen
Change-Id: I8aba402878a460ac612c853d14650efc6cb21761
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Thu, 13 Jun 2013 11:45:23 +0000 (13:45 +0200)]
Port the QVariant wrapper away from v4classgen
Replaced with four new lines of code :)
Change-Id: Ie48608d332f8eb0c5ab6615aa62e5865d307c7bd
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Thu, 13 Jun 2013 11:43:09 +0000 (13:43 +0200)]
Port the sequence (QList) wrapper away from v4classgen
This also gets rid of the QQmlSequenceBase base class.
Change-Id: I8cccc6c8924843ae37a4ee4ea95807f2b459d55b
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Lars Knoll [Thu, 13 Jun 2013 12:11:23 +0000 (14:11 +0200)]
Properly implement Object.prototype.__proto__
Change-Id: I5c3247f46cd86020425f6df8674f8bda7410757b
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Simon Hausmann [Thu, 13 Jun 2013 11:20:22 +0000 (13:20 +0200)]
Port ErrorObject away from v4classgen
Not worth it for one single line :)
Change-Id: I67fa8d222f1a382c4304c7d86cae98cf7842eb6f
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Thu, 13 Jun 2013 11:17:45 +0000 (13:17 +0200)]
Revert "Ported string object over to the class generator"
This reverts commit
678417bd473b68834747684edb6fd2b9628050b9.
Conflicts:
src/qml/qml/v4/v4.pri
Change-Id: I927514f20ec5417dd0280a3868f3a0b71b752eca
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Thu, 13 Jun 2013 11:17:20 +0000 (13:17 +0200)]
Revert "Ported boolean prototype over to class generator"
This reverts commit
b6263687dd876959379022090eb8d43a0dbcdd08.
Conflicts:
src/qml/qml/v4/v4.pri
Change-Id: Iebaad46adea26c788b541a111e881af3d305e46a
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Thu, 13 Jun 2013 11:14:59 +0000 (13:14 +0200)]
Revert "Ported RegExp object to class generator"
This reverts commit
551282c220a554f269ada23bf842d8d023c7395c.
Conflicts:
src/qml/qml/v4/qv4regexpobject.cpp
src/qml/qml/v4/v4.pri
Change-Id: Ib853de8427fff3c75feb11d1b4d1db91acb26b8a
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Thu, 13 Jun 2013 11:10:15 +0000 (13:10 +0200)]
Stop using v4classgen in the context2d bindings
Change-Id: Ib117468f2755495eab13f39d72682780a68305c0
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Thu, 13 Jun 2013 11:01:14 +0000 (13:01 +0200)]
Stop using v4classgen for QQmlLocale
It's easy enough now to just define the properties by hand.
Change-Id: I6a053bf22f606280d21e9985928d7c69252611d4
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Thu, 13 Jun 2013 10:52:41 +0000 (12:52 +0200)]
Get rid of memberAccessorGetter
The new defineAccessorProperty is much simpler, so change v4classgen
to generate that.
Change-Id: I5578ef33c2e1735933ec6f10a23e3a69db9b1984
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Thu, 13 Jun 2013 08:17:07 +0000 (10:17 +0200)]
Cosmetic: Silence the with statement warnings, in addition to the XFAIL
Change-Id: I8a89acc93f1446a5ef6cb8441a8ad9b48c4fb752
Reviewed-by: Lars Knoll <lars.knoll@digia.com>