Skip to content

Commit 2e62d5e

Browse files
committed
Cleanup emit helper checks
1 parent 5e0160b commit 2e62d5e

File tree

5 files changed

+39
-48
lines changed

5 files changed

+39
-48
lines changed

src/compiler/checker.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21059,7 +21059,7 @@ namespace ts {
2105921059
function checkExternalEmitHelpers(location: Node, helpers: ExternalEmitHelpers) {
2106021060
if ((requestedExternalEmitHelpers & helpers) !== helpers && compilerOptions.importHelpers) {
2106121061
const sourceFile = getSourceFileOfNode(location);
21062-
if (isEffectiveExternalModule(sourceFile, compilerOptions)) {
21062+
if (!isDeclarationFile(sourceFile) && isEffectiveExternalModule(sourceFile, compilerOptions)) {
2106321063
const helpersModule = resolveHelpersModule(sourceFile, location);
2106421064
if (helpersModule !== unknownSymbol) {
2106521065
const uncheckedHelpers = helpers & ~requestedExternalEmitHelpers;
@@ -21089,10 +21089,12 @@ namespace ts {
2108921089
case ExternalEmitHelpers.Awaiter: return "__awaiter";
2109021090
case ExternalEmitHelpers.Generator: return "__generator";
2109121091
case ExternalEmitHelpers.Values: return "__values";
21092-
case ExternalEmitHelpers.Step: return "__step";
21093-
case ExternalEmitHelpers.Close: return "__close";
2109421092
case ExternalEmitHelpers.Read: return "__read";
2109521093
case ExternalEmitHelpers.Spread: return "__spread";
21094+
case ExternalEmitHelpers.AsyncGenerator: return "__asyncGenerator";
21095+
case ExternalEmitHelpers.AsyncDelegator: return "__asyncDelegator";
21096+
case ExternalEmitHelpers.AsyncValues: return "__asyncValues";
21097+
default: Debug.fail("Unrecognized helper.");
2109621098
}
2109721099
}
2109821100

src/compiler/transformers/esnext.ts

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -858,7 +858,8 @@ namespace ts {
858858
function fulfill(value) { resume("next", value); }
859859
function reject(value) { resume("throw", value); }
860860
function settle(f, v) { c = void 0, f(v), next(); }
861-
};`
861+
};
862+
`
862863
};
863864

864865
function createAsyncGeneratorHelper(context: TransformationContext, generatorFunc: FunctionExpression) {
@@ -878,44 +879,43 @@ namespace ts {
878879
);
879880
}
880881

881-
const asyncValues: EmitHelper = {
882-
name: "typescript:asyncValues",
882+
const asyncDelegator: EmitHelper = {
883+
name: "typescript:asyncDelegator",
883884
scoped: false,
884885
text: `
885-
var __asyncValues = (this && this.__asyncIterator) || function (o) {
886-
var m = o[Symbol.asyncIterator];
887-
if (m) return m.call(o);
888-
return typeof __values === "function" ? __values(o) : o[Symbol.iterator]();
886+
var __asyncDelegator = (this && this.__asyncDelegator) || function (o) {
887+
var i = { next: verb("next"), "throw": verb("throw", function (e) { throw e; }), "return": verb("return", function (v) { return { value: v, done: true }; }) };
888+
return o = __asyncValues(o), i[Symbol.iterator] = function () { return this; }, i;
889+
function verb(n, f) { return function (v) { return { value: ["delegate", (o[n] || f).call(o, v)], done: false }; }; }
889890
};
890891
`
891892
};
892893

893-
function createAsyncValuesHelper(context: TransformationContext, expression: Expression, location?: TextRange) {
894-
context.requestEmitHelper(asyncValues);
894+
function createAsyncDelegatorHelper(context: TransformationContext, expression: Expression, location?: TextRange) {
895+
context.requestEmitHelper(asyncDelegator);
895896
return createCall(
896-
getHelperName("__asyncValues"),
897+
getHelperName("__asyncDelegator"),
897898
/*typeArguments*/ undefined,
898899
[expression],
899900
location
900901
);
901902
}
902903

903-
const asyncDelegator: EmitHelper = {
904-
name: "typescript:asyncDelegator",
904+
const asyncValues: EmitHelper = {
905+
name: "typescript:asyncValues",
905906
scoped: false,
906907
text: `
907-
var __asyncDelegator = (this && this.__asyncDelegator) || function (o) {
908-
var i = { next: verb("next"), "throw": verb("throw", function (e) { throw e; }), "return": verb("return", function (v) { return { value: v, done: true }; }) };
909-
return o = __asyncValues(o), i[Symbol.iterator] = function () { return this; }, i;
910-
function verb(n, f) { return function (v) { return { value: ["delegate", (o[n] || f).call(o, v)], done: false }; }; }
908+
var __asyncValues = (this && this.__asyncIterator) || function (o) {
909+
var m = o[Symbol.asyncIterator];
910+
return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator]();
911911
};
912912
`
913913
};
914914

915-
function createAsyncDelegatorHelper(context: TransformationContext, expression: Expression, location?: TextRange) {
916-
context.requestEmitHelper(asyncDelegator);
915+
function createAsyncValuesHelper(context: TransformationContext, expression: Expression, location?: TextRange) {
916+
context.requestEmitHelper(asyncValues);
917917
return createCall(
918-
getHelperName("__asyncDelegator"),
918+
getHelperName("__asyncValues"),
919919
/*typeArguments*/ undefined,
920920
[expression],
921921
location

src/compiler/types.ts

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3744,20 +3744,17 @@ namespace ts {
37443744
Awaiter = 1 << 6, // __awaiter (used by ES2017 async functions transformation)
37453745
Generator = 1 << 7, // __generator (used by ES2015 generator transformation)
37463746
Values = 1 << 8, // __values (used by ES2015 for..of and yield* transformations)
3747-
Step = 1 << 9, // __step (used by ES2015 for..of transformation)
3748-
Close = 1 << 10, // __close (used by ES2015 for..of transformation)
3749-
Read = 1 << 11, // __read (used by ES2015 iterator destructuring transformation)
3750-
Spread = 1 << 12, // __spread (used by ES2015 array spread and argument list spread transformations)
3751-
AsyncGenerator = 1 << 13, // __asyncGenerator (used by ES2017 async generator transformation)
3752-
AsyncValues = 1 << 14, // __asyncValues (used by ES2017 for..await..of transformation)
3753-
AsyncStep = 1 << 15, // __asyncStep (used by ES2017 for..await..of transformation)
3754-
AsyncDelegator = 1 << 16, // __asyncDelegator (used by ES2017 async generator yield* transformation)
3747+
Read = 1 << 9, // __read (used by ES2015 iterator destructuring transformation)
3748+
Spread = 1 << 10, // __spread (used by ES2015 array spread and argument list spread transformations)
3749+
AsyncGenerator = 1 << 11, // __asyncGenerator (used by ES2017 async generator transformation)
3750+
AsyncDelegator = 1 << 12, // __asyncDelegator (used by ES2017 async generator yield* transformation)
3751+
AsyncValues = 1 << 13, // __asyncValues (used by ES2017 for..await..of transformation)
37553752

37563753
// Helpers included by ES2015 for..of
3757-
ForOfIncludes = Values | Step | Close,
3754+
ForOfIncludes = Values,
37583755

37593756
// Helpers included by ES2017 for..await..of
3760-
ForAwaitOfIncludes = AsyncValues | AsyncStep | Close,
3757+
ForAwaitOfIncludes = AsyncValues,
37613758

37623759
// Helpers included by ES2015 spread
37633760
SpreadIncludes = Read | Spread,

tests/baselines/reference/emitter.forAwait.es2015.js

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
3636
};
3737
var __asyncValues = (this && this.__asyncIterator) || function (o) {
3838
var m = o[Symbol.asyncIterator];
39-
if (m) return m.call(o);
40-
return typeof __values === "function" ? __values(o) : o[Symbol.iterator]();
39+
return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator]();
4140
};
4241
function f1() {
4342
return __awaiter(this, void 0, void 0, function* () {
@@ -68,8 +67,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
6867
};
6968
var __asyncValues = (this && this.__asyncIterator) || function (o) {
7069
var m = o[Symbol.asyncIterator];
71-
if (m) return m.call(o);
72-
return typeof __values === "function" ? __values(o) : o[Symbol.iterator]();
70+
return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator]();
7371
};
7472
function f2() {
7573
return __awaiter(this, void 0, void 0, function* () {
@@ -92,8 +90,7 @@ function f2() {
9290
//// [file3.js]
9391
var __asyncValues = (this && this.__asyncIterator) || function (o) {
9492
var m = o[Symbol.asyncIterator];
95-
if (m) return m.call(o);
96-
return typeof __values === "function" ? __values(o) : o[Symbol.iterator]();
93+
return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator]();
9794
};
9895
var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) {
9996
var g = generator.apply(thisArg, _arguments || []), q = [], c, i;
@@ -128,8 +125,7 @@ function f3() {
128125
//// [file4.js]
129126
var __asyncValues = (this && this.__asyncIterator) || function (o) {
130127
var m = o[Symbol.asyncIterator];
131-
if (m) return m.call(o);
132-
return typeof __values === "function" ? __values(o) : o[Symbol.iterator]();
128+
return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator]();
133129
};
134130
var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) {
135131
var g = generator.apply(thisArg, _arguments || []), q = [], c, i;

tests/baselines/reference/emitter.forAwait.es5.js

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
6363
};
6464
var __asyncValues = (this && this.__asyncIterator) || function (o) {
6565
var m = o[Symbol.asyncIterator];
66-
if (m) return m.call(o);
67-
return typeof __values === "function" ? __values(o) : o[Symbol.iterator]();
66+
return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator]();
6867
};
6968
function f1() {
7069
return __awaiter(this, void 0, void 0, function () {
@@ -146,8 +145,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
146145
};
147146
var __asyncValues = (this && this.__asyncIterator) || function (o) {
148147
var m = o[Symbol.asyncIterator];
149-
if (m) return m.call(o);
150-
return typeof __values === "function" ? __values(o) : o[Symbol.iterator]();
148+
return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator]();
151149
};
152150
function f2() {
153151
return __awaiter(this, void 0, void 0, function () {
@@ -221,8 +219,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
221219
};
222220
var __asyncValues = (this && this.__asyncIterator) || function (o) {
223221
var m = o[Symbol.asyncIterator];
224-
if (m) return m.call(o);
225-
return typeof __values === "function" ? __values(o) : o[Symbol.iterator]();
222+
return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator]();
226223
};
227224
var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) {
228225
var g = generator.apply(thisArg, _arguments || []), q = [], c, i;
@@ -308,8 +305,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
308305
};
309306
var __asyncValues = (this && this.__asyncIterator) || function (o) {
310307
var m = o[Symbol.asyncIterator];
311-
if (m) return m.call(o);
312-
return typeof __values === "function" ? __values(o) : o[Symbol.iterator]();
308+
return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator]();
313309
};
314310
var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) {
315311
var g = generator.apply(thisArg, _arguments || []), q = [], c, i;

0 commit comments

Comments
 (0)