| Commit message (Collapse) | Author | Age | Files | Lines |
| ... | |
| | |
| |
| |
| |
| | |
Change-Id: Iad6018f67faa956d385087865fca9d73419e363e
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
| | |
| |
| |
| |
| |
| |
| | |
Avoid allocations on the JS stack if possible
Change-Id: I344cd6dceb6264314f9d22c94db22b22d1d24d14
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
|
| | |
| |
| |
| |
| | |
Change-Id: Ic53532edae9a209aa7125af6f00a9d993d74f1a3
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
|
| | |
| |
| |
| |
| | |
Change-Id: I1c35fbf8f7355bc2393ae931f99e591b800f2f45
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
|
| | |
| |
| |
| |
| |
| |
| |
| | |
As, this is going to change in a simple stack based structure
to keep pointers to the data to pass to calls.
Change-Id: Ia9aa3f81ee3eeba36affd16aac7b2fe97d59aea9
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
By calling JSCall with an ExecutionContext as first parameter, the
compiler would implicitly create a temporary Scope object in order to be
able to do the call. However, the scope would then wipe the stack
when it is being destructed. So subsequently retrieving argc would
always result in 0 arguments.
To prevent accidents like this, all Scope constructors are now explicit,
and the QV4::Script's ExecutionContext is renamed from scope to context.
Change-Id: Iea7930748a0544382a20b6617fa9818a8a2bea7f
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
|
| | |
| |
| |
| |
| |
| |
| |
| |
| | |
Renamed ScopedCallData to JSCall, enforced passing a JS
FunctionObject to it, and added call() and callAsConstructor()
methods to it.
Change-Id: I30db65c9765c2896b5909fe2105c0934c6dad861
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
| | |
| |
| |
| |
| | |
Change-Id: I9ae42aa7a811aa93fe0950725e9d253a0c5e8dba
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
| | |
| |
| |
| |
| | |
Change-Id: Iba5a238c98617f99049dc0e529e642b924e42755
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This will allow us to further cut down on function call
overhead. To make this work, introduce a proper distinction
between EvalCode and GlobalCode and use the correct
compilation mode in all places.
Change-Id: I070621142159b7416026347c9239200c5ed7a56b
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
| | |
| |
| |
| |
| |
| |
| |
| | |
Store the current context in the context member instead of
passing it along as arguments.
Change-Id: If3dd0d32eddb2a02bcbf65fe6e8d15142403170e
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
| | |
| |
| |
| |
| |
| |
| |
| |
| | |
Don't emit any Line instructions anymore, and instead store
the info in a side table in the compiled data, where it can
be looked up on demand.
Change-Id: Idcaf3bf4ee4129fd62f9e717bf1277dc6a34fe19
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
|
| | |
| |
| |
| |
| |
| |
| |
| | |
This will allow removing a few more special cases and to simplify
the code further.
Change-Id: I3a958e9f68e3c103ea4f2ee6825f893e5931b11d
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
| | |
| |
| |
| |
| |
| |
| |
| | |
After the recent changes this can easily be unified with
the call method without loss of performance.
Change-Id: I0385b47b6a86e890f97dcbada3a1be1129ae0b84
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Fix the push/pop context instructions to not modify the JS
stack anymore, as that can cause conflicts with the VME
(and was an ugly hack in any case). Instead, these instructions
not return the old context, that is then stored in a temporary.
Get rid of Engine::current and Engine::currentContext. The
StackFrame structures do now contain the only and authoritive
data. This finally gives us a nice setup where we create and
destroy frames on the stack when entering/leaving functions.
Change-Id: If161e3e941f59865c47ecfe1e094faf62b52bfa0
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
| | |
| |
| |
| |
| |
| |
| |
| |
| | |
This should be done by generating different byte code for
the strict/non strict cases. For now the VME has a workaround
checking the isStrict() flag of QV4::Function.
Change-Id: I2faa9e9184ffc5274491067e67f665d6989b54c2
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
| | |
| |
| |
| |
| |
| |
| |
| | |
The frame currently contains the function itself and the current
context.
Change-Id: I7d3402627fbc90e860a7bdc277585f365f5b4cb5
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
| | |
| |
| |
| |
| | |
Change-Id: I1fe2ff987e79cf590ad5ad3fc520b17925f8b616
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
| | |
| |
| |
| |
| |
| |
| | |
There's no reason this class should create a scope on it's own.
Change-Id: I93bddea8be42a908a1aca1bcb0ec867aae0d29f8
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
| | |
| |
| |
| |
| |
| |
| |
| | |
Allow for faster calling of builtins, and completely avoid
scope creation in many cases.
Change-Id: I0f1681e19e9908db10def85a74e134a87fc2e44c
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
And change the signature for VME::exec to take the QV4::Function
that should be executed. This is in preparation to being able
to run functions that will not need to allocate an execution
context on their own.
Change-Id: I34538a8723006f4ec24583805e88a66e750100c3
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
|
| | |
| |
| |
| |
| | |
Change-Id: I3d09fc4b8aebe19acae0ba5a688491428a4af715
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
And changed the namespace of those classes to
QV4::Compiler.
ScanFunctions should over time also move into its
own file.
Change-Id: If084acea4a9a20b9c79ad47dac19e02dc720e098
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
| | |
| |
| |
| |
| |
| |
| |
| |
| | |
Remove all files from the old compiler pipeline that are now
unused. This includes the whole IR, JIT code generation,
and the old Moth Isel.
Change-Id: I50d06abfbcf0e9755a54ed94638f8bb74f9512b1
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
|
| | |
| |
| |
| |
| |
| |
| |
| |
| | |
Fold the stuff from IR::Function into QQmlJS::Context, and
add a QQmlJS::Module class to replace the last pieces of the old
IR.
Change-Id: Ic02a6738a4f1db67a0ddf97b6c93ca32be81789d
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
|
| | |
| |
| |
| |
| |
| |
| | |
Part of refactoring and streamlining this code base.
Change-Id: I324d35d1f0a74c5908b40243ffa2b247ce924304
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
|
| | |
| |
| |
| |
| |
| |
| |
| |
| | |
This was only causing us to create mutable bindings for
variables that already existed, thus leading to an
expensive noop.
Change-Id: I6ed8ee891f8ec16c59e5fc43ed9eb155cb4b64ac
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
|
| | |
| |
| |
| |
| |
| |
| |
| | |
Move the code that generates the CompilationUnit over to Codegen,
and don't use the ISel's at all anymore when compiling JS/QML.
Change-Id: Iba89082c386c3d3fd58ac25a4651c5d39178cc5c
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
|
| | |
| |
| |
| |
| | |
Change-Id: I02d57d2cbb4ae56c0c4626d96cbdf9935b366579
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
|
| |/
|
|
|
|
|
|
| |
Allow registering all the required data to generate the
proper compilationunit already in the codegenerator.
Change-Id: I36345cc01927b3f8dc3ba6d91da175bd6abe124a
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
|
| |\
| |
| |
| |
| |
| |
| | |
Conflicts:
.qmake.conf
Change-Id: I9d87ed86e95b5901a86cc3aa65d7ac39b0b708c2
|
| | |
| |
| |
| |
| |
| |
| |
| |
| | |
It's a hack we needed when we still had a conservative GC, but
it is not required anymore. The only thing we still need is the
protection against running the GC recursively.
Change-Id: I55cd51d4929c828db5b61b38e781467c5bf77314
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
| |\|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Conflicts:
src/plugins/qmltooling/qmldbg_debugger/qv4debugjob.cpp
src/plugins/qmltooling/qmldbg_inspector/globalinspector.cpp
src/plugins/qmltooling/qmldbg_nativedebugger/qqmlnativedebugservice.cpp
src/qml/qml/qqmlimport.cpp
src/quick/items/context2d/qquickcontext2dtexture_p.h
tools/qmleasing/splineeditor.h
Change-Id: I8f6630fcac243824350986c8e9f4bd6483bf20b5
|
| | |
| |
| |
| |
| |
| |
| |
| | |
This also removes the last use of the QmlBindingWrapper, so
remove that class as well.
Change-Id: I2ec795b6ab695a689fb24d64c9b8809b651c2b37
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Factor the common code out into separate methods that can
later on be reused by the QQmlJavaScriptExpression.
Also ensure a CallContext is safe to use with a 0
FunctionObject.
Change-Id: I1181a8e320b8c931d9df5b2c91bc143d8587fb60
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
| | |
| |
| |
| |
| |
| |
| |
| |
| | |
The class should get merged with the QV4::QmlContext class.
Simplify the cleanup by moving both classes into a common
file.
Change-Id: I0074da79701d5f41eb51681b70fcde85bfd45fc1
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
| |\|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Conflicts:
src/qml/jsruntime/qv4variantobject.cpp
src/qml/types/qquickworkerscript.cpp
src/quick/scenegraph/util/qsgdefaultpainternode_p.h
tools/qmljs/qmljs.cpp
Change-Id: I876242714ec8c046238d8fd673a5ace2455b2b59
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
GCC6 might dead-store-eliminate out our secret write to Base::mmdata,
because it expects all memory content to be "undefined" before
constructor calls. Clang might take the same approach if the constructor
of Heap::Object is removed.
By making these structs trivial, it also makes them memcpy-able.
Change-Id: I055b2ad28311b997fbe059849ebda4d5894eaa9b
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
| |/
|
|
|
| |
Change-Id: Ieb99b73037bc5b07caf62121d51a17c3025df97c
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
|
| |
|
|
|
|
|
|
| |
When running on a big-endian system, we need to convert the constant values
into big-endian once and then it's possible to access them directly.
Change-Id: I655bad7b7734e3b95e79e5f688f0b4041d0c41c4
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
|
| |
|
|
|
|
|
|
|
|
|
|
| |
On 32-bit architectures we were encoding the absolute address of generated
constants in memory into the load instruction. In order to make the code
reloctable, this patch changes the JIT over to use the constant table in the
compilation unit. This means two additional loads per constant. On
architectures that support instruction pointer relative addressing, we can try
to fix this in the future (arm32 for example).
Change-Id: I8ed7aa7c67711696d6c46c72b3b642d610ff2cbc
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
|
| |
|
|
|
|
|
|
| |
This will allow us to #define them away on -no-qml-debug, saving two
pointers per engine.
Change-Id: I400cffd32cd7f55ff0e68565734b6002b9f901d5
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
| |
|
|
|
|
|
|
|
| |
There's no apparent need to store the refptr to the compilation unit in a
persistent value, when the persistent's life time is bound to the life time of
the V4::Script.
Change-Id: Ib4f3008f45c17a680dbe12ca1f80522fd7f6fdfc
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The implementation of many (or all) runtime functions consist of first
creating a QV4::Scope, which saves and restores the JS stack pointer.
It also prevents tail-calls because of that restoring behavior. In many
cases it suffices to do that at the entry-point of the runtime.
The return value of a JS function call is now also stored in the scope.
Previously, all return values were stored in a ScopedValue, got loaded
on return, and immediately stored in another ScopedValue in the caller.
This resulted in a lot of stores, where now there is only one store
needed, and no extra ScopedValue for every function.
Change-Id: I13d80fc0ce72c5702ef1536d41d12f710c5914fa
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
| |
|
|
|
|
|
|
|
|
|
| |
From Qt 5.7 -> LGPL v2.1 isn't an option anymore, see
http://blog.qt.io/blog/2016/01/13/new-agreement-with-the-kde-free-qt-foundation/
Updated license headers to use new LGPL header instead of LGPL21 one
(in those files which will be under LGPL v3)
Change-Id: Ic36f1a0a1436fe6ac6eeca8c2375a79857e9cb12
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
|
| |
|
|
|
|
|
| |
Also disable the old way of constructing objects.
Change-Id: Ib4e69087cd563ae1481da116d6caf97876239798
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
|
| |
|
|
|
| |
Change-Id: I269c20abdc7f9eb0d71a2d2d485d622b65405762
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
|
| |
|
|
|
|
|
|
| |
Now that the other method is gone, let's use
the shorter currentContext
Change-Id: I2a6fb3b77f83a1ffdf314ad29081e303d17030ed
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
|
| |
|
|
|
| |
Change-Id: Ic79d6da162375928ec25871cd0341daeab6483d2
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
|
| |
|
|
|
|
|
|
| |
Avoid the implicit push inside the execution context constructor
and rather make this explicit in the code.
Change-Id: I1bb0fb523fddbb273fc666370d619f55f49cd40a
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
|