ladybird/Libraries/LibJS/Rust/src/bytecode
Andreas Kling 879ac36e45 LibJS: Cache stable for-in iteration at bytecode sites
Cache the flattened enumerable key snapshot for each `for..in` site and
reuse a `PropertyNameIterator` when the receiver shape, dictionary
generation, indexed storage kind and length, prototype chain
validity, and magical-length state still match.

Handle packed indexed receivers as well as plain named-property
objects. Teach `ObjectPropertyIteratorNext` in `asmint.asm` to return
cached property values directly and to fall back to the slow iterator
logic when any guard fails.

Treat arrays' hidden non-enumerable `length` property as a visited
name for for-in shadowing, and include the receiver's magical-length
state in the cache key so arrays and plain objects do not share
snapshots.

Add `test-js` and `test-js-bytecode` coverage for mixed numeric and
named keys, packed receiver transitions, re-entry, iterator reuse, GC
retention, array length shadowing, and same-site cache reuse.
2026-04-10 15:12:53 +02:00
..
basic_block.rs
codegen.rs LibJS: Cache stable for-in iteration at bytecode sites 2026-04-10 15:12:53 +02:00
ffi.rs LibJS: Cache stable for-in iteration at bytecode sites 2026-04-10 15:12:53 +02:00
generator.rs LibJS: Cache stable for-in iteration at bytecode sites 2026-04-10 15:12:53 +02:00
instruction.rs
mod.rs
operand.rs LibJS/Rust: Cargo fmt on all source files 2026-02-24 16:35:51 +01:00