summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/eval/mod.rs8
-rw-r--r--tests/typ/compiler/let.typ6
2 files changed, 13 insertions, 1 deletions
diff --git a/src/eval/mod.rs b/src/eval/mod.rs
index 68163bf6..2719c298 100644
--- a/src/eval/mod.rs
+++ b/src/eval/mod.rs
@@ -1268,7 +1268,13 @@ impl ast::Pattern {
ast::DestructuringKind::Named(named) => {
bail!(named.span(), "cannot destructure named elements from an array")
}
- ast::DestructuringKind::Placeholder(_) => i += 1,
+ ast::DestructuringKind::Placeholder(underscore) => {
+ if i < value.len() {
+ i += 1
+ } else {
+ bail!(underscore.span(), "not enough elements to destructure")
+ }
+ }
}
}
if i < value.len() {
diff --git a/tests/typ/compiler/let.typ b/tests/typ/compiler/let.typ
index 7081bcf0..d9940a8c 100644
--- a/tests/typ/compiler/let.typ
+++ b/tests/typ/compiler/let.typ
@@ -178,6 +178,12 @@ Three
#test(a, 1)
---
+// Trailing placeholders.
+// Error: 10-11 not enough elements to destructure
+#let (a, _, _, _, _) = (1,)
+#test(a, 1)
+
+---
// Error: 10-13 expected identifier, found string
// Error: 18-19 expected identifier, found integer
#let (a: "a", b: 2) = (a: 1, b: 2)