summaryrefslogtreecommitdiffstats
path: root/src/forth/compiler.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/forth/compiler.rs')
-rw-r--r--src/forth/compiler.rs16
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];