Skip to content

v0.66.0

Choose a tag to compare

@github-actions github-actions released this 24 Jul 18:07

Async control flow, standalone semantics, and an honest Test262 floor

v0.66.0 lands the async/generator IR machinery for try/catch/finally across await, a broad wave of standalone (host-free) correctness, an honest de-inflation of the standalone Test262 floor, continued single-coercion-engine consolidation, and more CI/quality hardening.

Highlights

  • Async & generator IR machinery. try/catch/finally regions now drive correctly across await — catch-around-await drives, return-through-finally with sibling try/catch, the combined try/catch/finally two-region model, and nested try/catch regions (#2906). Generator yield* delegation forwards abrupt completions with dedicated self-suspend states (#2864); async-generator abrupt completion + dynamic IteratorResult reads flip a ~280-test yield*-error cohort (#3538); async-function rejections now carry the thrown value (#3542).

  • Standalone (host-free) semantics. A broad wave of pure-Wasm correctness with no JS-host imports: %TypedArray%.of/.from statics (#3177), native WeakMap/WeakSet iterable constructors (#3572), well-formed surrogate escaping in JSON.stringify (#3569), host-free instanceof for Date/RegExp/Promise (#1325), Array.isArray correctly excluding byte-carriers (#3562), restored basic generators (#680), Number('+0x…')NaN parsing (#3570), Set/Map.forEach non-callable guards (#3573), and array expando own-properties on $Vec receivers (#3537).

  • Codegen correctness. Module-global writes now coerce to their slot type, fixing object-literal runtime-computed-key and for-of array-rest desyncs that produced invalid Wasm (#3024); an unmatched typed-callable direct-call throws a catchable TypeError instead of an uncatchable null-deref trap (#3460); closure-value bindings box on store rather than retro-narrowing (#3534).

  • Honest Test262 floor (F1). The standalone floor was de-inflated: ~3,545 vacuous passes — assert methods that never fired because standalone closures couldn't carry own properties — now fire and honestly fail, cohort-routed to trackers, at oracle version 10. Public host conformance is unchanged (#3468).

  • Single coercion engine. The four independently-maintained, semantically-diverging coercion matrices continue consolidating — the copy-pasted guarded-ref-cast idiom is deduplicated into one helper (#1917).

  • CI & quality hardening. A done-status integrity gate catches issues marked done whose tests still fail (#3474); a per-function LOC-ceiling ratchet governs god-function growth (#3400); a deterministic pre-merge compile-time budget gate (#3437); and the standalone unclassified-root-cause gate is ratcheted to zero (#3439).

  • Verified package pairing. @loopdive/js2 and the unscoped js2wasm compatibility package are both published at 0.66.0, and the proxy depends exactly on @loopdive/js2@0.66.0.


284 commits since v0.65.0 — 49 fixes, 12 features, 12 refactors. Test262 (JS-host lane): 30,364 / 43,102 (70.4%).

Full changelog: v0.65.0...v0.66.0