Check for control flow event before let binding (#1912)

Fixes #1906 (trying to destructure the result of `continue`).
This commit is contained in:
bluebear94 2023-08-21 10:21:37 -04:00 committed by GitHub
parent 5c6434d4ce
commit 877df549aa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 18 additions and 0 deletions

View File

@ -1470,6 +1470,9 @@ impl Eval for ast::LetBinding<'_> {
Some(expr) => expr.eval(vm)?,
None => Value::None,
};
if vm.flow.is_some() {
return Ok(Value::None);
}
match self.kind() {
ast::LetBindingKind::Normal(pattern) => define_pattern(vm, pattern, value),

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.7 KiB

After

Width:  |  Height:  |  Size: 9.5 KiB

View File

@ -145,3 +145,18 @@
for _ in range(3) [B]
)
}
---
// Ref: true
// Test continue while destructuring.
// Should output "one = I \ two = II \ one = I".
#for num in (1, 2, 3, 1) {
let (word, roman) = if num == 1 {
("one", "I")
} else if num == 2 {
("two", "II")
} else {
continue
}
[#word = #roman \ ]
}