Skip to content

ABI: implement exact private JSON stringification #226

Description

@chrisbbreuer

Goal

Implement the shared pinned Home/Bun JSON serialization pair:

  • JSC__JSValue__jsonStringify
  • JSC__JSValue__jsonStringifyFast

Parent: #134
Profile umbrella: #140
Home profile: #163
Bun profile: #164

Acceptance criteria

  • The normal export passes the unsigned indentation request through JSON.stringify semantics, including the ten-space clamp and exact pretty-print layout.
  • The fast export uses an undefined space value, producing the exact compact result without changing language semantics.
  • Both paths preserve toJSON, property enumeration order, getters, proxies, omission/null rules, BigInt/cycle errors, Unicode/lone-surrogate escaping, and selected-realm behavior.
  • A top-level non-serializable value returns an empty BunString without inventing an exception.
  • Successful results own exact Latin-1 or UTF-16 BunString storage with correct ref/deref lifetime.
  • Same-VM siblings, foreign values, invalid encodings, abrupt completion, output initialization, and first-pending-exception behavior are deterministic.
  • The combined private ABI fixture links and exercises both exports.
  • Home/Bun inventories, README/docs, and parent trackers publish the regenerated counts and green evidence.
  • Focused tests and the relevant batched ABI audits pass before closure.

Pinned reference

Bun revision 4982b91e, src/jsc/bindings/bindings.cpp, functions JSC__JSValue__jsonStringify and JSC__JSValue__jsonStringifyFast.

Completion evidence

  • Code: d345fc7b — normal indent-aware and undefined-space fast serialization with exact owned BunString output and boundary exception handling.
  • Documentation: 454782f0 — README, ABI, API, and Home integration evidence/counts.
  • Focused test: 3/3 passed, 0 skipped, 0 failed, 0 leaked.
  • Batched ABI gate: Home 212/431 implemented (219 pending), Bun 206/421 implemented (215 pending), public C 117/117 plus 216 private/support exports.
  • Consumer fixture: 211/211 symbols linked and the runtime matrix passed.
  • Benchmark report remains the isolated 1,540-sample artifact at 36a617b3; this ABI-only slice did not regenerate performance scores.

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