Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(63)

Side by Side Diff: test/mjsunit/harmony/generators.js

Issue 1606273002: Implement [Generator].prototype.return. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« src/js/generator.js ('K') | « test/mjsunit/es6/generators-runtime.js ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2016 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5
6 { // yield in try-catch
7
8 let g = function*() {
9 try {yield 1} catch (error) {assertEquals("caught", error)}
10 };
11
12 assertThrowsEquals(() => g().throw("not caught"), "not caught");
13
14 {
15 let x = g();
16 assertEquals({value: 1, done: false}, x.next());
17 assertEquals({value: undefined, done: true}, x.throw("caught"));
18 }
19
20 {
21 let x = g();
22 assertEquals({value: 1, done: false}, x.next());
23 assertEquals({value: undefined, done: true}, x.next());
24 assertThrowsEquals(() => x.throw("not caught"), "not caught");
25 }
26 }
27
28
29 { // yield in try-finally, finally clause performs return
30
31 let g = function*() { try {yield 42} finally {return 13} };
32
33 { // "return" closes at suspendedStart
34 let x = g();
35 assertEquals({value: 666, done: true}, x.return(666));
36 assertEquals({value: undefined, done: true}, x.next(42));
37 assertThrowsEquals(() => x.throw(43), 43);
38 assertEquals({value: 42, done: true}, x.return(42));
39 }
40
41 { // "throw" closes at suspendedStart
42 let x = g();
43 assertThrowsEquals(() => x.throw(666), 666);
44 assertEquals({value: undefined, done: true}, x.next(42));
45 assertEquals({value: 43, done: true}, x.return(43));
46 assertThrowsEquals(() => x.throw(44), 44);
47 }
48
49 { // "next" closes at suspendedYield
50 let x = g();
51 assertEquals({value: 42, done: false}, x.next());
52 assertEquals({value: 13, done: true}, x.next(666));
53 assertEquals({value: undefined, done: true}, x.next(666));
54 assertThrowsEquals(() => x.throw(666), 666);
55 }
56
57 { // "return" closes at suspendedYield
58 let x = g();
59 assertEquals({value: 42, done: false}, x.next());
60 assertEquals({value: 13, done: true}, x.return(666));
61 assertEquals({value: undefined, done: true}, x.next(666));
62 assertEquals({value: 666, done: true}, x.return(666));
63 }
64
65 { // "throw" closes at suspendedYield
66 let x = g();
67 assertEquals({value: 42, done: false}, x.next());
68 assertEquals({value: 13, done: true}, x.throw(666));
69 assertThrowsEquals(() => x.throw(666), 666);
70 assertEquals({value: undefined, done: true}, x.next(666));
71 }
72 }
73
74
75 { // yield in try-finally, finally clause doesn't perform return
76
77 let g = function*() { try {yield 42} finally {13} };
78
79 { // "return" closes at suspendedStart
80 let x = g();
81 assertEquals({value: 666, done: true}, x.return(666));
82 assertEquals({value: undefined, done: true}, x.next(42));
83 assertThrowsEquals(() => x.throw(43), 43);
84 assertEquals({value: 42, done: true}, x.return(42));
85 }
86
87 { // "throw" closes at suspendedStart
88 let x = g();
89 assertThrowsEquals(() => x.throw(666), 666);
90 assertEquals({value: undefined, done: true}, x.next(42));
91 assertEquals({value: 43, done: true}, x.return(43));
92 assertThrowsEquals(() => x.throw(44), 44);
93 }
94
95 { // "next" closes at suspendedYield
96 let x = g();
97 assertEquals({value: 42, done: false}, x.next());
98 assertEquals({value: undefined, done: true}, x.next(666));
99 assertEquals({value: undefined, done: true}, x.next(666));
100 assertThrowsEquals(() => x.throw(666), 666);
101 assertEquals({value: 42, done: true}, x.return(42));
102 }
103
104 { // "return" closes at suspendedYield
105 let x = g();
106 assertEquals({value: 42, done: false}, x.next());
107 assertEquals({value: 666, done: true}, x.return(666));
108 assertEquals({value: undefined, done: true}, x.next(666));
109 assertThrowsEquals(() => x.throw(44), 44);
110 assertEquals({value: 42, done: true}, x.return(42));
111 }
112
113 { // "throw" closes at suspendedYield
114 let x = g();
115 assertEquals({value: 42, done: false}, x.next());
116 assertThrowsEquals(() => x.throw(666), 666);
117 assertEquals({value: undefined, done: true}, x.next(666));
118 assertThrowsEquals(() => x.throw(666), 666);
119 assertEquals({value: 42, done: true}, x.return(42));
120 }
121 }
122
123
124 { // yield in try-finally, finally yields and performs return
125
126 let g = function*() { try {yield 42} finally {yield 43; return 13} };
127
128 {
129 let x = g();
130 assertEquals({value: 42, done: false}, x.next());
131 assertEquals({value: 43, done: false}, x.return(666));
132 assertEquals({value: 13, done: true}, x.next());
133 assertEquals({value: 666, done: true}, x.return(666));
134 }
135
136 {
137 let x = g();
138 assertEquals({value: 666, done: true}, x.return(666));
139 assertEquals({value: undefined, done: true}, x.next());
140 assertEquals({value: 666, done: true}, x.return(666));
141 }
142 }
OLDNEW
« src/js/generator.js ('K') | « test/mjsunit/es6/generators-runtime.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698