diff --git a/src/operator/mod.rs b/src/operator/mod.rs index e367546..e0ff92d 100644 --- a/src/operator/mod.rs +++ b/src/operator/mod.rs @@ -23,12 +23,12 @@ pub trait Operator: Debug + Display { /// True if this operator is a leaf, meaning it accepts no arguments. // Make this a const fn once #57563 is resolved fn is_leaf(&self) -> bool { - self.max_argument_amount() == 0 + self.max_argument_amount() == Some(0) } /// Returns the maximum amount of arguments required by this operator. // Make this a const fn once #57563 is resolved - fn max_argument_amount(&self) -> usize; + fn max_argument_amount(&self) -> Option; /// Evaluates the operator with the given arguments and context. fn eval(&self, arguments: &[Value], context: &dyn Context) -> EvalexprResult; @@ -127,8 +127,8 @@ impl Operator for RootNode { 200 } - fn max_argument_amount(&self) -> usize { - 1 + fn max_argument_amount(&self) -> Option { + Some(1) } fn eval(&self, arguments: &[Value], _context: &Context) -> EvalexprResult { @@ -145,8 +145,8 @@ impl Operator for Add { 95 } - fn max_argument_amount(&self) -> usize { - 2 + fn max_argument_amount(&self) -> Option { + Some(2) } fn eval(&self, arguments: &[Value], _context: &Context) -> EvalexprResult { @@ -182,8 +182,8 @@ impl Operator for Sub { 95 } - fn max_argument_amount(&self) -> usize { - 2 + fn max_argument_amount(&self) -> Option { + Some(2) } fn eval(&self, arguments: &[Value], _context: &Context) -> EvalexprResult { @@ -214,8 +214,8 @@ impl Operator for Neg { 110 } - fn max_argument_amount(&self) -> usize { - 1 + fn max_argument_amount(&self) -> Option { + Some(1) } fn eval(&self, arguments: &[Value], _context: &Context) -> EvalexprResult { @@ -240,8 +240,8 @@ impl Operator for Mul { 100 } - fn max_argument_amount(&self) -> usize { - 2 + fn max_argument_amount(&self) -> Option { + Some(2) } fn eval(&self, arguments: &[Value], _context: &Context) -> EvalexprResult { @@ -272,8 +272,8 @@ impl Operator for Div { 100 } - fn max_argument_amount(&self) -> usize { - 2 + fn max_argument_amount(&self) -> Option { + Some(2) } fn eval(&self, arguments: &[Value], _context: &Context) -> EvalexprResult { @@ -304,8 +304,8 @@ impl Operator for Mod { 100 } - fn max_argument_amount(&self) -> usize { - 2 + fn max_argument_amount(&self) -> Option { + Some(2) } fn eval(&self, arguments: &[Value], _context: &Context) -> EvalexprResult { @@ -336,8 +336,8 @@ impl Operator for Exp { 120 } - fn max_argument_amount(&self) -> usize { - 2 + fn max_argument_amount(&self) -> Option { + Some(2) } fn eval(&self, arguments: &[Value], _context: &Context) -> EvalexprResult { @@ -359,8 +359,8 @@ impl Operator for Eq { 80 } - fn max_argument_amount(&self) -> usize { - 2 + fn max_argument_amount(&self) -> Option { + Some(2) } fn eval(&self, arguments: &[Value], _context: &Context) -> EvalexprResult { @@ -379,8 +379,8 @@ impl Operator for Neq { 80 } - fn max_argument_amount(&self) -> usize { - 2 + fn max_argument_amount(&self) -> Option { + Some(2) } fn eval(&self, arguments: &[Value], _context: &Context) -> EvalexprResult { @@ -399,8 +399,8 @@ impl Operator for Gt { 80 } - fn max_argument_amount(&self) -> usize { - 2 + fn max_argument_amount(&self) -> Option { + Some(2) } fn eval(&self, arguments: &[Value], _context: &Context) -> EvalexprResult { @@ -435,8 +435,8 @@ impl Operator for Lt { 80 } - fn max_argument_amount(&self) -> usize { - 2 + fn max_argument_amount(&self) -> Option { + Some(2) } fn eval(&self, arguments: &[Value], _context: &Context) -> EvalexprResult { @@ -471,8 +471,8 @@ impl Operator for Geq { 80 } - fn max_argument_amount(&self) -> usize { - 2 + fn max_argument_amount(&self) -> Option { + Some(2) } fn eval(&self, arguments: &[Value], _context: &Context) -> EvalexprResult { @@ -507,8 +507,8 @@ impl Operator for Leq { 80 } - fn max_argument_amount(&self) -> usize { - 2 + fn max_argument_amount(&self) -> Option { + Some(2) } fn eval(&self, arguments: &[Value], _context: &Context) -> EvalexprResult { @@ -543,8 +543,8 @@ impl Operator for And { 75 } - fn max_argument_amount(&self) -> usize { - 2 + fn max_argument_amount(&self) -> Option { + Some(2) } fn eval(&self, arguments: &[Value], _context: &Context) -> EvalexprResult { @@ -565,8 +565,8 @@ impl Operator for Or { 70 } - fn max_argument_amount(&self) -> usize { - 2 + fn max_argument_amount(&self) -> Option { + Some(2) } fn eval(&self, arguments: &[Value], _context: &Context) -> EvalexprResult { @@ -587,8 +587,8 @@ impl Operator for Not { 110 } - fn max_argument_amount(&self) -> usize { - 1 + fn max_argument_amount(&self) -> Option { + Some(1) } fn eval(&self, arguments: &[Value], _context: &Context) -> EvalexprResult { @@ -608,8 +608,8 @@ impl Operator for Tuple { 40 } - fn max_argument_amount(&self) -> usize { - 2 + fn max_argument_amount(&self) -> Option { + Some(2) } fn eval(&self, arguments: &[Value], _context: &Context) -> EvalexprResult { @@ -646,8 +646,8 @@ impl Operator for Assign { false } - fn max_argument_amount(&self) -> usize { - 2 + fn max_argument_amount(&self) -> Option { + Some(2) } fn eval(&self, _arguments: &[Value], _context: &Context) -> EvalexprResult { @@ -668,8 +668,8 @@ impl Operator for Chain { 0 } - fn max_argument_amount(&self) -> usize { - 2 + fn max_argument_amount(&self) -> Option { + Some(2) } fn eval(&self, arguments: &[Value], _context: &Context) -> Result { @@ -686,8 +686,8 @@ impl Operator for Const { 200 } - fn max_argument_amount(&self) -> usize { - 0 + fn max_argument_amount(&self) -> Option { + Some(0) } fn eval(&self, arguments: &[Value], _context: &Context) -> EvalexprResult { @@ -702,8 +702,8 @@ impl Operator for VariableIdentifier { 200 } - fn max_argument_amount(&self) -> usize { - 0 + fn max_argument_amount(&self) -> Option { + Some(0) } fn eval(&self, _arguments: &[Value], context: &Context) -> EvalexprResult { @@ -730,8 +730,8 @@ impl Operator for FunctionIdentifier { false } - fn max_argument_amount(&self) -> usize { - 1 + fn max_argument_amount(&self) -> Option { + Some(1) } fn eval(&self, arguments: &[Value], context: &Context) -> EvalexprResult { diff --git a/src/tree/mod.rs b/src/tree/mod.rs index 775fcb6..c6d2956 100644 --- a/src/tree/mod.rs +++ b/src/tree/mod.rs @@ -316,7 +316,7 @@ impl Node { } fn has_enough_children(&self) -> bool { - self.children().len() == self.operator().max_argument_amount() + Some(self.children().len()) == self.operator().max_argument_amount() } fn insert_back_prioritized(&mut self, node: Node, is_root_node: bool) -> EvalexprResult<()> {