REFACTOR: JumpIfNotEqual -> SelectJump

This commit is contained in:
Jeremy Wall 2019-07-10 18:20:01 -05:00
parent 673cb8f8b7
commit c1f84c4861
2 changed files with 6 additions and 7 deletions

View File

@ -102,7 +102,7 @@ pub enum Op {
Jump(i32), Jump(i32),
JumpIfTrue(i32), JumpIfTrue(i32),
JumpIfFalse(i32), JumpIfFalse(i32),
JumpIfNotEqual(i32), SelectJump(i32),
// FIXME(jwall): Short circuiting operations // FIXME(jwall): Short circuiting operations
// - And(usize) // - And(usize)
// - Or(usize) // - Or(usize)
@ -184,7 +184,7 @@ impl<'a> VM<'a> {
Op::Jump(jp) => self.op_jump(*jp)?, Op::Jump(jp) => self.op_jump(*jp)?,
Op::JumpIfTrue(jp) => self.op_jump_if_true(*jp)?, Op::JumpIfTrue(jp) => self.op_jump_if_true(*jp)?,
Op::JumpIfFalse(jp) => self.op_jump_if_false(*jp)?, Op::JumpIfFalse(jp) => self.op_jump_if_false(*jp)?,
Op::JumpIfNotEqual(jp) => self.op_jump_if_not_equal(*jp)?, Op::SelectJump(jp) => self.op_select_jump(*jp)?,
Op::Module(mptr) => self.op_module(idx, *mptr)?, Op::Module(mptr) => self.op_module(idx, *mptr)?,
Op::Func(jptr) => self.op_func(idx, *jptr)?, Op::Func(jptr) => self.op_func(idx, *jptr)?,
Op::FCall => self.op_fcall()?, Op::FCall => self.op_fcall()?,
@ -230,7 +230,7 @@ impl<'a> VM<'a> {
Ok(()) Ok(())
} }
fn op_jump_if_not_equal(&mut self, jp: i32) -> Result<(), Error> { fn op_select_jump(&mut self, jp: i32) -> Result<(), Error> {
// pop field value off // pop field value off
let field_name = dbg!(self.pop())?; let field_name = dbg!(self.pop())?;
// pop search value off // pop search value off

View File

@ -16,8 +16,7 @@ use super::scope::Stack;
use super::Composite::{List, Tuple}; use super::Composite::{List, Tuple};
use super::Op::{ use super::Op::{
Add, Bang, Bind, Cp, DeRef, Div, Element, Equal, FCall, Field, Func, InitList, InitThunk, Add, Bang, Bind, Cp, DeRef, Div, Element, Equal, FCall, Field, Func, InitList, InitThunk,
InitTuple, Jump, JumpIfFalse, JumpIfNotEqual, JumpIfTrue, Module, Mul, Noop, Return, Sub, Sym, InitTuple, Jump, JumpIfFalse, JumpIfTrue, Module, Mul, Noop, Return, SelectJump, Sub, Sym, Val,
Val,
}; };
use super::Primitive::{Bool, Float, Int, Str}; use super::Primitive::{Bool, Float, Int, Str};
use super::Value::{C, P}; use super::Value::{C, P};
@ -406,11 +405,11 @@ fn test_select_short_circuit() {
vec![ vec![
Sym("field".to_owned()), // 0 // search field Sym("field".to_owned()), // 0 // search field
Sym("not_field".to_owned()), // 1 // first field to compare Sym("not_field".to_owned()), // 1 // first field to compare
JumpIfNotEqual(2), // 2 SelectJump(2), // 2
Val(Str("not our value".to_owned())), // 3 // expression for first field Val(Str("not our value".to_owned())), // 3 // expression for first field
Jump(4), // 4 Jump(4), // 4
Sym("field".to_owned()), // 5 // second field to compare Sym("field".to_owned()), // 5 // second field to compare
JumpIfNotEqual(2), // 6 SelectJump(2), // 6
Val(Int(1)), // 7 // expression for second field Val(Int(1)), // 7 // expression for second field
Jump(1), // 8 Jump(1), // 8
Bang, // 9 // default case Bang, // 9 // default case