diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
commit | 36d22d82aa202bb199967e9512281e9a53db42c9 (patch) | |
tree | 105e8c98ddea1c1e4784a60a5a6410fa416be2de /js/src/tests/test262/language/expressions/yield/star-rhs-iter-rtrn-res-value-final.js | |
parent | Initial commit. (diff) | |
download | firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.tar.xz firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.zip |
Adding upstream version 115.7.0esr.upstream/115.7.0esrupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'js/src/tests/test262/language/expressions/yield/star-rhs-iter-rtrn-res-value-final.js')
-rw-r--r-- | js/src/tests/test262/language/expressions/yield/star-rhs-iter-rtrn-res-value-final.js | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/js/src/tests/test262/language/expressions/yield/star-rhs-iter-rtrn-res-value-final.js b/js/src/tests/test262/language/expressions/yield/star-rhs-iter-rtrn-res-value-final.js new file mode 100644 index 0000000000..878450d948 --- /dev/null +++ b/js/src/tests/test262/language/expressions/yield/star-rhs-iter-rtrn-res-value-final.js @@ -0,0 +1,73 @@ +// Copyright (C) 2016 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +esid: sec-generator-function-definitions-runtime-semantics-evaluation +es6id: 14.4.14 +description: Value received from invocation of generator's `return` method +info: | + YieldExpression : yield * AssignmentExpression + + 1. Let exprRef be the result of evaluating AssignmentExpression. + 2. Let value be ? GetValue(exprRef). + 3. Let iterator be ? GetIterator(value). + 4. Let received be NormalCompletion(undefined). + 5. Repeat + a. If received.[[Type]] is normal, then + [...] + b. Else if received.[[Type]] is throw, then + [...] + c. Else, + i. Assert: received.[[Type]] is return. + ii. Let return be ? GetMethod(iterator, "return"). + iii. If return is undefined, return Completion(received). + iv. Let innerReturnResult be ? Call(return, iterator, « + received.[[Value]] »). + v. If Type(innerReturnResult) is not Object, throw a TypeError + exception. + vi. Let done be ? IteratorComplete(innerReturnResult). + vii. If done is true, then + 1. Let value be ? IteratorValue(innerReturnResult). + 2. Return Completion{[[Type]]: return, [[Value]]: value, + [[Target]]: empty}. + viii. Let received be GeneratorYield(innerReturnResult). + +features: [generators, Symbol.iterator] +---*/ + +var quickIter = {}; +var normalCompletion = false; +var errorCompletion = false; +var delegationComplete = false; +var iter, returnReceived; +quickIter[Symbol.iterator] = function() { + return { + next: function() { + return { done: false }; + }, + return: function(x) { + returnReceived = x; + return { done: true, value: 3333 }; + } + }; +}; +function* g() { + try { + yield * quickIter; + normalCompletion = true; + } catch (e) { + errorCompletion = true; + } finally { + delegationComplete = true; + } +} + +iter = g(); + +iter.next(); +iter.return(2222); +assert.sameValue(returnReceived, 2222); +assert.sameValue(delegationComplete, true, 'delegation complete'); +assert.sameValue(normalCompletion, false, 'completion was abrupt'); +assert.sameValue(errorCompletion, false, 'completion was not of type "throw"'); + +reportCompare(0, 0); |