Commit Graph

13931 Commits

Author SHA1 Message Date
Lars Knoll 135b823292 Re-enable binops with a constant rhs
Change-Id: If2a2f6257905cf76b28feafe43e5f089ca8ade7f
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
2017-06-22 08:07:15 +00:00
Lars Knoll 52e3a59b1d Re-enable lookups
Change-Id: I02d57d2cbb4ae56c0c4626d96cbdf9935b366579
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
2017-06-22 08:07:10 +00:00
Lars Knoll 4cf290ab43 Fix compilation issue when compiling the old JIT code
Change-Id: I18cd60e770b04aaba6d5ec62012f88a2743e73dd
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
2017-06-22 08:07:06 +00:00
Lars Knoll 7a6bc76068 Use simple calls if possible
This was disabled by accident. We do however not get many simple calls
currently, as this would require turning locals into temps in the
current architecture.

This will get fixed with a better approach to allocating contexts
in the slightly longer term.

Change-Id: Ie9b88e6d5668caec5b5c25ab18540d39bf4e8dc2
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
2017-06-22 08:06:59 +00:00
Erik Verbruggen c173394036 Fix another -0 check
Change-Id: I6146e4c41aa08ff4804fa2f37e93186ddc0a2a0f
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2017-06-22 08:05:29 +00:00
Erik Verbruggen 1d7f082f33 Do not unnecessary load constants into temporaries
Specifically when creating an object from an object literal.

Change-Id: I2f29be5d977ac2e5a0a634229ae899356e568ebd
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2017-06-22 08:04:56 +00:00
Erik Verbruggen 484cf3d762 Initialize elided array elements with empty
... instead of undefined. Also massages the bytecode dumper a bit to
make debugging easier.

Change-Id: Ief1a9330196b20e97717174a945cd5a6432e05ce
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2017-06-21 12:54:38 +00:00
Erik Verbruggen 5972060469 Fix invalid assert
When the "this" in store is a non-temp, we can't compare the base to
the source value's Param. What needs to be checked is not the base, but
the "b" value, which hold a (possibly loaded) value.

Change-Id: I43ed77db70a3f075b40f01dd66f16a0046467ce1
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2017-06-21 11:22:56 +00:00
Lars Knoll 8d51f7c440 Correctly trigger loads of arguments for calls and array/object literals
These have to be loaded in the right order, as the load might
trigger some side effects.

Change-Id: I5a987bf90c7c9376de609ce24b00436cbf78168d
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
2017-06-21 10:59:46 +00:00
Lars Knoll 99df06a1e5 Make sure we don't accept literals as lvalues
Change-Id: I06f475337944554842b4c0a05f0c88617579e2cb
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
2017-06-21 10:48:02 +00:00
Lars Knoll 46a7856a90 Fix recursive array definitions
Make sure '[[1, 2], 3]' produces the correct result.

Change-Id: I95efcf4cab20badfffd31429a57fb73cdf241518
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
2017-06-21 10:36:20 +00:00
Lars Knoll 6757fdad71 Fix delete operator
Use a switch statement so we cover all cases of Reference types.
Fixes a crash for 'delete this'.

Change-Id: Ib3575fb2176cd9493211a716132d2f768e0f0ac7
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
2017-06-21 10:36:08 +00:00
Lars Knoll d2a0ec4456 Throw syntax error if arguments or eval are used as lvalues in strict mode
Change-Id: I4c46537e3a4f3c2c22efea323dc8a95c1078c75f
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
2017-06-21 10:33:55 +00:00
Erik Verbruggen 48d77ce4c8 Add support for post increment/decrement
Change-Id: Ie3f03a548105fe49d29e3d60bf823435f21b0340
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2017-06-21 09:19:59 +00:00
Lars Knoll 5c86161fa2 Fix for for(... in ...)
Change-Id: I7edb3ec722238c0229ca6d0f850cd15bb1bc6937
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
2017-06-21 09:18:16 +00:00
Lars Knoll b309159cc8 Fix nested function calls
If one argument of a function call was itself calling a function
(or an object/array literal), we'd override the arguments of the
outer function call.

