Skip to content

Commit 7079de8

Browse files
committed
Updated version of __awaiter.
Fixes microsoft#5941.
1 parent efc573f commit 7079de8

6 files changed

Lines changed: 36 additions & 66 deletions

File tree

src/compiler/emitter.ts

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -319,17 +319,12 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
319319
};`;
320320

321321
const awaiterHelper = `
322-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promise, generator) {
323-
return new Promise(function (resolve, reject) {
324-
generator = generator.call(thisArg, _arguments);
325-
function cast(value) { return value instanceof Promise && value.constructor === Promise ? value : new Promise(function (resolve) { resolve(value); }); }
326-
function onfulfill(value) { try { step("next", value); } catch (e) { reject(e); } }
327-
function onreject(value) { try { step("throw", value); } catch (e) { reject(e); } }
328-
function step(verb, value) {
329-
var result = generator[verb](value);
330-
result.done ? resolve(result.value) : cast(result.value).then(onfulfill, onreject);
331-
}
332-
step("next", void 0);
322+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
323+
return new P(function (resolve, reject) {
324+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
325+
function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } }
326+
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
327+
step((generator = generator.call(thisArg, _arguments)).next());
333328
});
334329
};`;
335330

tests/baselines/reference/asyncAwaitIsolatedModules_es6.js

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -40,17 +40,12 @@ module M {
4040
}
4141

4242
//// [asyncAwaitIsolatedModules_es6.js]
43-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promise, generator) {
44-
return new Promise(function (resolve, reject) {
45-
generator = generator.call(thisArg, _arguments);
46-
function cast(value) { return value instanceof Promise && value.constructor === Promise ? value : new Promise(function (resolve) { resolve(value); }); }
47-
function onfulfill(value) { try { step("next", value); } catch (e) { reject(e); } }
48-
function onreject(value) { try { step("throw", value); } catch (e) { reject(e); } }
49-
function step(verb, value) {
50-
var result = generator[verb](value);
51-
result.done ? resolve(result.value) : cast(result.value).then(onfulfill, onreject);
52-
}
53-
step("next", void 0);
43+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
44+
return new P(function (resolve, reject) {
45+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
46+
function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } }
47+
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
48+
step((generator = generator.call(thisArg, _arguments)).next());
5449
});
5550
};
5651
function f0() {

tests/baselines/reference/asyncAwait_es6.js

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -40,17 +40,12 @@ module M {
4040
}
4141

4242
//// [asyncAwait_es6.js]
43-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promise, generator) {
44-
return new Promise(function (resolve, reject) {
45-
generator = generator.call(thisArg, _arguments);
46-
function cast(value) { return value instanceof Promise && value.constructor === Promise ? value : new Promise(function (resolve) { resolve(value); }); }
47-
function onfulfill(value) { try { step("next", value); } catch (e) { reject(e); } }
48-
function onreject(value) { try { step("throw", value); } catch (e) { reject(e); } }
49-
function step(verb, value) {
50-
var result = generator[verb](value);
51-
result.done ? resolve(result.value) : cast(result.value).then(onfulfill, onreject);
52-
}
53-
step("next", void 0);
43+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
44+
return new P(function (resolve, reject) {
45+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
46+
function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } }
47+
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
48+
step((generator = generator.call(thisArg, _arguments)).next());
5449
});
5550
};
5651
function f0() {

tests/baselines/reference/asyncImportedPromise_es6.js

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,17 +16,12 @@ class Task extends Promise {
1616
exports.Task = Task;
1717
//// [test.js]
1818
"use strict";
19-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promise, generator) {
20-
return new Promise(function (resolve, reject) {
21-
generator = generator.call(thisArg, _arguments);
22-
function cast(value) { return value instanceof Promise && value.constructor === Promise ? value : new Promise(function (resolve) { resolve(value); }); }
23-
function onfulfill(value) { try { step("next", value); } catch (e) { reject(e); } }
24-
function onreject(value) { try { step("throw", value); } catch (e) { reject(e); } }
25-
function step(verb, value) {
26-
var result = generator[verb](value);
27-
result.done ? resolve(result.value) : cast(result.value).then(onfulfill, onreject);
28-
}
29-
step("next", void 0);
19+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
20+
return new P(function (resolve, reject) {
21+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
22+
function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } }
23+
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
24+
step((generator = generator.call(thisArg, _arguments)).next());
3025
});
3126
};
3227
var task_1 = require("./task");

tests/baselines/reference/asyncMultiFile.js

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,12 @@ async function f() {}
66
function g() { }
77

88
//// [a.js]
9-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promise, generator) {
10-
return new Promise(function (resolve, reject) {
11-
generator = generator.call(thisArg, _arguments);
12-
function cast(value) { return value instanceof Promise && value.constructor === Promise ? value : new Promise(function (resolve) { resolve(value); }); }
13-
function onfulfill(value) { try { step("next", value); } catch (e) { reject(e); } }
14-
function onreject(value) { try { step("throw", value); } catch (e) { reject(e); } }
15-
function step(verb, value) {
16-
var result = generator[verb](value);
17-
result.done ? resolve(result.value) : cast(result.value).then(onfulfill, onreject);
18-
}
19-
step("next", void 0);
9+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
10+
return new P(function (resolve, reject) {
11+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
12+
function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } }
13+
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
14+
step((generator = generator.call(thisArg, _arguments)).next());
2015
});
2116
};
2217
function f() {

tests/baselines/reference/reachabilityChecks7.js

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -31,17 +31,12 @@ declare function use(s: string): void;
3131
let x1 = () => { use("Test"); }
3232

3333
//// [reachabilityChecks7.js]
34-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promise, generator) {
35-
return new Promise(function (resolve, reject) {
36-
generator = generator.call(thisArg, _arguments);
37-
function cast(value) { return value instanceof Promise && value.constructor === Promise ? value : new Promise(function (resolve) { resolve(value); }); }
38-
function onfulfill(value) { try { step("next", value); } catch (e) { reject(e); } }
39-
function onreject(value) { try { step("throw", value); } catch (e) { reject(e); } }
40-
function step(verb, value) {
41-
var result = generator[verb](value);
42-
result.done ? resolve(result.value) : cast(result.value).then(onfulfill, onreject);
43-
}
44-
step("next", void 0);
34+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
35+
return new P(function (resolve, reject) {
36+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
37+
function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } }
38+
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
39+
step((generator = generator.call(thisArg, _arguments)).next());
4540
});
4641
};
4742
// async function without return type annotation - error

0 commit comments

Comments
 (0)