ReviewOS

zig-utils/zig-js

ABI: implement exact core structural equality

#230
Closed chris opened this 11 days ago ·
11 days ago

Parent: #229

Goal

Implement the shared pinned structural comparison engine plus:

  • JSC__JSValue__deepEquals
  • JSC__JSValue__strictDeepEquals

Acceptance

  • Pairwise cycle detection with exact alias/cycle-shape matching and bounded-stack failure.
  • SameValue primitive handling and ordinary enumerable string/Symbol property traversal.
  • Strict versus non-strict prototype, missing/undefined, sparse-hole, and property-count distinctions.
  • Exact Array, ordinary/class/null-prototype object, boxed primitive, function, Date, RegExp, Error/cause, Map, Set, ArrayBuffer, DataView, and numeric TypedArray behavior.
  • Detached/shared buffers and non-strict numeric versus strict bitwise float comparison.
  • Getter/proxy exceptions, same-VM siblings, foreign rejection, OOM cleanup, and first-wins pending exceptions.
  • Focused matrices, fixture/inventory wiring, batched audits, README/docs evidence, small commits on origin/main.
11 days ago

Implemented and published on origin/main.

Evidence:

  • code: 0b025285 (feat(abi): implement exact core deep equality (#230))
  • documentation: 9d511f93 (docs(abi): publish core deep-equality evidence (#230))
  • focused matrix: 3/3 passed, 0 skipped, 0 failed, 0 leaked
  • Home fixture: 216/216 symbols linked; runtime matrix passed
  • Home profile: 217/431 implemented, 214 pending
  • Bun core: 211/421 implemented, 210 pending
  • public audit: 117/117 public, 19 extensions, 221 private/support exports

The committed matrix covers SameValue primitives, strict/non-strict missing and hole semantics, calculated classes, boxed strings/functions, cycle correspondence and bounded recursion, Symbols, proxy/getter observability and exceptions, Map/Set, Date/RegExp/Error/cause, ArrayBuffer/DataView/numeric TypedArrays, sibling realms, foreign rejection, and first-wins pending exceptions. The benchmark artifact remains 36a617b3 because this slice changes only the private ABI boundary.

Sign in to comment on this issue.