Files
hakorune/CLAUDE_WASM_TASK.md

38 lines
1.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 reference
- `projects/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.log` from 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.console` and basic collections.
- Add a minimal test or demo comparing VM vs WASM return values for a simple program.