// This file was procedurally generated from the following sources:
// - src/dstr-binding/ary-ptrn-elem-id-iter-val-array-prototype.case
// - src/dstr-binding/default/try.template
/*---
description: Array destructuring uses overriden Array.prototype[Symbol.iterator] (try statement)
esid: sec-runtime-semantics-catchclauseevaluation
features: [Symbol.iterator, generators, destructuring-binding]
flags: [generated]
info: |
Catch : catch ( CatchParameter ) Block
[...]
5. Let status be the result of performing BindingInitialization for
CatchParameter passing thrownValue and catchEnv as arguments.
[...]
Runtime Semantics: IteratorBindingInitialization
SingleNameBinding : BindingIdentifier Initializer_opt
1. Let bindingId be StringValue of BindingIdentifier.
2. Let lhs be ? ResolveBinding(bindingId, environment).
3. If iteratorRecord.[[Done]] is false, then
a. Let next be IteratorStep(iteratorRecord).
b. If next is an abrupt completion, set iteratorRecord.[[Done]] to true.
c. ReturnIfAbrupt(next).
d. If next is false, set iteratorRecord.[[Done]] to true.
e. Else,
i. Let v be IteratorValue(next).
ii. If v is an abrupt completion, set iteratorRecord.[[Done]] to true.
iii. ReturnIfAbrupt(v).
[...]
7. Return InitializeReferencedBinding(lhs, v).
---*/
Array.prototype[Symbol.iterator] = function* () {
if (this.length > 0) {
yield this[0];
}
if (this.length > 1) {
yield this[1];
}
if (this.length > 2) {
yield 42;
}
};
var ranCatch = false;
try {
throw [1, 2, 3];
} catch ([x, y, z]) {
assert.sameValue(x, 1);
assert.sameValue(y, 2);
assert.sameValue(z, 42);
ranCatch = true;
}
assert(ranCatch, 'executed `catch` block');