From 428c55b6eed3536bb228924c6fb0ad6cea6d6d4b Mon Sep 17 00:00:00 2001 From: Marmare314 <49279081+Marmare314@users.noreply.github.com> Date: Sun, 16 Apr 2023 14:34:57 +0200 Subject: refactor SyntaxKind::Pattern (#831) --- src/eval/mod.rs | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) (limited to 'src/eval/mod.rs') diff --git a/src/eval/mod.rs b/src/eval/mod.rs index 68d8148f..b8220112 100644 --- a/src/eval/mod.rs +++ b/src/eval/mod.rs @@ -1179,16 +1179,16 @@ impl Eval for ast::Closure { impl ast::Pattern { // Destruct the given value into the pattern. pub fn define(&self, vm: &mut Vm, value: Value) -> SourceResult { - match self.kind() { - ast::PatternKind::Ident(ident) => { - vm.define(ident, value); + match self { + ast::Pattern::Ident(ident) => { + vm.define(ident.clone(), value); Ok(Value::None) } - ast::PatternKind::Destructure(pattern) => { + ast::Pattern::Destructuring(destruct) => { match value { Value::Array(value) => { let mut i = 0; - for p in &pattern { + for p in destruct.bindings() { match p { ast::DestructuringKind::Ident(ident) => { let Ok(v) = value.at(i) else { @@ -1198,7 +1198,7 @@ impl ast::Pattern { i += 1; } ast::DestructuringKind::Sink(ident) => { - (1 + value.len() as usize).checked_sub(pattern.len()).and_then(|sink_size| { + (1 + value.len() as usize).checked_sub(destruct.bindings().count()).and_then(|sink_size| { let Ok(sink) = value.slice(i, Some(i + sink_size as i64)) else { return None; }; @@ -1224,10 +1224,10 @@ impl ast::Pattern { Value::Dict(value) => { let mut sink = None; let mut used = HashSet::new(); - for p in &pattern { + for p in destruct.bindings() { match p { ast::DestructuringKind::Ident(ident) => { - let Ok(v) = value.at(ident) else { + let Ok(v) = value.at(&ident) else { bail!(ident.span(), "destructuring key not found in dictionary"); }; vm.define(ident.clone(), v.clone()); @@ -1237,7 +1237,7 @@ impl ast::Pattern { sink = ident.clone() } ast::DestructuringKind::Named(key, ident) => { - let Ok(v) = value.at(key) else { + let Ok(v) = value.at(&key) else { bail!(ident.span(), "destructuring key not found in dictionary"); }; vm.define(ident.clone(), v.clone()); @@ -1451,8 +1451,8 @@ impl Eval for ast::ForLoop { let iter = self.iter().eval(vm)?; let pattern = self.pattern(); - match (pattern.kind(), iter.clone()) { - (ast::PatternKind::Ident(_), Value::Str(string)) => { + match (&pattern, iter.clone()) { + (ast::Pattern::Ident(_), Value::Str(string)) => { // Iterate over graphemes of string. iter!(for pattern in string.as_str().graphemes(true)); } @@ -1464,7 +1464,7 @@ impl Eval for ast::ForLoop { // Iterate over values of array. iter!(for pattern in array); } - (ast::PatternKind::Ident(_), _) => { + (ast::Pattern::Ident(_), _) => { bail!(self.iter().span(), "cannot loop over {}", iter.type_name()); } (_, _) => { -- cgit v1.2.3