From ece1f7854ba9b77110be660834cf69b567defc65 Mon Sep 17 00:00:00 2001 From: Brian Cully Date: Mon, 15 Dec 2025 11:23:07 -0500 Subject: compiler: add support for say, heading, velocity, and doppler --- src/forth/compiler.rs | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) (limited to 'src/forth/compiler.rs') diff --git a/src/forth/compiler.rs b/src/forth/compiler.rs index 2e301b3..c9652d9 100644 --- a/src/forth/compiler.rs +++ b/src/forth/compiler.rs @@ -233,6 +233,13 @@ impl<'a> Compiler<'a> { "and" => self.bc_push(OpCode::And, anno), "or" => self.bc_push(OpCode::Or, anno), "xor" => self.bc_push(OpCode::Xor, anno), + + "say" => self.bc_push(OpCode::Say, anno), + "head" => self.bc_push(OpCode::Heading, anno), + "sethead" => self.bc_push(OpCode::SetHeading, anno), + "vel" => self.bc_push(OpCode::Velocity, anno), + "setvel" => self.bc_push(OpCode::SetVelocity, anno), + "doppler" => self.bc_push(OpCode::Doppler, anno), other => return Err(CompileError::UnknownWord(String::from(other))), } } @@ -328,6 +335,48 @@ mod tests { assert_eq!(main, vec![OpCode::Xor]); } + #[test] + fn say_opcode() { + let comp = compiler_for("say\n"); + let main = &comp.wordlist.0[0]; + assert_eq!(main, vec![OpCode::Say]); + } + + #[test] + fn heading_opcode() { + let comp = compiler_for("head\n"); + let main = &comp.wordlist.0[0]; + assert_eq!(main, vec![OpCode::Heading]); + } + + #[test] + fn setheading_opcode() { + let comp = compiler_for("sethead\n"); + let main = &comp.wordlist.0[0]; + assert_eq!(main, vec![OpCode::SetHeading]); + } + + #[test] + fn velocity_opcode() { + let comp = compiler_for("vel\n"); + let main = &comp.wordlist.0[0]; + assert_eq!(main, vec![OpCode::Velocity]); + } + + #[test] + fn setvelocity_opcode() { + let comp = compiler_for("setvel\n"); + let main = &comp.wordlist.0[0]; + assert_eq!(main, vec![OpCode::SetVelocity]); + } + + #[test] + fn doppler_opcode() { + let comp = compiler_for("doppler\n"); + let main = &comp.wordlist.0[0]; + assert_eq!(main, vec![OpCode::Doppler]); + } + #[test] fn def_word() { let comp = compiler_for(": add2 2 + ; 3 add2\n"); -- cgit v1.3