diff --git a/src/extension/const_fold.rs b/src/extension/const_fold.rs index 29cf4b5a9..28a75fd72 100644 --- a/src/extension/const_fold.rs +++ b/src/extension/const_fold.rs @@ -31,12 +31,6 @@ impl Debug for Box { } } -impl Default for Box { - fn default() -> Self { - Box::new(|&_: &_| None) - } -} - /// Blanket implementation for functions that only require the constants to /// evaluate - type arguments are not relevant. impl ConstFold for T diff --git a/src/extension/op_def.rs b/src/extension/op_def.rs index 875778e4f..4eefeb61f 100644 --- a/src/extension/op_def.rs +++ b/src/extension/op_def.rs @@ -311,7 +311,7 @@ pub struct OpDef { /// Operations can optionally implement [`ConstFold`] to implement constant folding. #[serde(skip)] - constant_folder: Box, + constant_folder: Option>, } impl OpDef { @@ -421,7 +421,7 @@ impl OpDef { /// Set the constant folding function for this Op, which can evaluate it /// given constant inputs. pub fn set_constant_folder(&mut self, fold: impl ConstFold + 'static) { - self.constant_folder = Box::new(fold) + self.constant_folder = Some(Box::new(fold)) } /// Evaluate an instance of this [`OpDef`] defined by the `type_args`, given @@ -431,7 +431,7 @@ impl OpDef { type_args: &[TypeArg], consts: &[(crate::IncomingPort, crate::ops::Const)], ) -> ConstFoldResult { - self.constant_folder.fold(type_args, consts) + (self.constant_folder.as_ref())?.fold(type_args, consts) } }