summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--crates/typst/src/eval/array.rs13
-rw-r--r--tests/typ/compiler/array.typ3
2 files changed, 14 insertions, 2 deletions
diff --git a/crates/typst/src/eval/array.rs b/crates/typst/src/eval/array.rs
index bee3fae7..f139907f 100644
--- a/crates/typst/src/eval/array.rs
+++ b/crates/typst/src/eval/array.rs
@@ -473,9 +473,18 @@ impl Array {
#[variadic]
others: Vec<Array>,
) -> SourceResult<Array> {
- // Fast path for just two arrays.
let mut args = args;
- if args.remaining() <= 1 {
+
+ // Fast path for one array.
+ if args.remaining() == 0 {
+ return Ok(self
+ .iter()
+ .map(|item| array![item.clone()].into_value())
+ .collect());
+ }
+
+ // Fast path for just two arrays.
+ if args.remaining() == 1 {
let other = args.expect::<Array>("others")?;
args.finish()?;
return Ok(self
diff --git a/tests/typ/compiler/array.typ b/tests/typ/compiler/array.typ
index 12c3c3a0..4191d6ff 100644
--- a/tests/typ/compiler/array.typ
+++ b/tests/typ/compiler/array.typ
@@ -260,6 +260,9 @@
#test((1, 2, 3).zip((3, 4, 5), (6, 7, 8)), ((1, 3, 6), (2, 4, 7), (3, 5, 8)))
#test(().zip((), ()), ())
#test((1,).zip((2,), (3,)), ((1, 2, 3),))
+#test((1, 2, 3).zip(), ((1,), (2,), (3,)))
+#test(array.zip(()), ())
+#test(array.zip(("a", "b")), (("a",), ("b",)))
---
// Test the `enumerate` method.