diff --git a/crates/typst/src/eval/array.rs b/crates/typst/src/eval/array.rs index bee3fae75..f139907f6 100644 --- a/crates/typst/src/eval/array.rs +++ b/crates/typst/src/eval/array.rs @@ -473,9 +473,18 @@ impl Array { #[variadic] others: Vec, ) -> SourceResult { - // 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::("others")?; args.finish()?; return Ok(self diff --git a/tests/typ/compiler/array.typ b/tests/typ/compiler/array.typ index 12c3c3a01..4191d6ff9 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.