Skip to content

Commit 09e47d0

Browse files
authored
Fixed crash when transforming modules with top-level if statements incorrectly containining export statements (#59375)
1 parent c6c4299 commit 09e47d0

15 files changed

+209
-2
lines changed

src/compiler/transformers/module/module.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1019,7 +1019,7 @@ export function transformModule(context: TransformationContext): (x: SourceFile
10191019
return factory.updateIfStatement(
10201020
node,
10211021
visitNode(node.expression, visitor, isExpression),
1022-
Debug.checkDefined(visitNode(node.thenStatement, topLevelNestedVisitor, isStatement, factory.liftToBlock)),
1022+
visitNode(node.thenStatement, topLevelNestedVisitor, isStatement, factory.liftToBlock) ?? factory.createBlock([]),
10231023
visitNode(node.elseStatement, topLevelNestedVisitor, isStatement, factory.liftToBlock),
10241024
);
10251025
}

src/compiler/transformers/module/system.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1445,7 +1445,7 @@ export function transformSystemModule(context: TransformationContext): (x: Sourc
14451445
return factory.updateIfStatement(
14461446
node,
14471447
visitNode(node.expression, visitor, isExpression),
1448-
Debug.checkDefined(visitNode(node.thenStatement, topLevelNestedVisitor, isStatement, factory.liftToBlock)),
1448+
visitNode(node.thenStatement, topLevelNestedVisitor, isStatement, factory.liftToBlock) ?? factory.createBlock([]),
14491449
visitNode(node.elseStatement, topLevelNestedVisitor, isStatement, factory.liftToBlock),
14501450
);
14511451
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
exportNonInitializedVariablesInIfThenStatementNoCrash1.ts(4,1): error TS1184: Modifiers cannot appear here.
2+
exportNonInitializedVariablesInIfThenStatementNoCrash1.ts(4,14): error TS1155: 'const' declarations must be initialized.
3+
exportNonInitializedVariablesInIfThenStatementNoCrash1.ts(4,26): error TS2304: Cannot find name 'CssExports'.
4+
5+
6+
==== exportNonInitializedVariablesInIfThenStatementNoCrash1.ts (3 errors) ====
7+
// https://github.com/microsoft/TypeScript/issues/59373
8+
9+
if (true)
10+
export const cssExports: CssExports;
11+
~~~~~~
12+
!!! error TS1184: Modifiers cannot appear here.
13+
~~~~~~~~~~
14+
!!! error TS1155: 'const' declarations must be initialized.
15+
~~~~~~~~~~
16+
!!! error TS2304: Cannot find name 'CssExports'.
17+
export default cssExports;
18+
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
//// [tests/cases/conformance/externalModules/exportNonInitializedVariablesInIfThenStatementNoCrash1.ts] ////
2+
3+
//// [exportNonInitializedVariablesInIfThenStatementNoCrash1.ts]
4+
// https://github.com/microsoft/TypeScript/issues/59373
5+
6+
if (true)
7+
export const cssExports: CssExports;
8+
export default cssExports;
9+
10+
11+
//// [exportNonInitializedVariablesInIfThenStatementNoCrash1.js]
12+
"use strict";
13+
// https://github.com/microsoft/TypeScript/issues/59373
14+
Object.defineProperty(exports, "__esModule", { value: true });
15+
if (true) { }
16+
exports.default = exports.cssExports;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
//// [tests/cases/conformance/externalModules/exportNonInitializedVariablesInIfThenStatementNoCrash1.ts] ////
2+
3+
=== exportNonInitializedVariablesInIfThenStatementNoCrash1.ts ===
4+
// https://github.com/microsoft/TypeScript/issues/59373
5+
6+
if (true)
7+
export const cssExports: CssExports;
8+
>cssExports : Symbol(cssExports, Decl(exportNonInitializedVariablesInIfThenStatementNoCrash1.ts, 3, 12))
9+
>CssExports : Symbol(CssExports)
10+
11+
export default cssExports;
12+
>cssExports : Symbol(cssExports, Decl(exportNonInitializedVariablesInIfThenStatementNoCrash1.ts, 3, 12))
13+
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
//// [tests/cases/conformance/externalModules/exportNonInitializedVariablesInIfThenStatementNoCrash1.ts] ////
2+
3+
=== exportNonInitializedVariablesInIfThenStatementNoCrash1.ts ===
4+
// https://github.com/microsoft/TypeScript/issues/59373
5+
6+
if (true)
7+
>true : true
8+
> : ^^^^
9+
10+
export const cssExports: CssExports;
11+
>cssExports : CssExports
12+
> : ^^^^^^^^^^
13+
14+
export default cssExports;
15+
>cssExports : CssExports
16+
> : ^^^^^^^^^^
17+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
exportNonInitializedVariablesInIfThenStatementNoCrash1.ts(4,1): error TS1184: Modifiers cannot appear here.
2+
exportNonInitializedVariablesInIfThenStatementNoCrash1.ts(4,14): error TS1155: 'const' declarations must be initialized.
3+
exportNonInitializedVariablesInIfThenStatementNoCrash1.ts(4,26): error TS2304: Cannot find name 'CssExports'.
4+
5+
6+
==== exportNonInitializedVariablesInIfThenStatementNoCrash1.ts (3 errors) ====
7+
// https://github.com/microsoft/TypeScript/issues/59373
8+
9+
if (true)
10+
export const cssExports: CssExports;
11+
~~~~~~
12+
!!! error TS1184: Modifiers cannot appear here.
13+
~~~~~~~~~~
14+
!!! error TS1155: 'const' declarations must be initialized.
15+
~~~~~~~~~~
16+
!!! error TS2304: Cannot find name 'CssExports'.
17+
export default cssExports;
18+
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
//// [tests/cases/conformance/externalModules/exportNonInitializedVariablesInIfThenStatementNoCrash1.ts] ////
2+
3+
//// [exportNonInitializedVariablesInIfThenStatementNoCrash1.ts]
4+
// https://github.com/microsoft/TypeScript/issues/59373
5+
6+
if (true)
7+
export const cssExports: CssExports;
8+
export default cssExports;
9+
10+
11+
//// [exportNonInitializedVariablesInIfThenStatementNoCrash1.js]
12+
// https://github.com/microsoft/TypeScript/issues/59373
13+
if (true)
14+
export var cssExports;
15+
export default cssExports;
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
//// [tests/cases/conformance/externalModules/exportNonInitializedVariablesInIfThenStatementNoCrash1.ts] ////
2+
3+
=== exportNonInitializedVariablesInIfThenStatementNoCrash1.ts ===
4+
// https://github.com/microsoft/TypeScript/issues/59373
5+
6+
if (true)
7+
export const cssExports: CssExports;
8+
>cssExports : Symbol(cssExports, Decl(exportNonInitializedVariablesInIfThenStatementNoCrash1.ts, 3, 12))
9+
>CssExports : Symbol(CssExports)
10+
11+
export default cssExports;
12+
>cssExports : Symbol(cssExports, Decl(exportNonInitializedVariablesInIfThenStatementNoCrash1.ts, 3, 12))
13+
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
//// [tests/cases/conformance/externalModules/exportNonInitializedVariablesInIfThenStatementNoCrash1.ts] ////
2+
3+
=== exportNonInitializedVariablesInIfThenStatementNoCrash1.ts ===
4+
// https://github.com/microsoft/TypeScript/issues/59373
5+
6+
if (true)
7+
>true : true
8+
> : ^^^^
9+
10+
export const cssExports: CssExports;
11+
>cssExports : CssExports
12+
> : ^^^^^^^^^^
13+
14+
export default cssExports;
15+
>cssExports : CssExports
16+
> : ^^^^^^^^^^
17+

0 commit comments

Comments
 (0)