Skip to content

ABI: implement exact private typeof string projection #220

Description

@chrisbbreuer

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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions