Skip to content

Commit 4db86f7

Browse files
committed
Merge branch 'master' into publicTransformers
2 parents 67a0041 + 03b9066 commit 4db86f7

File tree

348 files changed

+16825
-3051
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

348 files changed

+16825
-3051
lines changed

Gulpfile.ts

+10-1
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,14 @@ const es2017LibrarySourceMap = es2017LibrarySource.map(function(source) {
139139
return { target: "lib." + source, sources: ["header.d.ts", source] };
140140
});
141141

142+
const esnextLibrarySource = [
143+
"esnext.asynciterable.d.ts"
144+
];
145+
146+
const esnextLibrarySourceMap = esnextLibrarySource.map(function (source) {
147+
return { target: "lib." + source, sources: ["header.d.ts", source] };
148+
});
149+
142150
const hostsLibrarySources = ["dom.generated.d.ts", "webworker.importscripts.d.ts", "scripthost.d.ts"];
143151

144152
const librarySourceMap = [
@@ -153,11 +161,12 @@ const librarySourceMap = [
153161
{ target: "lib.es2015.d.ts", sources: ["header.d.ts", "es2015.d.ts"] },
154162
{ target: "lib.es2016.d.ts", sources: ["header.d.ts", "es2016.d.ts"] },
155163
{ target: "lib.es2017.d.ts", sources: ["header.d.ts", "es2017.d.ts"] },
164+
{ target: "lib.esnext.d.ts", sources: ["header.d.ts", "esnext.d.ts"] },
156165

157166
// JavaScript + all host library
158167
{ target: "lib.d.ts", sources: ["header.d.ts", "es5.d.ts"].concat(hostsLibrarySources) },
159168
{ target: "lib.es6.d.ts", sources: ["header.d.ts", "es5.d.ts"].concat(es2015LibrarySources, hostsLibrarySources, "dom.iterable.d.ts") }
160-
].concat(es2015LibrarySourceMap, es2016LibrarySourceMap, es2017LibrarySourceMap);
169+
].concat(es2015LibrarySourceMap, es2016LibrarySourceMap, es2017LibrarySourceMap, esnextLibrarySourceMap);
161170

