mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-10-25 01:19:45 +00:00
|
Some checks are pending
CI / macOS, arm64, Sanitizer, Clang (push) Waiting to run
CI / Linux, x86_64, Fuzzers, Clang (push) Waiting to run
CI / Linux, x86_64, Sanitizer, GNU (push) Waiting to run
CI / Linux, x86_64, Sanitizer, Clang (push) Waiting to run
Package the js repl as a binary artifact / Linux, arm64 (push) Waiting to run
Package the js repl as a binary artifact / macOS, arm64 (push) Waiting to run
Package the js repl as a binary artifact / Linux, x86_64 (push) Waiting to run
Label PRs with merge conflicts / auto-labeler (push) Waiting to run
Push notes / build (push) Waiting to run
Run test262 and test-wasm / run_and_update_results (push) Waiting to run
Lint Code / lint (push) Waiting to run
We already had IC support in PutById for the following cases:
- Changing an existing own property
- Calling a setter located in the prototype chain
This was enough to speed up code where structurally identical objects
(same shape) are processed in a loop:
```js
const arr = [{ a: 1 }, { a: 2 }, { a: 3 }];
for (let obj of arr) {
obj.a += 1;
}
```
However, creating structurally identical objects in a loop was still
slow:
```js
for (let i = 0; i < 10_000_000; i++) {
const o = {};
o.a = 1;
o.b = 2;
o.c = 3;
}
```
This change addresses that by adding a new IC type that caches both the
source and target shapes, allowing property additions to be fast-pathed
by directly jumping to the shape that already includes the new property.
|
||
|---|---|---|
| .. | ||
| AbstractOperations.cpp | ||
| AbstractOperations.h | ||
| AsyncIterator.cpp | ||
| AsyncIterator.h | ||
| Buffers.cpp | ||
| Buffers.h | ||
| CachedAttribute.h | ||
| CallbackType.cpp | ||
| CallbackType.h | ||
| DOMException.cpp | ||
| DOMException.h | ||
| DOMException.idl | ||
| ExceptionOr.h | ||
| Function.idl | ||
| ObservableArray.cpp | ||
| ObservableArray.h | ||
| OverloadResolution.cpp | ||
| OverloadResolution.h | ||
| Promise.cpp | ||
| Promise.h | ||
| Tracing.cpp | ||
| Tracing.h | ||
| Types.h | ||