From 0efb15a9eb706896cdabb9ca5d2b0c295c2dffcf Mon Sep 17 00:00:00 2001 From: Brian Cully Date: Sun, 24 Aug 2025 14:22:48 -0400 Subject: rename parser → compiler, interp → vm MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit reflects reality better --- src/lib.rs | 78 +++++++++++++++++++++++++++++++------------------------------- 1 file changed, 39 insertions(+), 39 deletions(-) (limited to 'src/lib.rs') diff --git a/src/lib.rs b/src/lib.rs index bb8e638..60a406f 100755 --- a/src/lib.rs +++ b/src/lib.rs @@ -10,8 +10,8 @@ pub struct ExportedInstructionPointer { pub offset: usize, } -impl From<&forth::interp::InstructionPointer> for ExportedInstructionPointer { - fn from(ip: &forth::interp::InstructionPointer) -> Self { +impl From<&forth::vm::InstructionPointer> for ExportedInstructionPointer { + fn from(ip: &forth::vm::InstructionPointer) -> Self { Self { word: ip.word, offset: ip.offset } } } @@ -22,8 +22,8 @@ impl From<&forth::interp::InstructionPointer> for ExportedInstructionPointer { pub struct ExportedByteCode(Vec); impl ExportedByteCode { - fn tr_op(op: &forth::interp::OpCode) -> String { - use forth::interp::OpCode::*; + fn tr_op(op: &forth::vm::OpCode) -> String { + use forth::vm::OpCode::*; let s = match op { If(t, None) => format!("If({}, none)", t), If(t, Some(f)) => format!("If({}, {})", t, f), @@ -35,8 +35,8 @@ impl ExportedByteCode { } } -impl From<&forth::interp::ByteCode> for ExportedByteCode { - fn from(v: &forth::interp::ByteCode) -> Self { +impl From<&forth::vm::ByteCode> for ExportedByteCode { + fn from(v: &forth::vm::ByteCode) -> Self { Self(v.iter().map(Self::tr_op).collect()) } } @@ -60,8 +60,8 @@ pub struct ExportedAnnotation { pub end: usize, } -impl From<&forth::parser::Annotation> for ExportedAnnotation { - fn from(v: &forth::parser::Annotation) -> Self { +impl From<&forth::compiler::Annotation> for ExportedAnnotation { + fn from(v: &forth::compiler::Annotation) -> Self { Self { start: v.loc.0, end: v.loc.1, @@ -92,65 +92,65 @@ impl ExportedWordAnnotations { } #[wasm_bindgen] -pub struct ExportedInterp { +pub struct ExportedVM { annos: Vec, - i: Option, + vm: Option, } #[wasm_bindgen] -impl ExportedInterp { +impl ExportedVM { fn new() -> Self { - Self { annos: vec![], i: None } + Self { annos: vec![], vm: None } } pub fn compile(&mut self, text: &str) -> bool { - let mut p = forth::parser::Parser::new(&text); - if let Err(e) = p.parse() { - error!("couldn't parse program text: {:?}", e); + let mut comp = forth::compiler::Compiler::new(&text); + if let Err(e) = comp.compile() { + error!("couldn't compile program text: {:?}", e); return false } self.annos = - p.annotations.iter() + comp.annotations.iter() .map(|word_anno| -> ExportedWordAnnotations { word_anno.into_iter().map(|a| a.into()).collect() }) .collect(); - let interp = forth::interp::Interp::new(p.wordlist); - let _ = self.i.insert(interp); + let vm = forth::vm::VM::new(comp.wordlist); + let _ = self.vm.insert(vm); true } pub fn tick(&mut self) -> Result { - let Some(interp) = &mut self.i else { - return Err("no interpreter".to_string()) + let Some(vm) = &mut self.vm else { + return Err("no vm".to_string()) }; - interp.tick().or_else(|err| Err(format!("runtime error: {:?}", err))) + vm.tick().or_else(|err| Err(format!("runtime error: {:?}", err))) } pub fn run(&mut self) -> Result { - let Some(interp) = &mut self.i else { - return Err("no interpreter".to_string()) + let Some(vm) = &mut self.vm else { + return Err("no vm".to_string()) }; - interp.ip.word = 0; - interp.ip.offset = 0; - interp.run().or_else(|err| Err(format!("runtime error: {:?}", err))) + vm.ip.word = 0; + vm.ip.offset = 0; + vm.run().or_else(|err| Err(format!("runtime error: {:?}", err))) } pub fn stack(&self) -> Vec { - let Some(interp) = &self.i else { + let Some(vm) = &self.vm else { return vec![] }; - return interp.stack.0.clone() + return vm.stack.0.clone() } pub fn wordlist(&self) -> Vec { - let Some(interp) = &self.i else { + let Some(vm) = &self.vm else { return vec![] }; - interp.wordlist.iter().map(|bc| bc.into()).collect() + vm.wordlist.iter().map(|bc| bc.into()).collect() } pub fn annotations(&self) -> Vec { @@ -162,33 +162,33 @@ impl ExportedInterp { } pub fn callstack(&self) -> Vec { - let Some(interp) = &self.i else { + let Some(vm) = &self.vm else { return vec![] }; - interp.callstack.0.iter() + vm.callstack.0.iter() .map(|ip| ip.into()) .collect() } pub fn ip(&self) -> ExportedInstructionPointer { - let Some(interp) = &self.i else { + let Some(vm) = &self.vm else { return ExportedInstructionPointer { word: 0, offset: 0 } }; - (&interp.ip).into() + (&vm.ip).into() } pub fn reset_ip(&mut self) { - let Some(interp) = &mut self.i else { + let Some(vm) = &mut self.vm else { return; }; - interp.ip.word = 0; - interp.ip.offset = 0; + vm.ip.word = 0; + vm.ip.offset = 0; } } #[wasm_bindgen] -pub fn make_interp() -> ExportedInterp { - ExportedInterp::new() +pub fn make_vm() -> ExportedVM { + ExportedVM::new() } #[wasm_bindgen(start)] -- cgit v1.3