diff --git a/src/functions/mult.rs b/src/functions/mult.rs index 9d61189..b758828 100644 --- a/src/functions/mult.rs +++ b/src/functions/mult.rs @@ -565,6 +565,83 @@ pub fn mult( (Div(s1, s2), Null) => Div(s1.clone(), s2.clone()), + (Call(x, y), Call(a, b)) => Mul( + Box::from(Call(x.clone(), y.clone())), + Box::from(Call(a.clone(), b.clone())), + ), + + (Call(x, y), Null) => Call(x.clone(), y.clone()), + + (Null, Call(x, y)) => Call(x.clone(), y.clone()), + + (Call(x, y), Int(i)) => Mul(Box::from(Call(x.clone(), y.clone())), Box::from(Int(i))), + + (Call(x, y), Float(i)) => Mul(Box::from(Call(x.clone(), y.clone())), Box::from(Float(i))), + + (Call(x, y), Rational(i)) => Mul( + Box::from(Call(x.clone(), y.clone())), + Box::from(Rational(i)), + ), + + (Int(i), Call(x, y)) => Mul(Box::from(Call(x.clone(), y.clone())), Box::from(Int(i))), + + (Float(i), Call(x, y)) => Mul(Box::from(Call(x.clone(), y.clone())), Box::from(Float(i))), + + (Rational(i), Call(x, y)) => Mul( + Box::from(Call(x.clone(), y.clone())), + Box::from(Rational(i)), + ), + + (Call(x, y), Identifier(a)) => Mul( + Box::from(Call(x.clone(), y.clone())), + Box::from(Var(Box::from(Int(1)), 1, a.clone())), + ), + + (Identifier(a), Call(x, y)) => Mul( + Box::from(Var(Box::from(Int(1)), 1, a.clone())), + Box::from(Call(x.clone(), y.clone())), + ), + + (Call(x, y), Var(a, b, c)) => Mul( + Box::from(Call(x.clone(), y.clone())), + Box::from(Var(a.clone(), b, c.clone())), + ), + + (Var(a, b, c), Call(x, y)) => Mul( + Box::from(Var(a.clone(), b, c.clone())), + Box::from(Call(x.clone(), y.clone())), + ), + + (Call(x, y), Plus(a, b)) => Mul( + Box::from(Plus(a.clone(), b.clone())), + Box::from(Call(x.clone(), y.clone())), + ), + + (Plus(a, b), Call(x, y)) => Mul( + Box::from(Call(x.clone(), y.clone())), + Box::from(Plus(a.clone(), b.clone())), + ), + + (Call(x, y), Mul(a, b)) => Mul( + Box::from(Call(x.clone(), y.clone())), + Box::from(Mul(a.clone(), b.clone())), + ), + + (Mul(a, b), Call(x, y)) => Mul( + Box::from(Mul(a.clone(), b.clone())), + Box::from(Call(x.clone(), y.clone())), + ), + + (Call(x, y), Div(a, b)) => Mul( + Box::from(Call(x.clone(), y.clone())), + Box::from(Div(a.clone(), b.clone())), + ), + + (Div(a, b), Call(x, y)) => Mul( + Box::from(Div(a.clone(), b.clone())), + Box::from(Call(x.clone(), y.clone())), + ), + _ => Identifier("@Those two values are incompatible with the * operator".to_string()), } }