diff options
| author | Laurenz <laurmaedje@gmail.com> | 2021-02-24 18:54:06 +0100 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2021-02-24 18:54:06 +0100 |
| commit | dae3dad5407e49715736a2a3d8735e65027e6c11 (patch) | |
| tree | a6742b1ef9e2741170c3dc563032481e9e33e218 /src/eval | |
| parent | e7cc35073f95800a3dc53cfa6b7f924f47ac618c (diff) | |
Index + value iteration for arrays 🦚
Diffstat (limited to 'src/eval')
| -rw-r--r-- | src/eval/mod.rs | 6 | ||||
| -rw-r--r-- | src/eval/value.rs | 6 |
2 files changed, 10 insertions, 2 deletions
diff --git a/src/eval/mod.rs b/src/eval/mod.rs index 98030b86..596ceb50 100644 --- a/src/eval/mod.rs +++ b/src/eval/mod.rs @@ -460,6 +460,9 @@ impl Eval for ExprFor { (ForPattern::Value(v), Value::Array(array)) => { iter!(for (v => value) in array.into_iter()); } + (ForPattern::KeyValue(i, v), Value::Array(array)) => { + iter!(for (i => idx, v => value) in array.into_iter().enumerate()); + } (ForPattern::Value(v), Value::Dict(dict)) => { iter!(for (v => value) in dict.into_iter().map(|p| p.1)); } @@ -467,8 +470,7 @@ impl Eval for ExprFor { iter!(for (k => key, v => value) in dict.into_iter()); } - (ForPattern::KeyValue(_, _), Value::Str(_)) - | (ForPattern::KeyValue(_, _), Value::Array(_)) => { + (ForPattern::KeyValue(_, _), Value::Str(_)) => { ctx.diag(error!(self.pattern.span(), "mismatched pattern")); } diff --git a/src/eval/value.rs b/src/eval/value.rs index b731acf9..2a91cf8a 100644 --- a/src/eval/value.rs +++ b/src/eval/value.rs @@ -590,6 +590,12 @@ primitive! { ValueTemplate: "template", Value::Template } primitive! { ValueFunc: "function", Value::Func } primitive! { ValueArgs: "arguments", Value::Args } +impl From<usize> for Value { + fn from(v: usize) -> Self { + Self::Int(v as i64) + } +} + impl From<&str> for Value { fn from(v: &str) -> Self { Self::Str(v.to_string()) |
