| // Copyright 2016 the V8 project authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // Flags: --harmony-function-sent |
| |
| |
| { |
| function* g() { return function.sent } |
| assertEquals({value: 42, done: true}, g().next(42)); |
| } |
| |
| |
| { |
| function* g() { |
| try { |
| yield function.sent; |
| } finally { |
| yield function.sent; |
| return function.sent; |
| } |
| } |
| |
| { |
| let x = g(); |
| assertEquals({value: 1, done: false}, x.next(1)); |
| assertEquals({value: 2, done: false}, x.next(2)); |
| assertEquals({value: 3, done: true}, x.next(3)); |
| } |
| |
| { |
| let x = g(); |
| assertEquals({value: 1, done: false}, x.next(1)); |
| assertEquals({value: 2, done: false}, x.throw(2)); |
| assertEquals({value: 3, done: true}, x.next(3)); |
| } |
| |
| { |
| let x = g(); |
| assertEquals({value: 1, done: false}, x.next(1)); |
| assertEquals({value: 2, done: false}, x.return(2)); |
| assertEquals({value: 3, done: true}, x.next(3)); |
| } |
| } |
| |
| |
| { |
| function* inner() { |
| try { |
| yield function.sent; |
| } finally { |
| return 23; |
| } |
| } |
| |
| function* g() { |
| yield function.sent; |
| yield* inner(); |
| return function.sent; |
| } |
| |
| { |
| let x = g(); |
| assertEquals({value: 1, done: false}, x.next(1)); |
| assertEquals({value: undefined, done: false}, x.next(2)); |
| assertEquals({value: 3, done: true}, x.next(3)); |
| } |
| |
| { |
| let x = g(); |
| assertEquals({value: 1, done: false}, x.next(1)); |
| assertEquals({value: undefined, done: false}, x.next(2)); |
| assertEquals({value: 42, done: true}, x.throw(42)); |
| } |
| |
| { |
| let x = g(); |
| assertEquals({value: 1, done: false}, x.next(1)); |
| assertEquals({value: undefined, done: false}, x.next(2)); |
| assertEquals({value: 23, done: true}, x.return(42)); |
| } |
| } |
| |
| |
| assertThrows("function f() { return function.sent }", SyntaxError); |
| assertThrows("() => { return function.sent }", SyntaxError); |
| assertThrows("() => { function.sent }", SyntaxError); |
| assertThrows("() => function.sent", SyntaxError); |
| assertThrows("({*f() { function.sent }})", SyntaxError); |
| assertDoesNotThrow("({*f() { return function.sent }})"); |