use reifydb_type::value::Value;
use crate::{
Result,
vm::{scalar, stack::Variable, vm::Vm},
};
impl Vm {
pub(crate) fn exec_binop(&mut self, op: fn(Value, Value) -> Result<Value>) -> Result<()> {
let right = self.pop_value()?;
let left = self.pop_value()?;
self.stack.push(Variable::scalar(op(left, right)?));
Ok(())
}
pub(crate) fn exec_negate(&mut self) -> Result<()> {
let value = self.pop_value()?;
self.stack.push(Variable::scalar(scalar::scalar_negate(value)?));
Ok(())
}
pub(crate) fn exec_logic_not(&mut self) -> Result<()> {
let value = self.pop_value()?;
self.stack.push(Variable::scalar(scalar::scalar_not(&value)));
Ok(())
}
}