Skip to content

Commit ed74d61

Browse files
committed
docs(roadmap): reference-test staging + GC-safety review (re hermes-windows#321)
1 parent 17316b7 commit ed74d61

1 file changed

Lines changed: 17 additions & 0 deletions

File tree

Tests/NodeApi/NAPI_VERSION_ROADMAP.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,23 @@ run the suite per engine → implement the JSC/(Chakra) gaps → green.
9191
`*` stretch. Separately: the worklets/worker goal needs **threadsafe functions** — a runtime-layer
9292
(`node_api.h`, `NAPI_HAS_THREADS 1`) axis not covered by the engine-only suite; track independently.
9393

94+
**Reference/finalizer test staging (measured at v5).** Of the vendored reference/finalizer/wrap dirs, only
95+
`test_reference_double_free` is v5-clean and is enabled now (green on macOS/JSC incl. ASan, and Android/V8); its
96+
`test_wrap.js` is quarantined (JSC `napi_remove_wrap` on an unwrapped object returns `napi_invalid_arg` — it
97+
does not crash; separate fix). The rest are gated by symbols our v5 pin doesn't export and enable with the
98+
bump: `test_reference``node_api_symbol_for` (v9, B4); `test_finalizer/` & `6_object_wrap`
99+
`napi_get_instance_data` (v6, B1) + `node_api_basic_env`/`node_api_post_finalizer` (v9, B4). `test_finalizer`
100+
also surfaced a JSC finalizer-delivery timing case (`mustCall(1)`→0) to confirm at B1.
101+
102+
**GC-safety (re upstream [hermes-windows#321](https://github.com/microsoft/hermes-windows/pull/321)).** That
103+
weak-ref-over-Proxy moving-GC bug is **not present here**. V8 uses `v8::Persistent` (an immediate, auto-relocated
104+
GC root). JSC keeps the to-be-referenced object in the `value` argument on the C stack across the reference's
105+
finalizer-setup allocation, so JSC's **conservative stack scan pins it against collection and relocation** — the
106+
creation-time window is closed regardless of whether the collector moves cells — and weak liveness is an
107+
object-id check, not a bare-pointer deref. Chakra is non-moving with a nullptr-returning weak read. Empirically,
108+
`test_reference_double_free` runs **clean under ASan on the modern system JSC** (no use-after-free). There is no
109+
weak-ref-over-Proxy case in the suite yet; add one at the v9 tier.
110+
94111
## Test-suite sourcing strategy
95112

96113
- **Now (this PR):** vendored copy of vmoroz's hermes-windows `unittests/NodeApi/` (engine-layer, v8-capable

0 commit comments

Comments
 (0)