Change-Id: I41bc93c1217283f22b02e881f96b04286a4c7e7e
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
2017-06-21 09:17:23 +00:00
Lars Knoll 8a0dad67ae Fix exception handling
Fix all exception handling related test failures
in test262.

Change-Id: Iba50238627c31705a4878b43abbb8f20f0ecee88
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
2017-06-21 09:16:46 +00:00
Lars Knoll 7daf31f285 Fix a couple of compiler warnings
Change-Id: If30064de5710b7b9e1aaa42ce1279de643f44e85
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
2017-06-21 09:10:35 +00:00
Erik Verbruggen 5557ea8c79 Reserve call args and return value before any other temps
Change-Id: Ia24a5d301be2f74ac073c37ddda45f6c0ac8ed8e
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2017-06-20 18:07:13 +00:00
Erik Verbruggen 57de6922ea Fix calls where the base is a Reference::Name
Change-Id: Id86a034ba1d3eaec975704875509eb95e014fa7b
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2017-06-20 18:06:52 +00:00
Erik Verbruggen 4f4ad7c262 Fix 'arguments' initialization
Change-Id: I6fe35924b42908f656363ae1af07a7d8cd67a7ea
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2017-06-20 12:50:08 +00:00
Erik Verbruggen 3c4b2555d9 Fix 'this' handling and make it an rvalue only
Change-Id: I4e99b81e5b73b7eb36d3f05bdf3b9f03d59f882f
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2017-06-20 12:50:03 +00:00
Lars Knoll 5a90fac1a6 Simplify the code for lookupQmlCompliantProperty
Change-Id: Id76294a9276f85b9791a4126ae4fa80964d0091f
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
2017-06-20 11:02:19 +00:00
Lars Knoll c9989e4898 Fix assertion in LocalForeachStatement
Change-Id: I7386769ed62de8a5e86e08c23671f8e9e5a5be3c
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
2017-06-20 10:18:31 +00:00
Lars Knoll 7dd3d7d925 Remove unused code
Change-Id: Ia891fc48572a5691f4129cef8e9a3ed6871565b9
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
2017-06-20 10:13:29 +00:00
Lars Knoll 1658f5b749 Port JSCodeGen in qqmlirbuilder over to new parser
Implement QML support in Reference. Implement the
fallbackNameLookup() method for QML, and emit
bytecode to load the qml context and imported script
temps in beginFunctionBodyHook()

Change-Id: I7e052f10ec064097ab1c1f51d776622a4176ce99
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
2017-06-20 10:12:58 +00:00
Lars Knoll f66599936e Reduce usage of _function
Change-Id: I9a64083afe8e23f506735c04dedb8978ddcfd45d
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
2017-06-20 10:10:53 +00:00
Lars Knoll dcc3a4c7ed Remove a couple of references to the IR
Change-Id: I716000a6932a6b3d3f6c9f0573747b9c4b8e0e6b
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
2017-06-20 10:10:41 +00:00
Lars Knoll 0ee1156784 No need to initialize locals to undefined
The runtime already does that for us.

Change-Id: Iddde1a3fe4775b8a30fc887296f56fc3ebace12f
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
2017-06-20 10:09:52 +00:00
Erik Verbruggen df3e864835 Fix ASAN issue
Change-Id: I50250587ad6e88f6323721b69443a03674b923b9
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2017-06-20 10:09:46 +00:00
Lars Knoll 2a612d7655 Handle loads/stores of References better
This is still not ideal and creates too many move
instructions, but at least it avoids repeated loads
and stores into temps to the largest part.

Change-Id: I5286a6598461b229aa12cf88b711922e69f46b70
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
2017-06-20 10:08:36 +00:00
Lars Knoll 809d624d0f Use the proper call for Member references
This is required so the this object gets set up correctly.

crypto.js passes now :)

Change-Id: I995ffe40b3fee6d8a7b1f9e2d7a9887cd8a87275
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
2017-06-20 10:04:23 +00:00
Lars Knoll a14407ca59 Get back some line number information
Change-Id: I7d7845a9d8d147bd363c0f60df41066fab355272
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
2017-06-20 10:04:19 +00:00
Lars Knoll 5da34373d4 Always use the interpreter for now
The JIT doesn't work currently.

