Parent: #475
Problem
Intl.NumberFormat validates and normalizes its user-visible option bag once at construction, but every format/formatToParts call then re-enters the generic property lookup and numeric/string conversion machinery for the same engine-owned null-prototype record. The frozen representative_intl family performs 360,000 steady calls per full single-lane row and currently takes roughly 725 ms median on the maintained host, making repeated internal-option decoding a distinct steady-state bottleneck rather than formatter construction work.
Scope
- Add focused construction and steady-format controls that distinguish default, fixed-fraction, locale variant, and uncommon option combinations without weakening the frozen representative row.
- Compile the validated NumberFormat state into an immutable, formatter-owned native record after every observable option getter/coercion has run in ECMA-402 order.
- Make
format,formatToParts, range formatting, andresolvedOptionsconsume one authoritative resolved state; do not leave diverging object/native representations. - Keep ownership realm-local and bounded, with correct GC finalization and safe read-only publication to shared-realm Threads.
No-workaround rules
- No locale-specific benchmark branch, workload recognition, skipped option lookup/coercion, ICU/system-JSC delegation, mutable process-global cache, or hidden record that can diverge from
resolvedOptions. - Preserve legacy Intl receiver unwrapping, subclass/newTarget behavior, numbering systems, rounding, grouping, sign, currency, unit, notation, and exact error/getter ordering.
Acceptance
- Focused rows freeze exact checksums and measure construction separately from steady calls.
- Exact-parent paired evidence covers the focused rows and the frozen
representative_intlbase/variant. - Intl.NumberFormat test262 is nonzero with zero regressions; focused semantic tests cover uncommon option combinations and constructor getter order.
- OOM, bounded-heap/GC movement, no-GIL shared reads, TSan, and full unit gates pass.
- Allocation ownership is reclaimed when a formatter dies; no unbounded cache or process-global mutable state is introduced.