diff options
| author | Brian Cully <bjc@spork.org> | 2025-12-15 11:23:07 -0500 |
|---|---|---|
| committer | Brian Cully <bjc@spork.org> | 2025-12-15 11:23:07 -0500 |
| commit | ece1f7854ba9b77110be660834cf69b567defc65 (patch) | |
| tree | 98ee5b5e8a156ec66e14ef0773f8fe1502541ef1 | |
| parent | ffadffdcf944ec198bdc44bd9bbbf8ab19ef7485 (diff) | |
| download | automathon-ece1f7854ba9b77110be660834cf69b567defc65.tar.gz automathon-ece1f7854ba9b77110be660834cf69b567defc65.zip | |
compiler: add support for say, heading, velocity, and doppler
| -rw-r--r-- | src/forth/compiler.rs | 49 |
1 files changed, 49 insertions, 0 deletions
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))), } } @@ -329,6 +336,48 @@ mod tests { } #[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"); let main = &comp.wordlist.0[0]; |
