feat(semantics): add boolean semantics
correct references
This commit is contained in:
parent
e22410eea8
commit
bcddb7a1a2
2 changed files with 70 additions and 112 deletions
|
|
@ -10,11 +10,11 @@ where
|
|||
Signal<i64>: TrySignalCast<Signal<T>>,
|
||||
Signal<u64>: TrySignalCast<Signal<T>>,
|
||||
Signal<f64>: TrySignalCast<Signal<T>>,
|
||||
Signal<T>: std::ops::Neg<Output = Signal<T>>,
|
||||
Signal<T>: std::ops::Add<Signal<T>, Output = Signal<T>>,
|
||||
Signal<T>: std::ops::Sub<Signal<T>, Output = Signal<T>>,
|
||||
Signal<T>: std::ops::Mul<Signal<T>, Output = Signal<T>>,
|
||||
Signal<T>: std::ops::Div<Signal<T>, Output = Signal<T>>,
|
||||
for<'a> &'a Signal<T>: std::ops::Neg<Output = Signal<T>>,
|
||||
for<'a> &'a Signal<T>: std::ops::Add<&'a Signal<T>, Output = Signal<T>>,
|
||||
for<'a> &'a Signal<T>: std::ops::Sub<&'a Signal<T>, Output = Signal<T>>,
|
||||
for<'a> &'a Signal<T>: std::ops::Mul<&'a Signal<T>, Output = Signal<T>>,
|
||||
for<'a> &'a Signal<T>: std::ops::Div<&'a Signal<T>, Output = Signal<T>>,
|
||||
Signal<T>: SignalAbs,
|
||||
{
|
||||
match root {
|
||||
|
|
@ -24,32 +24,32 @@ where
|
|||
NumExpr::IntVar { name } => trace.get::<i64>(name.as_str()).unwrap().try_cast(),
|
||||
NumExpr::UIntVar { name } => trace.get::<u64>(name.as_str()).unwrap().try_cast(),
|
||||
NumExpr::FloatVar { name } => trace.get::<f64>(name.as_str()).unwrap().try_cast(),
|
||||
NumExpr::Neg { arg } => eval_num_expr(arg, trace).map(|sig| -sig),
|
||||
NumExpr::Neg { arg } => eval_num_expr(arg, trace).map(|sig| -&sig),
|
||||
NumExpr::Add { args } => {
|
||||
let mut ret: Signal<T> = Signal::constant(0i64).try_cast()?;
|
||||
let mut ret: Signal<T> = Signal::<T>::zero();
|
||||
for arg in args.iter() {
|
||||
let arg = eval_num_expr(arg, trace)?;
|
||||
ret = ret + arg;
|
||||
ret = &ret + &arg;
|
||||
}
|
||||
Ok(ret)
|
||||
}
|
||||
NumExpr::Sub { lhs, rhs } => {
|
||||
let lhs = eval_num_expr(lhs, trace)?;
|
||||
let rhs = eval_num_expr(rhs, trace)?;
|
||||
Ok(lhs - rhs)
|
||||
Ok(&lhs - &rhs)
|
||||
}
|
||||
NumExpr::Mul { args } => {
|
||||
let mut ret: Signal<T> = Signal::constant(1i64).try_cast()?;
|
||||
let mut ret: Signal<T> = Signal::<T>::one();
|
||||
for arg in args.iter() {
|
||||
let arg = eval_num_expr(arg, trace)?;
|
||||
ret = ret * arg;
|
||||
ret = &ret * &arg;
|
||||
}
|
||||
Ok(ret)
|
||||
}
|
||||
NumExpr::Div { dividend, divisor } => {
|
||||
let dividend = eval_num_expr(dividend, trace)?;
|
||||
let divisor = eval_num_expr(divisor, trace)?;
|
||||
Ok(dividend / divisor)
|
||||
Ok(÷nd / &divisor)
|
||||
}
|
||||
NumExpr::Abs { arg } => {
|
||||
let arg = eval_num_expr(arg, trace)?;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue