ReviewOS

zig-utils/zig-js

ABI: implement exact private typeof string projection

#220
Closed chris opened this 9 days ago ·
9 days ago

Parent: #134 Profile umbrella: #140 Home inventory: #163 Bun inventory: #164 Builds on: #219

Implement the pinned shared private-JSC export:

  • JSC__jsTypeStringForValue

Acceptance criteria:

  • Return a valid VM-owned private JSString cell for every accepted EncodedJSValue.
  • Match JavaScriptCore typeof strings exactly for undefined, null, booleans, numbers, strings, symbols, BigInts, ordinary objects, and callable objects.
  • Report undefined for [[IsHTMLDDA]] objects and object for null and non-callable objects.
  • Reject foreign-VM and invalid cells without dereferencing them or modifying pending exception state.
  • Preserve an already-pending exception and avoid invoking user code.
  • Focused tests cover every classification, returned JSString contents/length/encoding, VM ownership, invalid/foreign cells, and both Home/Bun profile audits.
  • Extend the Home consumer fixture and publish exact inventory, ABI documentation, README, and parent-tracker counts.
  • Leave benchmark scores unchanged unless a benchmark path is actually rerun.

Completed evidence

Implemented on main in a985fad9; the pinned inventories, ABI documentation, and README scorecard were published in cb4f50b4. The export now returns one of eight exact VM-owned private JSString cells—undefined, boolean, number, string, symbol, bigint, function, or object—with stable identity across sibling realms and isolation across VMs. Null, callable [[IsHTMLDDA]], invalid encodings, foreign cells, and already-pending exceptions follow the pinned JavaScriptCore behavior without invoking user code.

The intentionally batched verification passed 15/15: focused tests passed 3/3 with zero leaks, the Home fixture linked and exercised 200/200 symbols, Home is 201/431 (230 pending), Bun core is 195/421 (226 pending), and the public audit reports 117 public, 19 extensions, and 205 private/support exports. Benchmark scores remain unchanged because no benchmark path was affected or rerun.

9 days ago

Completed on main in a985fad9, with inventories and documentation in cb4f50b4. All acceptance criteria are checked; the recorded batch passed 15/15 with zero leaks, fixture 200/200, Home 201/431, Bun 195/421, and 205 private/support exports.

Sign in to comment on this issue.