Skip to content

Commit 0b3bf33

Browse files
Copilotweswigham
andcommitted
Fix empty block generation in using declaration for-of loops and remove obsolete comment
Co-authored-by: weswigham <2932786+weswigham@users.noreply.github.com>
1 parent 8f3df02 commit 0b3bf33

17 files changed

+12
-44
lines changed

src/compiler/transformers/esnext.ts

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -292,11 +292,6 @@ export function transformESNext(context: TransformationContext): (x: SourceFile
292292
return visitEachChild(node, visitor, context);
293293
}
294294

295-
/**
296-
* Collects all variable declarations that shadow a given identifier name in a statement.
297-
*/
298-
299-
300295
function visitForOfStatement(node: ForOfStatement) {
301296
if (isUsingVariableDeclarationList(node.initializer)) {
302297
// given:
@@ -322,9 +317,17 @@ export function transformESNext(context: TransformationContext): (x: SourceFile
322317
const usingVarStatement = factory.createVariableStatement(/*modifiers*/ undefined, usingVarList);
323318

324319
// Wrap the original loop body in an additional block scope to handle shadowing
325-
const wrappedStatement = isBlock(node.statement) ?
326-
node.statement :
327-
factory.createBlock([node.statement], /*multiLine*/ true);
320+
// Don't create an extra block if the original statement is empty
321+
const isEmptyBlock = isBlock(node.statement) && node.statement.statements.length === 0;
322+
const shouldWrapInBlock = !isEmptyBlock;
323+
324+
const statements: Statement[] = [usingVarStatement];
325+
if (shouldWrapInBlock) {
326+
const wrappedStatement = isBlock(node.statement) ?
327+
node.statement :
328+
factory.createBlock([node.statement], /*multiLine*/ true);
329+
statements.push(wrappedStatement);
330+
}
328331

329332
return visitNode(
330333
factory.updateForOfStatement(
@@ -334,10 +337,7 @@ export function transformESNext(context: TransformationContext): (x: SourceFile
334337
factory.createVariableDeclaration(temp),
335338
], NodeFlags.Const),
336339
node.expression,
337-
factory.createBlock([
338-
usingVarStatement,
339-
wrappedStatement,
340-
], /*multiLine*/ true),
340+
factory.createBlock(statements, /*multiLine*/ true),
341341
),
342342
visitor,
343343
isStatement,

tests/baselines/reference/awaitUsingDeclarationsInForAwaitOf(target=es2015).js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,8 +88,6 @@ function main() {
8888
const env_1 = { stack: [], error: void 0, hasError: false };
8989
try {
9090
const d1 = __addDisposableResource(env_1, d1_1, true);
91-
{
92-
}
9391
}
9492
catch (e_2) {
9593
env_1.error = e_2;

tests/baselines/reference/awaitUsingDeclarationsInForAwaitOf(target=es2017).js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,6 @@ async function main() {
7676
const env_1 = { stack: [], error: void 0, hasError: false };
7777
try {
7878
const d1 = __addDisposableResource(env_1, d1_1, true);
79-
{
80-
}
8179
}
8280
catch (e_2) {
8381
env_1.error = e_2;

tests/baselines/reference/awaitUsingDeclarationsInForAwaitOf(target=es2022).js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,6 @@ async function main() {
6464
const env_1 = { stack: [], error: void 0, hasError: false };
6565
try {
6666
const d1 = __addDisposableResource(env_1, d1_1, true);
67-
{
68-
}
6967
}
7068
catch (e_1) {
7169
env_1.error = e_1;

tests/baselines/reference/awaitUsingDeclarationsInForAwaitOf(target=es5).js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,8 +128,6 @@ function main() {
128128
case 3:
129129
_j.trys.push([3, 4, 5, 8]);
130130
d1 = __addDisposableResource(env_1, d1_1, true);
131-
{
132-
}
133131
return [3 /*break*/, 8];
134132
case 4:
135133
e_1 = _j.sent();

tests/baselines/reference/awaitUsingDeclarationsInForOf.1(target=es2015).js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,6 @@ function main() {
7777
const env_1 = { stack: [], error: void 0, hasError: false };
7878
try {
7979
const d1 = __addDisposableResource(env_1, d1_1, true);
80-
{
81-
}
8280
}
8381
catch (e_1) {
8482
env_1.error = e_1;

tests/baselines/reference/awaitUsingDeclarationsInForOf.1(target=es2017).js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,6 @@ async function main() {
6565
const env_1 = { stack: [], error: void 0, hasError: false };
6666
try {
6767
const d1 = __addDisposableResource(env_1, d1_1, true);
68-
{
69-
}
7068
}
7169
catch (e_1) {
7270
env_1.error = e_1;

tests/baselines/reference/awaitUsingDeclarationsInForOf.1(target=es2022).js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,6 @@ async function main() {
6565
const env_1 = { stack: [], error: void 0, hasError: false };
6666
try {
6767
const d1 = __addDisposableResource(env_1, d1_1, true);
68-
{
69-
}
7068
}
7169
catch (e_1) {
7270
env_1.error = e_1;

tests/baselines/reference/awaitUsingDeclarationsInForOf.1(target=es5).js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,8 +117,6 @@ function main() {
117117
case 2:
118118
_d.trys.push([2, 3, 4, 7]);
119119
d1 = __addDisposableResource(env_1, d1_1, true);
120-
{
121-
}
122120
return [3 /*break*/, 7];
123121
case 3:
124122
e_1 = _d.sent();

tests/baselines/reference/usingDeclarationsInForAwaitOf(target=es2015).js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,6 @@ function main() {
8787
const env_1 = { stack: [], error: void 0, hasError: false };
8888
try {
8989
const d1 = __addDisposableResource(env_1, d1_1, false);
90-
{
91-
}
9290
}
9391
catch (e_2) {
9492
env_1.error = e_2;

0 commit comments

Comments
 (0)