Skip to content

Commit c9c5391

Browse files
authored
Merge pull request #29 from Microsoft/fix15205
Fix yield in async generator
2 parents 6be26c8 + 90b4e18 commit c9c5391

File tree

2 files changed

+8
-8
lines changed

2 files changed

+8
-8
lines changed

tslib.es6.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -139,17 +139,17 @@ export function __asyncGenerator(thisArg, _arguments, generator) {
139139
function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; }
140140
function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); }
141141
function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } }
142-
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); }
143-
function delegate(r) { step(r.done ? r : { value: ["yield", r.value], done: false }); }
142+
function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); }
143+
function send(value) { settle(c[2], { value: value, done: false }); }
144144
function fulfill(value) { resume("next", value); }
145145
function reject(value) { resume("throw", value); }
146146
function settle(f, v) { c = void 0, f(v), next(); }
147147
};
148148

149149
export function __asyncDelegator(o) {
150-
var i = { next: verb("next"), "throw": verb("throw", function (e) { throw e; }), "return": verb("return", function (v) { return { value: v, done: true }; }) };
150+
var i = { next: verb("next"), "throw": verb("throw", function (e) { throw e; }), "return": verb("return", function (v) { return { value: v, done: true }; }) }, p;
151151
return o = __asyncValues(o), i[Symbol.iterator] = function () { return this; }, i;
152-
function verb(n, f) { return function (v) { return { value: ["delegate", (o[n] || f).call(o, v)], done: false }; }; }
152+
function verb(n, f) { return function (v) { return v = p && n === "throw" ? f(v) : p && v.done ? v : { value: p ? ["yield", v.value] : ["await", (o[n] || f).call(o, v)], done: false }, p = !p, v; }; }
153153
};
154154

155155
export function __asyncValues(o) {

tslib.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -169,17 +169,17 @@ var __asyncValues;
169169
function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; }
170170
function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); }
171171
function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } }
172-
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); }
173-
function delegate(r) { step(r.done ? r : { value: ["yield", r.value], done: false }); }
172+
function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); }
173+
function send(value) { settle(c[2], { value: value, done: false }); }
174174
function fulfill(value) { resume("next", value); }
175175
function reject(value) { resume("throw", value); }
176176
function settle(f, v) { c = void 0, f(v), next(); }
177177
};
178178

179179
__asyncDelegator = function (o) {
180-
var i = { next: verb("next"), "throw": verb("throw", function (e) { throw e; }), "return": verb("return", function (v) { return { value: v, done: true }; }) };
180+
var i = { next: verb("next"), "throw": verb("throw", function (e) { throw e; }), "return": verb("return", function (v) { return { value: v, done: true }; }) }, p;
181181
return o = __asyncValues(o), i[Symbol.iterator] = function () { return this; }, i;
182-
function verb(n, f) { return function (v) { return { value: ["delegate", (o[n] || f).call(o, v)], done: false }; }; }
182+
function verb(n, f) { return function (v) { return v = p && n === "throw" ? f(v) : p && v.done ? v : { value: p ? ["yield", v.value] : ["await", (o[n] || f).call(o, v)], done: false }, p = !p, v; }; }
183183
};
184184

185185
__asyncValues = function (o) {

0 commit comments

Comments
 (0)