From 9fe9b95b7f257100b9242913ae079752b232bb87 Mon Sep 17 00:00:00 2001 From: Laurenz Date: Sat, 10 Jul 2021 23:00:03 +0200 Subject: Simpler casting --- src/eval/function.rs | 29 ++++++++--------------------- 1 file changed, 8 insertions(+), 21 deletions(-) (limited to 'src/eval/function.rs') diff --git a/src/eval/function.rs b/src/eval/function.rs index 28a62873..72722230 100644 --- a/src/eval/function.rs +++ b/src/eval/function.rs @@ -81,22 +81,14 @@ impl FuncArgs { T: Cast>, { (0 .. self.items.len()).find_map(|index| { - let slot = &mut self.items[index]; - if slot.name.is_some() { - return None; - } - - let value = std::mem::replace(&mut slot.value, Spanned::zero(Value::None)); - match T::cast(value) { - Ok(t) => { - self.items.remove(index); - Some(t) - } - Err(value) => { - slot.value = value; - None + let slot = self.items.get_mut(index)?; + if slot.name.is_none() { + if T::is(&slot.value) { + let value = self.items.remove(index).value; + return T::cast(value).ok(); } } + None }) } @@ -137,13 +129,8 @@ impl FuncArgs { match T::cast(value) { Ok(t) => Some(t), - Err(value) => { - ctx.diag(error!( - span, - "expected {}, found {}", - T::TYPE_NAME, - value.v.type_name(), - )); + Err(msg) => { + ctx.diag(error!(span, "{}", msg)); None } } -- cgit v1.2.3