Skip to content

Commit fbd5797

Browse files
committed
yield in async generator should implicitly unwrap operand
1 parent 4e29b18 commit fbd5797

11 files changed

+130
-65
lines changed

src/compiler/transformers/esnext.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -891,7 +891,8 @@ namespace ts {
891891
function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; }
892892
function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); }
893893
function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } }
894-
function step(r) { r.done ? settle(c[2], r) : r.value[0] === "yield" ? settle(c[2], { value: r.value[1], done: false }) : Promise.resolve(r.value[1]).then(r.value[0] === "delegate" ? delegate : fulfill, reject); }
894+
function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? yield : r.value[0] === "delegate" ? delegate : fulfill, reject); }
895+
function yield(value) { settle(c[2], { value: value, done: false }); }
895896
function delegate(r) { step(r.done ? r : { value: ["yield", r.value], done: false }); }
896897
function fulfill(value) { resume("next", value); }
897898
function reject(value) { resume("throw", value); }

tests/baselines/reference/emitter.asyncGenerators.classMethods.es2015.js

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,8 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar
6868
function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; }
6969
function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); }
7070
function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } }
71-
function step(r) { r.done ? settle(c[2], r) : r.value[0] === "yield" ? settle(c[2], { value: r.value[1], done: false }) : Promise.resolve(r.value[1]).then(r.value[0] === "delegate" ? delegate : fulfill, reject); }
71+
function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? yield : r.value[0] === "delegate" ? delegate : fulfill, reject); }
72+
function yield(value) { settle(c[2], { value: value, done: false }); }
7273
function delegate(r) { step(r.done ? r : { value: ["yield", r.value], done: false }); }
7374
function fulfill(value) { resume("next", value); }
7475
function reject(value) { resume("throw", value); }
@@ -88,7 +89,8 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar
8889
function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; }
8990
function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); }
9091
function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } }
91-
function step(r) { r.done ? settle(c[2], r) : r.value[0] === "yield" ? settle(c[2], { value: r.value[1], done: false }) : Promise.resolve(r.value[1]).then(r.value[0] === "delegate" ? delegate : fulfill, reject); }
92+
function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? yield : r.value[0] === "delegate" ? delegate : fulfill, reject); }
93+
function yield(value) { settle(c[2], { value: value, done: false }); }
9294
function delegate(r) { step(r.done ? r : { value: ["yield", r.value], done: false }); }
9395
function fulfill(value) { resume("next", value); }
9496
function reject(value) { resume("throw", value); }
@@ -109,7 +111,8 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar
109111
function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; }
110112
function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); }
111113
function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } }
112-
function step(r) { r.done ? settle(c[2], r) : r.value[0] === "yield" ? settle(c[2], { value: r.value[1], done: false }) : Promise.resolve(r.value[1]).then(r.value[0] === "delegate" ? delegate : fulfill, reject); }
114+
function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? yield : r.value[0] === "delegate" ? delegate : fulfill, reject); }
115+
function yield(value) { settle(c[2], { value: value, done: false }); }
113116
function delegate(r) { step(r.done ? r : { value: ["yield", r.value], done: false }); }
114117
function fulfill(value) { resume("next", value); }
115118
function reject(value) { resume("throw", value); }
@@ -135,7 +138,8 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar
135138
function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; }
136139
function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); }
137140
function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } }
138-
function step(r) { r.done ? settle(c[2], r) : r.value[0] === "yield" ? settle(c[2], { value: r.value[1], done: false }) : Promise.resolve(r.value[1]).then(r.value[0] === "delegate" ? delegate : fulfill, reject); }
141+
function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? yield : r.value[0] === "delegate" ? delegate : fulfill, reject); }
142+
function yield(value) { settle(c[2], { value: value, done: false }); }
139143
function delegate(r) { step(r.done ? r : { value: ["yield", r.value], done: false }); }
140144
function fulfill(value) { resume("next", value); }
141145
function reject(value) { resume("throw", value); }
@@ -156,7 +160,8 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar
156160
function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; }
157161
function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); }
158162
function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } }
159-
function step(r) { r.done ? settle(c[2], r) : r.value[0] === "yield" ? settle(c[2], { value: r.value[1], done: false }) : Promise.resolve(r.value[1]).then(r.value[0] === "delegate" ? delegate : fulfill, reject); }
163+
function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? yield : r.value[0] === "delegate" ? delegate : fulfill, reject); }
164+
function yield(value) { settle(c[2], { value: value, done: false }); }
160165
function delegate(r) { step(r.done ? r : { value: ["yield", r.value], done: false }); }
161166
function fulfill(value) { resume("next", value); }
162167
function reject(value) { resume("throw", value); }
@@ -182,7 +187,8 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar
182187
function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; }
183188
function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); }
184189
function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } }
185-
function step(r) { r.done ? settle(c[2], r) : r.value[0] === "yield" ? settle(c[2], { value: r.value[1], done: false }) : Promise.resolve(r.value[1]).then(r.value[0] === "delegate" ? delegate : fulfill, reject); }
190+
function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? yield : r.value[0] === "delegate" ? delegate : fulfill, reject); }
191+
function yield(value) { settle(c[2], { value: value, done: false }); }
186192
function delegate(r) { step(r.done ? r : { value: ["yield", r.value], done: false }); }
187193
function fulfill(value) { resume("next", value); }
188194
function reject(value) { resume("throw", value); }
@@ -203,7 +209,8 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar
203209
function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; }
204210
function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); }
205211
function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } }
206-
function step(r) { r.done ? settle(c[2], r) : r.value[0] === "yield" ? settle(c[2], { value: r.value[1], done: false }) : Promise.resolve(r.value[1]).then(r.value[0] === "delegate" ? delegate : fulfill, reject); }
212+
function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? yield : r.value[0] === "delegate" ? delegate : fulfill, reject); }
213+
function yield(value) { settle(c[2], { value: value, done: false }); }
207214
function delegate(r) { step(r.done ? r : { value: ["yield", r.value], done: false }); }
208215
function fulfill(value) { resume("next", value); }
209216
function reject(value) { resume("throw", value); }
@@ -224,7 +231,8 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar
224231
function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; }
225232
function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); }
226233
function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } }
227-
function step(r) { r.done ? settle(c[2], r) : r.value[0] === "yield" ? settle(c[2], { value: r.value[1], done: false }) : Promise.resolve(r.value[1]).then(r.value[0] === "delegate" ? delegate : fulfill, reject); }
234+
function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? yield : r.value[0] === "delegate" ? delegate : fulfill, reject); }
235+
function yield(value) { settle(c[2], { value: value, done: false }); }
228236
function delegate(r) { step(r.done ? r : { value: ["yield", r.value], done: false }); }
229237
function fulfill(value) { resume("next", value); }
230238
function reject(value) { resume("throw", value); }
@@ -247,7 +255,8 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar
247255
function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; }
248256
function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); }
249257
function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } }
250-
function step(r) { r.done ? settle(c[2], r) : r.value[0] === "yield" ? settle(c[2], { value: r.value[1], done: false }) : Promise.resolve(r.value[1]).then(r.value[0] === "delegate" ? delegate : fulfill, reject); }
258+
function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? yield : r.value[0] === "delegate" ? delegate : fulfill, reject); }
259+
function yield(value) { settle(c[2], { value: value, done: false }); }
251260
function delegate(r) { step(r.done ? r : { value: ["yield", r.value], done: false }); }
252261
function fulfill(value) { resume("next", value); }
253262
function reject(value) { resume("throw", value); }

