// Copyright (C) 2017 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- desc: Error forwarding when IteratorValue returns an abrupt completion template: error info: | 13.3.3.6 Runtime Semantics: IteratorBindingInitialization SingleNameBinding : BindingIdentifier Initializer_opt [...] 3. If iteratorRecord.[[done]] is false, then a. Let next be IteratorStep(iteratorRecord.[[iterator]]). 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). features: [Symbol.iterator] ---*/ //- setup var poisonedValue = Object.defineProperty({}, 'value', { get: function() { throw new Test262Error(); } }); var g = {}; g[Symbol.iterator] = function() { return { next() { return poisonedValue; } }; }; //- elems [x] //- vals g //- error Test262Error