From 12c06171b3f94696e852c3910c116f56cbfc5b64 Mon Sep 17 00:00:00 2001 From: Brian Cully Date: Sat, 23 Aug 2025 08:51:24 -0400 Subject: wip: pass interp between js and rust --- src/lib.rs | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 54 insertions(+), 3 deletions(-) (limited to 'src/lib.rs') diff --git a/src/lib.rs b/src/lib.rs index f4fc294..ddb87fd 100755 --- a/src/lib.rs +++ b/src/lib.rs @@ -5,9 +5,23 @@ use wasm_bindgen::prelude::*; pub mod forth; #[wasm_bindgen] -extern { - #[wasm_bindgen(js_namespace = console)] - fn debug(s: &str); +pub struct ExportedInstructionPointer { + pub word: usize, + pub offset: usize, +} + +#[wasm_bindgen] +pub struct ExportedByteCode(Vec); + +#[wasm_bindgen] +impl ExportedByteCode { + pub fn len(&self) -> usize { + self.0.len() + } + + pub fn at(&self, index: usize) -> String { + self.0[index].clone() + } } #[wasm_bindgen] @@ -25,6 +39,43 @@ pub fn tick() { info!("executing single instruction"); } +#[wasm_bindgen] +pub fn ip() -> ExportedInstructionPointer { + ExportedInstructionPointer { + word: 0, + offset: 0, + } +} + +#[wasm_bindgen] +pub fn wordlist() -> Vec { + vec![ + ExportedByteCode(vec!["NOP".to_string(), "2".to_string(), "DUP".to_string()]), + ] +} + +#[wasm_bindgen] +pub struct ExportedInterp { + i: forth::interp::Interp, +} + +#[wasm_bindgen] +impl ExportedInterp { + fn from_interp(i: forth::interp::Interp) -> Self { + Self { i } + } + + pub fn foo(&self) { + info!("in interp::foo: {:?}", self.i.wordlist); + } +} + +#[wasm_bindgen] +pub fn interp() -> ExportedInterp { + let i = forth::interp::Interp::new(forth::interp::WordList(vec![])); + ExportedInterp::from_interp(i) +} + #[wasm_bindgen] pub fn run() { info!("running to completion"); -- cgit v1.3