tests/baselines/reference/emitter.asyncGenerators.classMethods.es5.js

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,8 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar
9595
function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; }
9696
function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); }
9797
function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } }
98-
function step(r) { r.done ? settle(c[2], r) : r.value[0] === "yield" ? settle(c[2], { value: r.value[1], done: false }) : Promise.resolve(r.value[1]).then(r.value[0] === "delegate" ? delegate : fulfill, reject); }
98+
function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? yield : r.value[0] === "delegate" ? delegate : fulfill, reject); }
99+
function yield(value) { settle(c[2], { value: value, done: false }); }
99100
function delegate(r) { step(r.done ? r : { value: ["yield", r.value], done: false }); }
100101
function fulfill(value) { resume("next", value); }
101102
function reject(value) { resume("throw", value); }
@@ -148,7 +149,8 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar
148149
function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; }
149150
function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); }
150151
function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } }
151-
function step(r) { r.done ? settle(c[2], r) : r.value[0] === "yield" ? settle(c[2], { value: r.value[1], done: false }) : Promise.resolve(r.value[1]).then(r.value[0] === "delegate" ? delegate : fulfill, reject); }
152+
function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? yield : r.value[0] === "delegate" ? delegate : fulfill, reject); }
153+
function yield(value) { settle(c[2], { value: value, done: false }); }
152154
function delegate(r) { step(r.done ? r : { value: ["yield", r.value], done: false }); }
153155
function fulfill(value) { resume("next", value); }
154156
function reject(value) { resume("throw", value); }
@@ -207,7 +209,8 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar
207209
function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; }
208210
function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); }
209211
function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } }
210-
function step(r) { r.done ? settle(c[2], r) : r.value[0] === "yield" ? settle(c[2], { value: r.value[1], done: false }) : Promise.resolve(r.value[1]).then(r.value[0] === "delegate" ? delegate : fulfill, reject); }
212+
function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? yield : r.value[0] === "delegate" ? delegate : fulfill, reject); }
213+
function yield(value) { settle(c[2], { value: value, done: false }); }
211214
function delegate(r) { step(r.done ? r : { value: ["yield", r.value], done: false }); }
212215
function fulfill(value) { resume("next", value); }
213216
function reject(value) { resume("throw", value); }
@@ -271,7 +274,8 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar
271274
function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; }
272275
function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); }
273276
function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } }
274-
function step(r) { r.done ? settle(c[2], r) : r.value[0] === "yield" ? settle(c[2], { value: r.value[1], done: false }) : Promise.resolve(r.value[1]).then(r.value[0] === "delegate" ? delegate : fulfill, reject); }
277+
function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? yield : r.value[0] === "delegate" ? delegate : fulfill, reject); }
278+
function yield(value) { settle(c[2], { value: value, done: false }); }
275279
function delegate(r) { step(r.done ? r : { value: ["yield", r.value], done: false }); }
276280
function fulfill(value) { resume("next", value); }
277281
function reject(value) { resume("throw", value); }
@@ -340,7 +344,8 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar
340344
function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; }
341345
function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); }
342346
function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } }
343-
function step(r) { r.done ? settle(c[2], r) : r.value[0] === "yield" ? settle(c[2], { value: r.value[1], done: false }) : Promise.resolve(r.value[1]).then(r.value[0] === "delegate" ? delegate : fulfill, reject); }
347+
function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? yield : r.value[0] === "delegate" ? delegate : fulfill, reject); }
348+
function yield(value) { settle(c[2], { value: value, done: false }); }
344349
function delegate(r) { step(r.done ? r : { value: ["yield", r.value], done: false }); }
345350
function fulfill(value) { resume("next", value); }
346351
function reject(value) { resume("throw", value); }
@@ -421,7 +426,8 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar
421426
function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; }
422427
function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); }
423428
function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } }
424-
function step(r) { r.done ? settle(c[2], r) : r.value[0] === "yield" ? settle(c[2], { value: r.value[1], done: false }) : Promise.resolve(r.value[1]).then(r.value[0] === "delegate" ? delegate : fulfill, reject); }
429+
function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? yield : r.value[0] === "delegate" ? delegate : fulfill, reject); }
430+
function yield(value) { settle(c[2], { value: value, done: false }); }
425431
function delegate(r) { step(r.done ? r : { value: ["yield", r.value], done: false }); }
426432
function fulfill(value) { resume("next", value); }
427433
function reject(value) { resume("throw", value); }
@@ -480,7 +486,8 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar
480486
function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; }
481487
function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); }
482488
function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } }
483-
function step(r) { r.done ? settle(c[2], r) : r.value[0] === "yield" ? settle(c[2], { value: r.value[1], done: false }) : Promise.resolve(r.value[1]).then(r.value[0] === "delegate" ? delegate : fulfill, reject); }
489+
function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? yield : r.value[0] === "delegate" ? delegate : fulfill, reject); }
490+
function yield(value) { settle(c[2], { value: value, done: false }); }
484491
function delegate(r) { step(r.done ? r : { value: ["yield", r.value], done: false }); }
485492
function fulfill(value) { resume("next", value); }
486493
function reject(value) { resume("throw", value); }
@@ -533,7 +540,8 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar
533540
function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; }
534541
function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); }
535542
function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } }
536-
function step(r) { r.done ? settle(c[2], r) : r.value[0] === "yield" ? settle(c[2], { value: r.value[1], done: false }) : Promise.resolve(r.value[1]).then(r.value[0] === "delegate" ? delegate : fulfill, reject); }
543+
function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? yield : r.value[0] === "delegate" ? delegate : fulfill, reject); }
544+
function yield(value) { settle(c[2], { value: value, done: false }); }
537545
function delegate(r) { step(r.done ? r : { value: ["yield", r.value], done: false }); }
538546
function fulfill(value) { resume("next", value); }
539547
function reject(value) { resume("throw", value); }
@@ -599,7 +607,8 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar
599607
function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; }
600608
function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); }
601609
function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } }
602-
function step(r) { r.done ? settle(c[2], r) : r.value[0] === "yield" ? settle(c[2], { value: r.value[1], done: false }) : Promise.resolve(r.value[1]).then(r.value[0] === "delegate" ? delegate : fulfill, reject); }
610+
function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? yield : r.value[0] === "delegate" ? delegate : fulfill, reject); }
611+
function yield(value) { settle(c[2], { value: value, done: false }); }
603612
function delegate(r) { step(r.done ? r : { value: ["yield", r.value], done: false }); }
604613
function fulfill(value) { resume("next", value); }
605614
function reject(value) { resume("throw", value); }

0 commit comments

Comments
 (0)