v0.66.0
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/finallyregions now drive correctly acrossawait— 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). Generatoryield*delegation forwards abrupt completions with dedicated self-suspend states (#2864); async-generator abrupt completion + dynamicIteratorResultreads flip a ~280-testyield*-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/.fromstatics (#3177), nativeWeakMap/WeakSetiterable constructors (#3572), well-formed surrogate escaping inJSON.stringify(#3569), host-freeinstanceofforDate/RegExp/Promise(#1325),Array.isArraycorrectly excluding byte-carriers (#3562), restored basic generators (#680),Number('+0x…')→NaNparsing (#3570),Set/Map.forEachnon-callable guards (#3573), and array expando own-properties on$Vecreceivers (#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
TypeErrorinstead 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/js2and the unscopedjs2wasmcompatibility package are both published at0.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