Simon Wanner
4671520c0a
LibJS/JIT: Compile the Yield instruction
2023-11-03 07:31:11 +01:00
Simon Wanner
e400682fb1
LibJS/JIT: Support alternative entry point blocks
...
If Interpreter::run_and_return_frame is called with a specific entry
point we now map that to a native instruction address, which the JIT
code jumps to after the function prologue.
2023-11-03 07:31:11 +01:00
Idan Horowitz
38f3b78a1d
LibJS: Store the bytecode accumulator in a dedicated physical register
...
We now use a dedicated physical register to store the bytecode
accumulator, instead of loading and storing it to the memory everytime.
2023-11-02 22:35:35 +01:00
Simon Wanner
1030776f92
LibJS: Avoid crash on empty stack trace
...
We were trying to stringify the stack trace without the last element,
leading to a loop bound of (size_t)(0 - 1) and accessing m_traceback[0]
out-of-bounds.
Instead, just return an empty string in that case.
Fixes #21747
2023-11-02 16:12:43 +01:00
Nick Hawke
67566e5017
LibJS: Migrate DeprecatedString to String
...
This changes BasicBlock's constructor and create().
2023-11-02 14:55:12 +01:00
Simon Wanner
e73a1803ac
LibJS/JIT: Avoid crashing while disassembling empty functions
2023-11-02 07:37:41 +01:00
Simon Wanner
68f4d21de2
LibJS: Lazily collect stack trace information
...
The previous implementation was calling `backtrace()` for every
function call, which is quite slow.
Instead, this implementation provides VM::stack_trace() which unwinds
the native stack, maps it through NativeExecutable::get_source_range
and combines it with source ranges from interpreted call frames.
2023-11-02 07:37:41 +01:00
Simon Wanner
93908fcbcb
LibJS+Embedders: Unify stack trace format for uncaught errors
...
Previously these handlers duplicated code and used formats that
were different from the one Error.prototype.stack uses.
Now they use the same Error::stack_string function, which accepts
a new parameter for compacting stack traces with repeating frames.
2023-11-02 07:37:41 +01:00
Andrew Kaster
26e5c20cfa
LibJS: Don't try to use backtrace(3) on Android below API level 33
2023-11-01 14:30:30 -06:00
networkException
ff6d7cf3e4
LibJS+LibWeb: Bring script fetching closer to the spec
...
This patch updates various parts of the script fetching implementation
to match the current specification.
Notably, the implementation of changes to the import assertions /
attributes proposal are not part of this patch(series).
2023-10-31 18:09:14 +01:00
networkException
c3b02ae65a
LibJS: Add GraphLoadingState Record
...
This patch adds the GraphLoadingState Record with a struct HostDefined
for use in the HostDefined field.
2023-10-31 18:09:14 +01:00
networkException
33b40eaeed
LibJS: Add LoadedModules to Script and CyclicModule
2023-10-31 18:09:14 +01:00
networkException
d60e8c9df5
LibJS: Add ModuleWithSpecifier for LoadedModules
...
This patch adds ModuleWithSpecifier as the record type to be used in
the LoadedModules field of Realm, Script and Cyclic Module Records.
2023-10-31 18:09:14 +01:00
networkException
7c7ca7f230
LibWeb: Add New as a possible enum variant of ModuleStatus
2023-10-31 18:09:14 +01:00
Simon Wanner
fb7b4b9c59
LibJS/JIT: Provide source location information for JIT code
...
This works by walking a backtrace until the currently executing
native executable is found, and then mapping the native address
to its bytecode instruction.
2023-10-31 07:07:17 +01:00
Simon Wanner
112eadc863
LibJS/JIT: Annotate disassembly with bytecode information
2023-10-31 07:07:17 +01:00
Simon Wanner
9f78e56823
LibJS/JIT: Record machine code location to bytecode location mapping
2023-10-31 07:07:17 +01:00
Simon Wanner
0daebef727
LibJS/JIT: Clear exception before executing finalizer
...
language/statements/try/S12.14_A13_T2.js ❌ -> ✅
language/statements/try/S12.14_A15.js ❌ -> ✅
language/statements/try/S12.14_A7_T1.js ❌ -> ✅
language/statements/try/S12.14_A7_T2.js ❌ -> ✅
language/statements/try/S12.14_A7_T3.js ❌ -> ✅
language/statements/try/completion-values-fn-finally-abrupt.js ❌ -> ✅
language/statements/try/completion-values-fn-finally-return.js ❌ -> ✅
2023-10-30 15:05:26 +01:00
Simon Wanner
bd62c4763c
LibJS/JIT: Flip saved_return_value condition in ContinuePendingUnwind
...
This did not match the `if (saved_return_value) return else resume`
in Interpreter.
test/built-ins/Promise/all/resolve-poisoned-then.js ❌ -> ✅
test/built-ins/Promise/all/resolve-thenable.js ❌ -> ✅
test/built-ins/Promise/allSettled/resolve-poisoned-then.js ❌ -> ✅
test/built-ins/Promise/allSettled/resolve-thenable.js ❌ -> ✅
test/built-ins/Promise/race/resolve-self.js ❌ -> ✅
test/language/statements/try/S12.14_A7_T1.js ✅ -> ❌
test/language/statements/try/S12.14_A7_T2.js ✅ -> ❌
test/language/statements/try/S12.14_A7_T3.js ✅ -> ❌
2023-10-30 15:05:26 +01:00
Simon Wanner
82c057391e
LibJS/JIT: Handle uninitialized bindings in GetLocal
...
test262: +78 ✅ -72 ❌ -4 💥 ️
2023-10-30 15:05:26 +01:00
Simon Wanner
5b2c0dfec0
LibJS/JIT: Return result of SuperCallWithArgumentArray
...
test/language/expressions/optional-chaining/call-expression.js 💥 ️ -> ✅
test/language/expressions/super/call-expr-value.js 💥 ️ -> ✅
2023-10-30 15:05:26 +01:00
Evgeniy Baskov
da45bd3fde
LibJS/JIT: Implement static exception handling
2023-10-30 13:10:08 +01:00
Hendiadyoin1
1341f4438d
LibJS: Save scheduled jumps when entering unwind contexts
...
These are then restored upon `ContinuePendingUnwind`.
This stops us from forgetting where we needed to jump when we do extra
try-catches in finally blocks.
Co-Authored-By: Jesús "gsus" Lapastora <cyber.gsuscode@gmail.com>
2023-10-30 13:10:08 +01:00
Hendiadyoin1
4da5b8ec67
LibJS: Reset scheduled-jump flag when throwing an exception
...
Otherwise we might attempt to follow the scheduled jump later
2023-10-30 13:10:08 +01:00
Hendiadyoin1
f5645e3c9c
LibJS: Use static unwind mappings for unwind related functions
2023-10-30 13:10:08 +01:00
Hendiadyoin1
73f347b75c
LibJS: Create static unwind mappings for BasicBlock
s
...
This is currently only used in the bytecode dump to annotate to where
unwinds lead per block, but will be hooked up to the virtual machine in
the next commit.
2023-10-30 13:10:08 +01:00
Andreas Kling
0c6d094a7e
LibJS/JIT: Stop logging JIT success by default (but still log failure)
2023-10-30 07:11:43 +01:00
Zaggy1024
dfaf645302
LibJS: Add an inline JIT fast path when ToNumeric
has nothing to do
...
In most cases, this op will do nothing, as it is running on an the
accumulator while it already contains a number. Let's avoid doing that
native call.
2023-10-30 07:10:54 +01:00
Simon Wanner
a2b0154661
LibJS/JIT: Compile the AsyncIteratorClose instruction
2023-10-30 07:10:24 +01:00
Simon Wanner
ac59e982a9
LibJS/JIT: Compile the CopyObjectExcludingProperties instruction
2023-10-30 07:10:24 +01:00
Simon Wanner
9494fbe670
LibJS/JIT: Compile the PutByValueWithThis instruction
2023-10-30 07:10:24 +01:00
Simon Wanner
847889343f
LibJS/JIT: Compile the New##ErrorName instructions
2023-10-30 07:10:24 +01:00
Simon Wanner
fd059d4e4a
LibJS/JIT: Compile the JumpUndefined instruction
2023-10-30 07:10:24 +01:00
Simon Wanner
a16082c6a5
LibJS/JIT: Compile the HasPrivateId instruction
2023-10-30 07:10:24 +01:00
Simon Wanner
712c89dacf
LibJS/JIT: Compile the GetNewTarget instruction
2023-10-30 07:10:24 +01:00
Simon Wanner
19045d6431
LibJS/JIT: Compile the GetMethod instruction
2023-10-30 07:10:24 +01:00
Simon Wanner
06ea4cfc4f
LibJS/JIT: Compile the DeleteVariable instruction
2023-10-30 07:10:24 +01:00
Simon Wanner
cd18bc9d55
LibJS/JIT: Compile the GetImportMeta instruction
2023-10-30 07:10:24 +01:00
Simon Wanner
c0c40110c1
LibJS/JIT: Compile the ImportCall instruction
2023-10-30 07:10:24 +01:00
Simon Wanner
ac43d3f6db
LibJS/JIT: Compile the PutPrivateById instruction
2023-10-29 22:57:19 +01:00
Simon Wanner
81697549b7
LibJS/JIT: Compile the PutByIdWithThis instruction
2023-10-29 22:57:19 +01:00
Simon Wanner
38d5d7979b
LibJS/JIT: Compile the DeleteByIdWithThis instruction
2023-10-29 22:57:19 +01:00
Simon Wanner
b53277110e
LibJS/JIT: Compile the GetByValueWithThis instruction
2023-10-29 22:57:19 +01:00
Simon Wanner
569ca57e22
LibJS/JIT: Compile the GetByIdWithThis instruction
2023-10-29 22:57:19 +01:00
Simon Wanner
ad81f49b02
LibJS/JIT: Compile the ResolveSuperBase instruction
2023-10-29 22:57:19 +01:00
Simon Wanner
4e9edb8c53
LibJS/JIT: Compile the GetPrivateById instruction
2023-10-29 22:57:19 +01:00
Simon Wanner
4ce2878394
LibJS/JIT: Compile the GetObjectPropertyIterator instruction
2023-10-29 22:57:19 +01:00
Simon Wanner
ad81bf47bb
LibJS: Move GetObjectPropertyIterator impl to CommonImplementations
2023-10-29 22:57:19 +01:00
Jakub Berkop
6a7b9b85a4
LibJS/JIT: Compile the DeleteByValueWithThis instruction
2023-10-29 21:51:46 +01:00
Jakub Berkop
0776404e03
LibJS/JIT: Compile the DeleteByValue instruction
2023-10-29 21:51:46 +01:00