diff options
Diffstat (limited to 'src/forth')
| -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]; |
