diff options
Diffstat (limited to 'src/forth/compiler.rs')
| -rw-r--r-- | src/forth/compiler.rs | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/forth/compiler.rs b/src/forth/compiler.rs index 97e94a9..89964e1 100644 --- a/src/forth/compiler.rs +++ b/src/forth/compiler.rs @@ -199,6 +199,8 @@ impl<'a> Compiler<'a> { "/" => self.bc_push(OpCode::Div, anno), "dup" => self.bc_push(OpCode::Dup, anno), "drop" => self.bc_push(OpCode::Drop, anno), + "rot" => self.bc_push(OpCode::Rot, anno), + "swap" => self.bc_push(OpCode::Swap, anno), "=" => self.bc_push(OpCode::EQ, anno), ">" => self.bc_push(OpCode::GT, anno), ">=" => self.bc_push(OpCode::GTE, anno), @@ -258,6 +260,20 @@ mod tests { } #[test] + fn rot_opcode() { + let comp = compiler_for("rot\n"); + let main = &comp.wordlist.0[0]; + assert_eq!(main, vec![OpCode::Rot]); + } + + #[test] + fn swap_opcode() { + let comp = compiler_for("swap\n"); + let main = &comp.wordlist.0[0]; + assert_eq!(main, vec![OpCode::Swap]); + } + + #[test] fn def_word() { let comp = compiler_for(": add2 2 + ; 3 add2\n"); let main = &comp.wordlist.0[0]; |
