Extend the engine to cover the widely-deployed post-MVP proposals that modern Rust/Emscripten toolchains emit by default. Depends on the interpreter, JS API, and runtime issues.
Scope:
- Sign-extension operators (RFC: sign-extension-ops): i32.extend8_s, i32.extend16_s, i64.extend8_s, i64.extend16_s, i64.extend32_s.
- Non-trapping float-to-int (RFC: nontrapping-float-to-int-conversions): i32.trunc_sat_f32_s/u, i32.trunc_sat_f64_s/u, i64.trunc_sat_f32_s/u, i64.trunc_sat_f64_s/u (some of these may already exist in the numeric interpreter — link or land them here, but be explicit about where they live).
- Multi-value (RFC: multi-value): blocks/loops/ifs and function signatures returning multiple values; validator already accepted these per the validator issue, this issue lands the runtime path.
- Reference types (RFC: reference-types): funcref/externref support throughout — globals, tables, locals, params, returns; ref.null, ref.is_null, ref.func; table.copy, table.init, elem.drop; instructions to grow/get/set tables of any reference type.
- Bulk memory operations (RFC: bulk-memory-operations): memory.init, memory.copy, memory.fill, data.drop with passive data segments.
Acceptance criteria:
- Unit tests for each new instruction, including trap conditions (memory.copy bounds, table.init out of range, elem.drop double-drop semantics).
- The parser, validator, and interpreter all line up — invalid combinations are rejected at validation, not at runtime.
- Existing real-world wasm fixtures (e.g., wasm-bindgen output) load and run successfully.
- cargo clippy --workspace -- -D warnings passes; 100% safe Rust; zero external dependencies.