// 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 Initializer of a nested
    destructuring assignment and within a generator function body, it should
    behave as a YieldExpression.
template: default
es6id: 12.14.5.4
features: [generators]
---*/

//- setup
var iterationResult, iter, x;

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

iterationResult = iter.next();

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

iterationResult = iter.next(24601);

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