summaryrefslogtreecommitdiffstats
path: root/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib.rs')
-rwxr-xr-xsrc/lib.rs57
1 files changed, 54 insertions, 3 deletions
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<String>);
+
+#[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]
@@ -26,6 +40,43 @@ pub fn tick() {
}
#[wasm_bindgen]
+pub fn ip() -> ExportedInstructionPointer {
+ ExportedInstructionPointer {
+ word: 0,
+ offset: 0,
+ }
+}
+
+#[wasm_bindgen]
+pub fn wordlist() -> Vec<ExportedByteCode> {
+ 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");
}