diff options
| author | Marmare314 <49279081+Marmare314@users.noreply.github.com> | 2023-04-28 18:49:21 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-04-28 18:49:21 +0200 |
| commit | 8fa1af8ac85a9f5395b53139ac6bcc299d95f347 (patch) | |
| tree | b6eeaeef0870a5f8d2e4b6c5766d043e0e9a305f | |
| parent | 0d8c3254b75e6493ecf8efc46c37d049c1ae6b63 (diff) | |
check index on placeholder (#1005)
| -rw-r--r-- | src/eval/mod.rs | 8 | ||||
| -rw-r--r-- | tests/typ/compiler/let.typ | 6 |
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) |
