diff options
| author | Laurenz <laurmaedje@gmail.com> | 2021-07-10 23:00:03 +0200 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2021-07-11 13:20:53 +0200 |
| commit | 9fe9b95b7f257100b9242913ae079752b232bb87 (patch) | |
| tree | c68a2b93b45e9bed5e1706da76a82a5c3f8ddd16 /src/eval/function.rs | |
| parent | 891e0c5fa6cd9200c24011c33b6f2115d84d4d74 (diff) | |
Simpler casting
Diffstat (limited to 'src/eval/function.rs')
| -rw-r--r-- | src/eval/function.rs | 29 |
1 files changed, 8 insertions, 21 deletions
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<Spanned<Value>>, { (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 } } |