162171
const libraryTargets = librarySourceMap.map(function(f) {
163172
return path.join(builtLocalDirectory, f.target);

Jakefile.js

+11-2
Original file line numberDiff line numberDiff line change
@@ -174,13 +174,21 @@ var es2016LibrarySourceMap = es2016LibrarySource.map(function (source) {
174174
var es2017LibrarySource = [
175175
"es2017.object.d.ts",
176176
"es2017.sharedmemory.d.ts",
177-
"es2017.string.d.ts",
177+
"es2017.string.d.ts"
178178
];
179179

180180
var es2017LibrarySourceMap = es2017LibrarySource.map(function (source) {
181181
return { target: "lib." + source, sources: ["header.d.ts", source] };
182182
});
183183

184+
var esnextLibrarySource = [
185+
"esnext.asynciterable.d.ts"
186+
];
187+
188+
var esnextLibrarySourceMap = esnextLibrarySource.map(function (source) {
189+
return { target: "lib." + source, sources: ["header.d.ts", source] };
190+
});
191+
184192
var hostsLibrarySources = ["dom.generated.d.ts", "webworker.importscripts.d.ts", "scripthost.d.ts"];
185193

186194
var librarySourceMap = [
@@ -195,11 +203,12 @@ var librarySourceMap = [
195203
{ target: "lib.es2015.d.ts", sources: ["header.d.ts", "es2015.d.ts"] },
196204
{ target: "lib.es2016.d.ts", sources: ["header.d.ts", "es2016.d.ts"] },
197205
{ target: "lib.es2017.d.ts", sources: ["header.d.ts", "es2017.d.ts"] },
206+
{ target: "lib.esnext.d.ts", sources: ["header.d.ts", "esnext.d.ts"] },
198207

199208
// JavaScript + all host library
200209
{ target: "lib.d.ts", sources: ["header.d.ts", "es5.d.ts"].concat(hostsLibrarySources) },
201210
{ target: "lib.es6.d.ts", sources: ["header.d.ts", "es5.d.ts"].concat(es2015LibrarySources, hostsLibrarySources, "dom.iterable.d.ts") }
202-
].concat(es2015LibrarySourceMap, es2016LibrarySourceMap, es2017LibrarySourceMap);
211+
].concat(es2015LibrarySourceMap, es2016LibrarySourceMap, es2017LibrarySourceMap, esnextLibrarySourceMap);
203212

204213
var libraryTargets = librarySourceMap.map(function (f) {
205214
return path.join(builtLocalDirectory, f.target);

src/compiler/binder.ts

+25-20
Original file line numberDiff line numberDiff line change
@@ -957,6 +957,9 @@ namespace ts {
957957
const postLoopLabel = createBranchLabel();
958958
addAntecedent(preLoopLabel, currentFlow);
959959
currentFlow = preLoopLabel;
960+
if (node.kind === SyntaxKind.ForOfStatement) {
961+
bind(node.awaitModifier);
962+
}
960963
bind(node.expression);
961964
addAntecedent(postLoopLabel, currentFlow);
962965
bind(node.initializer);
@@ -2407,7 +2410,7 @@ namespace ts {
24072410

24082411
function bindFunctionDeclaration(node: FunctionDeclaration) {
24092412
if (!isDeclarationFile(file) && !isInAmbientContext(node)) {
2410-
if (isAsyncFunctionLike(node)) {
2413+
if (isAsyncFunction(node)) {
24112414
emitFlags |= NodeFlags.HasAsyncFunctions;
24122415
}
24132416
}
@@ -2424,7 +2427,7 @@ namespace ts {
24242427

24252428
function bindFunctionExpression(node: FunctionExpression) {
24262429
if (!isDeclarationFile(file) && !isInAmbientContext(node)) {
2427-
if (isAsyncFunctionLike(node)) {
2430+
if (isAsyncFunction(node)) {
24282431
emitFlags |= NodeFlags.HasAsyncFunctions;
24292432
}
24302433
}
@@ -2438,7 +2441,7 @@ namespace ts {
24382441

24392442
function bindPropertyOrMethodOrAccessor(node: Declaration, symbolFlags: SymbolFlags, symbolExcludes: SymbolFlags) {
24402443
if (!isDeclarationFile(file) && !isInAmbientContext(node)) {
2441-
if (isAsyncFunctionLike(node)) {
2444+
if (isAsyncFunction(node)) {
24422445
emitFlags |= NodeFlags.HasAsyncFunctions;
24432446
}
24442447
}
@@ -2872,11 +2875,10 @@ namespace ts {
28722875

28732876
// An async method declaration is ES2017 syntax.
28742877
if (hasModifier(node, ModifierFlags.Async)) {
2875-
transformFlags |= TransformFlags.AssertES2017;
2878+
transformFlags |= node.asteriskToken ? TransformFlags.AssertESNext : TransformFlags.AssertES2017;
28762879
}
28772880

2878-
// Currently, we only support generators that were originally async function bodies.
2879-
if (node.asteriskToken && getEmitFlags(node) & EmitFlags.AsyncFunctionBody) {
2881+
if (node.asteriskToken) {
28802882
transformFlags |= TransformFlags.AssertGenerator;
28812883
}
28822884

@@ -2942,7 +2944,7 @@ namespace ts {
29422944

29432945
// An async function declaration is ES2017 syntax.
29442946
if (modifierFlags & ModifierFlags.Async) {
2945-
transformFlags |= TransformFlags.AssertES2017;
2947+
transformFlags |= node.asteriskToken ? TransformFlags.AssertESNext : TransformFlags.AssertES2017;
29462948
}
29472949

29482950
// function declarations with object rest destructuring are ES Next syntax
@@ -2962,7 +2964,7 @@ namespace ts {
29622964
// down-level generator.
29632965
// Currently we do not support transforming any other generator fucntions
29642966
// down level.
2965-
if (node.asteriskToken && getEmitFlags(node) & EmitFlags.AsyncFunctionBody) {
2967+
if (node.asteriskToken) {
29662968
transformFlags |= TransformFlags.AssertGenerator;
29672969
}
29682970
}
@@ -2984,7 +2986,7 @@ namespace ts {
29842986

29852987
// An async function expression is ES2017 syntax.
29862988
if (hasModifier(node, ModifierFlags.Async)) {
2987-
transformFlags |= TransformFlags.AssertES2017;
2989+
transformFlags |= node.asteriskToken ? TransformFlags.AssertESNext : TransformFlags.AssertES2017;
29882990
}
29892991

29902992
// function expressions with object rest destructuring are ES Next syntax
@@ -3003,9 +3005,7 @@ namespace ts {
30033005
// If a FunctionExpression is generator function and is the body of a
30043006
// transformed async function, then this node can be transformed to a
30053007
// down-level generator.
3006-
// Currently we do not support transforming any other generator fucntions
3007-
// down level.
3008-
if (node.asteriskToken && getEmitFlags(node) & EmitFlags.AsyncFunctionBody) {
3008+
if (node.asteriskToken) {
30093009
transformFlags |= TransformFlags.AssertGenerator;
30103010
}
30113011

@@ -3173,8 +3173,8 @@ namespace ts {
31733173
switch (kind) {
31743174
case SyntaxKind.AsyncKeyword:
31753175
case SyntaxKind.AwaitExpression:
3176-
// async/await is ES2017 syntax
3177-
transformFlags |= TransformFlags.AssertES2017;
3176+
// async/await is ES2017 syntax, but may be ESNext syntax (for async generators)
3177+
transformFlags |= TransformFlags.AssertESNext | TransformFlags.AssertES2017;
31783178
break;
31793179

31803180
case SyntaxKind.PublicKeyword:
@@ -3206,10 +3206,6 @@ namespace ts {
32063206
transformFlags |= TransformFlags.AssertJsx;
32073207
break;
32083208

3209-
case SyntaxKind.ForOfStatement:
3210-
// for-of might be ESNext if it has a rest destructuring
3211-
transformFlags |= TransformFlags.AssertESNext;
3212-
// FALLTHROUGH
32133209
case SyntaxKind.NoSubstitutionTemplateLiteral:
32143210
case SyntaxKind.TemplateHead:
32153211
case SyntaxKind.TemplateMiddle:
@@ -3223,9 +3219,18 @@ namespace ts {
32233219
transformFlags |= TransformFlags.AssertES2015;
32243220
break;
32253221

3222+
case SyntaxKind.ForOfStatement:
3223+
// This node is either ES2015 syntax or ES2017 syntax (if it is a for-await-of).
3224+
if ((<ForOfStatement>node).awaitModifier) {
3225+
transformFlags |= TransformFlags.AssertESNext;
3226+
}
3227+
transformFlags |= TransformFlags.AssertES2015;
3228+
break;
3229+
32263230
case SyntaxKind.YieldExpression:
3227-
// This node is ES6 syntax.
3228-
transformFlags |= TransformFlags.AssertES2015 | TransformFlags.ContainsYield;
3231+
// This node is either ES2015 syntax (in a generator) or ES2017 syntax (in an async
3232+
// generator).
3233+
transformFlags |= TransformFlags.AssertESNext | TransformFlags.AssertES2015 | TransformFlags.ContainsYield;
32293234
break;
32303235

32313236
case SyntaxKind.AnyKeyword:

0 commit comments

Comments
 (0)