From 74dd1c05586979f5066f565ab5ae52f8bd47f757 Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Tue, 28 Mar 2017 10:19:09 -0700 Subject: [PATCH] Handel empty intializer in system module emit --- src/compiler/transformers/module/system.ts | 4 ++ .../SystemModuleForStatementNoInitializer.js | 42 +++++++++++++++++++ ...temModuleForStatementNoInitializer.symbols | 28 +++++++++++++ ...ystemModuleForStatementNoInitializer.types | 33 +++++++++++++++ .../SystemModuleForStatementNoInitializer.ts | 18 ++++++++ 5 files changed, 125 insertions(+) create mode 100644 tests/baselines/reference/SystemModuleForStatementNoInitializer.js create mode 100644 tests/baselines/reference/SystemModuleForStatementNoInitializer.symbols create mode 100644 tests/baselines/reference/SystemModuleForStatementNoInitializer.types create mode 100644 tests/cases/compiler/SystemModuleForStatementNoInitializer.ts diff --git a/src/compiler/transformers/module/system.ts b/src/compiler/transformers/module/system.ts index 642ac1ce6f..3daeee1e6d 100644 --- a/src/compiler/transformers/module/system.ts +++ b/src/compiler/transformers/module/system.ts @@ -1287,6 +1287,10 @@ namespace ts { * @param node The node to visit. */ function visitForInitializer(node: ForInitializer): ForInitializer { + if (!node) { + return node; + } + if (shouldHoistForInitializer(node)) { let expressions: Expression[]; for (const variable of node.declarations) { diff --git a/tests/baselines/reference/SystemModuleForStatementNoInitializer.js b/tests/baselines/reference/SystemModuleForStatementNoInitializer.js new file mode 100644 index 0000000000..6da7fe2e31 --- /dev/null +++ b/tests/baselines/reference/SystemModuleForStatementNoInitializer.js @@ -0,0 +1,42 @@ +//// [SystemModuleForStatementNoInitializer.ts] + +export { }; + +let i = 0; +let limit = 10; + +for (; i < limit; ++i) { + break; +} + +for (; ; ++i) { + break; +} + +for (; ;) { + break; +} + + +//// [SystemModuleForStatementNoInitializer.js] +System.register([], function (exports_1, context_1) { + "use strict"; + var __moduleName = context_1 && context_1.id; + var i, limit; + return { + setters: [], + execute: function () { + i = 0; + limit = 10; + for (; i < limit; ++i) { + break; + } + for (;; ++i) { + break; + } + for (;;) { + break; + } + } + }; +}); diff --git a/tests/baselines/reference/SystemModuleForStatementNoInitializer.symbols b/tests/baselines/reference/SystemModuleForStatementNoInitializer.symbols new file mode 100644 index 0000000000..e8a7609120 --- /dev/null +++ b/tests/baselines/reference/SystemModuleForStatementNoInitializer.symbols @@ -0,0 +1,28 @@ +=== tests/cases/compiler/SystemModuleForStatementNoInitializer.ts === + +export { }; + +let i = 0; +>i : Symbol(i, Decl(SystemModuleForStatementNoInitializer.ts, 3, 3)) + +let limit = 10; +>limit : Symbol(limit, Decl(SystemModuleForStatementNoInitializer.ts, 4, 3)) + +for (; i < limit; ++i) { +>i : Symbol(i, Decl(SystemModuleForStatementNoInitializer.ts, 3, 3)) +>limit : Symbol(limit, Decl(SystemModuleForStatementNoInitializer.ts, 4, 3)) +>i : Symbol(i, Decl(SystemModuleForStatementNoInitializer.ts, 3, 3)) + + break; +} + +for (; ; ++i) { +>i : Symbol(i, Decl(SystemModuleForStatementNoInitializer.ts, 3, 3)) + + break; +} + +for (; ;) { + break; +} + diff --git a/tests/baselines/reference/SystemModuleForStatementNoInitializer.types b/tests/baselines/reference/SystemModuleForStatementNoInitializer.types new file mode 100644 index 0000000000..b7b46cb589 --- /dev/null +++ b/tests/baselines/reference/SystemModuleForStatementNoInitializer.types @@ -0,0 +1,33 @@ +=== tests/cases/compiler/SystemModuleForStatementNoInitializer.ts === + +export { }; + +let i = 0; +>i : number +>0 : 0 + +let limit = 10; +>limit : number +>10 : 10 + +for (; i < limit; ++i) { +>i < limit : boolean +>i : number +>limit : number +>++i : number +>i : number + + break; +} + +for (; ; ++i) { +>++i : number +>i : number + + break; +} + +for (; ;) { + break; +} + diff --git a/tests/cases/compiler/SystemModuleForStatementNoInitializer.ts b/tests/cases/compiler/SystemModuleForStatementNoInitializer.ts new file mode 100644 index 0000000000..15a0d5ac9e --- /dev/null +++ b/tests/cases/compiler/SystemModuleForStatementNoInitializer.ts @@ -0,0 +1,18 @@ +//@module: system + +export { }; + +let i = 0; +let limit = 10; + +for (; i < limit; ++i) { + break; +} + +for (; ; ++i) { + break; +} + +for (; ;) { + break; +}