summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2021-02-24 18:54:06 +0100
committerLaurenz <laurmaedje@gmail.com>2021-02-24 18:54:06 +0100
commitdae3dad5407e49715736a2a3d8735e65027e6c11 (patch)
treea6742b1ef9e2741170c3dc563032481e9e33e218 /src
parente7cc35073f95800a3dc53cfa6b7f924f47ac618c (diff)
Index + value iteration for arrays 🦚
Diffstat (limited to 'src')
-rw-r--r--src/eval/mod.rs6
-rw-r--r--src/eval/value.rs6
-rw-r--r--src/pretty.rs2
3 files changed, 11 insertions, 3 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())
diff --git a/src/pretty.rs b/src/pretty.rs
index 2ed6e80d..de910b99 100644
--- a/src/pretty.rs
+++ b/src/pretty.rs
@@ -735,7 +735,7 @@ mod tests {
// Simple values.
test_value(Value::None, "none");
test_value(false, "false");
- test_value(12, "12");
+ test_value(12i64, "12");
test_value(3.14, "3.14");
test_value(Length::pt(5.5), "5.5pt");
test_value(Angle::deg(90.0), "90.0deg");