Implements issue 3mhn3okf7ld2e — JS Built-in: Map and Set collections.
Summary #
- Map: Constructor (optionally from iterable of [key, value] pairs), prototype methods (set, get, has, delete, clear, forEach, keys, values, entries), size property, SameValueZero key equality, insertion order preserved
- Set: Constructor (optionally from iterable), prototype methods (add, has, delete, clear, forEach, keys, values, entries), size property, SameValueZero value equality, insertion order preserved
- WeakMap: Constructor, set/get/has/delete methods, keys must be objects (TypeError on primitives)
- WeakSet: Constructor, add/has/delete methods, values must be objects (TypeError on primitives)
- Internal storage uses indexed entry objects on the GC heap with deleted-slot markers for stable insertion-order iteration
- Removed Map/Set from test262 unsupported features list
Test plan #
- 30 new VM integration tests covering:
- Map: basic get/set, size, has, delete, clear, overwrite, get missing, chaining, NaN key, object key, constructor from pairs, keys/values/entries, insertion order
- Set: basic add, has, delete, clear, uniqueness, chaining, NaN, constructor from array, values, entries, insertion order
- WeakMap: basic set/get, has/delete, rejects primitive keys
- WeakSet: basic add/has, delete, rejects primitives
- All 442 JS tests pass, full workspace tests pass
cargo clippy --workspace -- -D warningscleancargo fmt --all --checkclean