// 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
    an AssignmentRestElement and within the body of a generator function, it
    should behave as a YieldExpression.
template: default
es6id: 12.14.5
features: [generators]
---*/

//- setup
var x = {};
var iterationResult, iter;

iter = (function*() {
//- elems
[...x[yield]]
//- vals
[33, 44, 55]
//- 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.length, 3);
assert.sameValue(x.prop[0], 33);
assert.sameValue(x.prop[1], 44);
assert.sameValue(x.prop[2], 55);
