// Copyright (C) 2015 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
desc: >
    When a `yield` token appears within the DestructuringAssignmentTarget of a
    nested destructuring assignment and within a generator function body, it
    behaves as a YieldExpression.
template: default
es6id: 12.14.5.3
features: [generators]
---*/

//- setup
var value = [[22]];
var x = {};
var iterationResult, iter;

iter = (function*() {
//- elems
[[x[yield]]]
//- vals
value
//- teardown
}());

iterationResult = iter.next();

assert.sameValue(iterationResult.value, undefined);
assert.sameValue(iterationResult.done, false);
assert.sameValue(x.prop, undefined);

iterationResult = iter.next('prop');

assert.sameValue(iterationResult.value, undefined);
assert.sameValue(iterationResult.done, true);
assert.sameValue(x.prop, 22);
