1.7 KiB
1.7 KiB
Title: WASM Backend v2 (Phase 12) – Minimal Handoff
Goal
- Implement a new
src/backend/wasm_v2/backend that aligns with the unified vtable/slot dispatch model, without touching MIR-level semantics.
Scope
- Allowed:
src/backend/wasm_v2/*(mod.rs, unified_dispatch.rs, vtable_codegen.rs)src/backend/wasm/*read-only for referenceprojects/nyash-wasm/*(demo HTML/JS harness)- Documentation under
docs/backend/wasm/*.md
- Avoid (to keep merge easy):
- MIR layer (no plugin-name hardcoding)
src/runtime/*core (HostHandle/host_api/extern are assumed stable)- JIT/VM files unless behind feature/cfg guards
Design Constraints
- ExternCall and BoxCall remain separate at the MIR/semantics level.
- At lower layers, converge onto a unified host-call shim when needed (same C symbols as VM/JIT).
- Console/print: use
ExternCall(env.console.log); do not move to BoxCall. - vtable/slots must align with
src/runtime/type_registry.rs(see Array/Map/String slots).
Targets & Flags
- Target:
wasm32-unknown-unknown - Feature:
--features wasm-backend - Use
#[cfg(feature = "wasm-backend")]and/or#[cfg(target_arch = "wasm32")]to isolate new code.
Acceptance (Minimal)
- Build succeeds for non-wasm targets (no regressions).
- wasm_v2 compiles behind
--features wasm-backend(even as stubs). - A demo harness can call
env.console.logfrom WASM and produce a message. - (Nice to have) Array/Map len/size/has/get stubs go through unified dispatch.
Next Steps (Optional)
- Implement unified dispatch bridge to JS host for
env.consoleand basic collections. - Add a minimal test or demo comparing VM vs WASM return values for a simple program.