star-rhs-iter-nrml-res-value-final.js (1734B)
1 // Copyright (C) 2016 the V8 project authors. All rights reserved. 2 // This code is governed by the BSD license found in the LICENSE file. 3 /*--- 4 esid: sec-generator-function-definitions-runtime-semantics-evaluation 5 es6id: 14.4.14 6 description: Value received from invocation of generator's `next` method 7 info: | 8 YieldExpression : yield * AssignmentExpression 9 10 1. Let exprRef be the result of evaluating AssignmentExpression. 11 2. Let value be ? GetValue(exprRef). 12 3. Let iterator be ? GetIterator(value). 13 4. Let received be NormalCompletion(undefined). 14 5. Repeat 15 a. If received.[[Type]] is normal, then 16 i. Let innerResult be ? IteratorNext(iterator, received.[[Value]]). 17 ii. Let done be ? IteratorComplete(innerResult). 18 iii. If done is true, then 19 1. Return ? IteratorValue(innerResult). 20 21 7.4.4 IteratorValue 22 23 1. Assert: Type(iterResult) is Object. 24 2. Return ? Get(iterResult, "value"). 25 features: [generators, Symbol.iterator] 26 ---*/ 27 28 var quickIter = {}; 29 var exprValue, nextReceived, done, iter; 30 quickIter[Symbol.iterator] = function() { 31 return { 32 next: function(x) { 33 nextReceived = x; 34 return { 35 done: done, 36 value: 3333 37 }; 38 } 39 }; 40 }; 41 function* g() { 42 exprValue = yield * quickIter; 43 } 44 45 done = true; 46 iter = g(); 47 iter.next(4444); 48 49 assert.sameValue( 50 nextReceived, undefined, 'received value (previously-exhausted iterator)' 51 ); 52 assert.sameValue(exprValue, 3333, 'expression value (previously-exhausted iterator)'); 53 54 done = false; 55 exprValue = null; 56 iter = g(); 57 iter.next(2222); 58 done = true; 59 iter.next(5555); 60 61 assert.sameValue(nextReceived, 5555, 'received value'); 62 assert.sameValue(exprValue, 3333, 'expression value'); 63 64 reportCompare(0, 0);