Change-Id: I511f4bac7f0c2c114fb328753fde3ed51b0ed42a
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
2017-06-20 10:04:16 +00:00
Lars Knoll a9287277e3 Properly implement the function prologue
Set locals to undefined and declare them for global code

Change-Id: I41848f1463fa402a3c2b1f67117be86cc0d697a1
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
2017-06-20 10:04:12 +00:00
Lars Knoll cd03d4250e Beautify the code
Add a couple of using directives to avoid lots
of the repeated prefixing of common types.

Change-Id: Ie2bbe366ecb49d24cb951d445d9d6796b7e2554b
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
2017-06-20 10:04:09 +00:00
Lars Knoll 59a1bca960 Fix throwSyntaxErrorOnEvalOrArgumentsInStrictMode
Change-Id: I4d205f989120701f5fd10497e67dc6f4d01d59e9
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
2017-06-20 10:04:05 +00:00
Lars Knoll 95e9677bb8 Cleanups
Remove code that's no longer used

Change-Id: Idd8bcf1a7fd87b8db393b7e78880ca32e35fbdfd
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
2017-06-20 10:04:02 +00:00
Lars Knoll 0df2dd8f9f Cleanup paramForXXX() methods
Should be folded into the commit that added them

Change-Id: I1d0c5bc5d83e0e8c25b63a9eb2e903299715e966
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
2017-06-20 10:03:57 +00:00
Lars Knoll 1c13f23a09 Proper exception handling
Implement exception handling, and make it conformant
with the spec.

Change-Id: I6d8222617180f96f628f18e11444488e50e5c043
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
2017-06-20 10:03:53 +00:00
Erik Verbruggen 84501b6f4c Support postfix increment/decrement
Change-Id: I86e6fd5c34524eb0c101b7988b79e0890d3005f6
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2017-06-20 10:03:47 +00:00
Erik Verbruggen 24969e19b1 Support object literals
Change-Id: I7fc4565044caf23bec239561be4fbc020ccc2468
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2017-06-20 10:03:37 +00:00
Lars Knoll b829693623 Cleanup control flow handling
Replace Loop and ScopeAndFinally with a single ControlFlow
data structure, that can deal with non local control flow.

The control flow data structure can do required cleanup
of internal scopes (for catch or with), emit finally
statements and dispatch to the right continuation.

Also implemented support for the with statement again.

Change-Id: I8bb5414151d0312cb28f8d10e99f8d2b64484100
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
2017-06-20 09:58:45 +00:00
Lars Knoll 0f36cdc4dd Implement support for delete
Change-Id: I1b2055b2d89fc0c5484dff064740397154616465
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
2017-06-20 09:57:52 +00:00
Erik Verbruggen 800a2caa49 Support array literals
Change-Id: Ief56f93271dbe45c90ed1cb083f99b31af7c6a07
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2017-06-20 09:57:46 +00:00
Lars Knoll 241ccd8fe3 Use a new temp for return values from call and new operations
Change-Id: Ic95ab3b2f866b68cbdc04299d1c983beb0e46387
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2017-06-20 09:57:31 +00:00
Erik Verbruggen cd770a6b59 Fix FunctionExpression
Change-Id: I03216b8e52057e3f3d665265959f66ae5cfa44df
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2017-06-20 09:57:13 +00:00
Lars Knoll 3a36c55fec Simplify function call and new handling
Always use Call/CreateValue instructions, by loading the
reference into a temp if required.

Change-Id: I0103cec91224f405129e6a770ce7483141c5c1a8
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
2017-06-20 09:56:58 +00:00
Erik Verbruggen 15f11ab322 Use cx results in loops with conditions
This folds the jumps generated by e.g. && and || expressions directly
into the jump to the start/end of the loop.

Change-Id: I53f8cb6eb6b995b7418b57ada59c17d3a556935a
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2017-06-20 09:56:44 +00:00
Lars Knoll eb2c4b5cff Basic support for new
Change-Id: I81b323e49c09947d4e068f55eaeee0286468498b
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2017-06-20 09:56:12 +00:00