summaryrefslogtreecommitdiffstats
path: root/tools
Commit message (Collapse)AuthorAgeFilesLines
* Store the global object as an Object pointer in the engineLars Knoll2013-04-081-1/+1
| | | | | Change-Id: Ia8b010a9d9c9dd3aacb1b08ce34a42236fa73195 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* Check if "use strict" has no escaped chars.Erik Verbruggen2013-03-181-1/+1
| | | | | Change-Id: I7dc172eba02d454467ead1e18a1a59e98890dd54 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Rename qmljs_runtime to qv4runtimeLars Knoll2013-03-141-1/+1
| | | | | Change-Id: I46ba9b2621be72116d94bee249ad5b798e951c88 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* Rename qmljs_environment.* to qv4context.*Lars Knoll2013-03-141-1/+1
| | | | | Change-Id: I6fe62b501803422f78b47a87c55e4278820725aa Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* "Fix" llvm build.Erik Verbruggen2013-03-071-0/+5
| | | | | | | In a way that it the compiler doesn't complain anymore. Change-Id: I877b1a051b2ffcbd63a04cf219733b2b21cb9128 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Cleanup put and properly implement it for stringsLars Knoll2013-03-071-2/+2
| | | | | Change-Id: I10dda09c8a087bc7ef34c0315c698e08c35ec28d Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* First part of moving get/put etc. into the Managed vtbl.Lars Knoll2013-03-071-1/+1
| | | | | Change-Id: I6fe14b02205901dbffa25c6c1b4883fb99586417 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* Get rid of 'Value ExecutionEngine::exception' memberSimon Hausmann2013-03-061-5/+4
| | | | | | | | | Instead the JS exception value is now part of the C++ Exception object. This also allows getting rid of some run-time functions. Change-Id: I43ff773cacd5e925ba96601f3633ccf3b62273be Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Move function execution into a little ExecutionEngine::run helper functionSimon Hausmann2013-03-051-13/+5
| | | | | | | This will allow for re-use from the v8 wrapper API. Change-Id: I2330432dad43d7fd7af6147e96a0cbbb340cd917 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Cleanup: Get rid of manual unwind stackSimon Hausmann2013-03-041-1/+2
| | | | | | | | | | | | | | | | | Instead of doing the ExecutionContext unwinding at the time of throw, do it at the time of catch, conveniently through an accept() method of the Exception object. That allows us to get rid of the separate handler registration stack. The only tricky part are that some execution contexts are allocated on the stack. When exceptions are thrown through that, we have to catch, unwinding up until that point (or rather the parent of the stack allocated context that's going to be deleted) and then simply rethrow. This patch also gets rid of the __builtin_delete_exception_handler. The next patch will rename the remainder to what it really does now. Change-Id: I00bb113b3a2fe24f7054c03fdfb8fed5cc1258b1 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Implement JavaScript exceptions using C++ exceptionsSimon Hausmann2013-03-031-20/+20
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Instead of registering catch handlers with setjmp and throwing JS exceptions with longjmp, they are now thrown and caught as C++ exceptions. This allows for tight interoperability between C++ and JS in the future and allows for clear semantics with regards to cleaning up memory in the engine when throwing exceptions. (destructors are guaranteed to be called, unlike with setjmp/longjmp). The recent unwind table additions allow for the exceptions to be thrown through JIT generated code. Catching the exception is done by re-using the existing IR semantics where the beginning of a try block is marked by registering an exception handler. Execution after the registration continues conditionally, based on the return value of builtin_create_exception_handler. A return value of is 0 the try block(s) are executed. If an exception is thrown during that time, execution resumes at the point where builtin_create_exception_handler returns, but with a return value of 1. If an exception is thrown within the catch handler, the execution resumes again at the same point, but the inCatch IR variable will guide execution straight to the finally block(s), which calls delete_exception_handler. In the JIT as well as the interpreter this is implemented by entering a C++ code section that contains a C++ try {} catch {} block, in which the calling function is called again and continues right at the next instruction (or the interpreter loop is recursively entered). An exception will throw us out of that scope and back into the try {} catch {} wrapper, which can call again into the calling function. The IR guarantees that delete_exception_handler is always called, regardless of how the try or catch blocks are terminated. That is where in the JIT and interpreter we return from the nested function call and return back into the original stack frame, effectively unregistering the catch handler. Further cleanups with regards to the naming and the exception handler stack will come in subsequent patches, this is merely the minimal patch set to change to the new mechanism. This patch set breaks ARM until ARM exception handler tables are implemented. The interpreter changes are based on a patchset from Erik from https://codereview.qt-project.org/#change,45750 Change-Id: I543f2bd37b2186f7e48ffcab177d57b5ce932a0c Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Tool to generate FDE and CIE tables using libdwarfSimon Hausmann2013-02-272-0/+380
| | | | | | | | This makes it easier to generate the right magic bits and bytes across different architectures. Change-Id: I83cf8f348f4ea92febfe463e1ffd627808e1bb44 Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com>
* Silence compilerLars Knoll2013-02-141-1/+1
| | | | | Change-Id: Id248400c50609811baebb1ea710210915e5274c9 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* Move call/construct over into the new vtable.Lars Knoll2013-02-141-2/+12
| | | | | Change-Id: I4f58a1fac25440695bdc62a49adb51a887616a5c Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* Fix print and gc in builtin v4 methodSimon Hausmann2013-02-141-34/+4
| | | | | | | Also removed unused TestHarness stuff. Change-Id: I6332d9a34f471df07cfa0e9709a203e99a48b524 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Implement a first iteration of the fast property lookup schemeLars Knoll2013-02-121-0/+1
| | | | | | | | | Fast lookups still require a function call, and will only work for properties defined on the object itself. Properties of the prototype will still be slow. Change-Id: I07c601998d312b1bd8e9977708d3375bf72df3e3 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* Remove unnecessary sys/mman.h inclusionSimon Hausmann2013-02-091-1/+0
| | | | | Change-Id: Ic4bbc6a595849042a9c970ba2d0ad5785fe1b89a Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Fix exports in v4 binarySimon Hausmann2013-02-091-3/+3
| | | | | | | Don't use the export macro on internal debug classes. Change-Id: Id2f8069cc8b6703a3fafd3058524d46252eb57f8 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Fixed the llvm bits of the build process.Erik Verbruggen2013-02-062-17/+19
| | | | | Change-Id: I618e0ee413e9548817f84473917ccb8051f689f2 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Avoid duplicated feature defines between tools/v4/v4.pro and src/v4/v4.proSimon Hausmann2013-02-011-16/+1
| | | | | | | Centralize the macros in v4.pri that's included by both. Change-Id: I1ae2ed3b7b97a4e905d2e4ae563c99c964253bb1 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Build fix.Jędrzej Nowacki2013-02-011-0/+5
| | | | | | | Add proper LLVM detection for v4 tool. Change-Id: I03ad3099ce9622df67b7c61ce1e72752b9f6e4bd Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* Re-enable llvm code in main.Erik Verbruggen2013-01-311-1/+0
| | | | | | | | The QMLJS_NO_LLVM flag should be provided by a pri file somewhere next to the other v4.pro, not here. Change-Id: I55c17d6a09f81141e9fa671bab9d3ee9a5830e6a Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* Fix compilation on Mac with clang.Erik Verbruggen2013-01-311-1/+1
| | | | | Change-Id: Ib5ecd92a0b7209ed505d17620ba4097e8d54a53c Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* Make things more compliant with a regular Qt moduleLars Knoll2013-01-313-0/+446
Move the v4 tool into basedir/tools/v4 Small fix to sync.profile Install v4 into QT_INSTALL_BINS adjust test262.py to simply call 'v4' by default Change-Id: If78f40632c226bc26f64b0eea06fe93d7770af3e Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>