From 22961e5240765abe63cc9acaa6f7e71e2c66baab Mon Sep 17 00:00:00 2001 From: Vladimir Matveev Date: Mon, 20 Jul 2015 22:40:22 -0700 Subject: [PATCH] System: use bulk exports --- src/compiler/emitter.ts | 25 ++++++++++++------ tests/baselines/reference/systemModule11.js | 28 +++++++++++++++------ tests/baselines/reference/systemModule9.js | 4 ++- 3 files changed, 41 insertions(+), 16 deletions(-) diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 2c235f9fdca..fd225e15cde 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -5756,6 +5756,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi write(`function ${exportStarFunction}(m) {`); increaseIndent(); writeLine(); + write(`var exports = {};`); + writeLine(); write(`for(var n in m) {`); increaseIndent(); writeLine(); @@ -5763,10 +5765,12 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi if (localNames) { write(`&& !${localNames}.hasOwnProperty(n)`); } - write(`) ${exportFunctionForFile}(n, m[n]);`); + write(`) exports[n] = m[n];`); decreaseIndent(); writeLine(); write("}"); + writeLine(); + write(`${exportFunctionForFile}(exports);`) decreaseIndent(); writeLine(); write("}"); @@ -6099,16 +6103,23 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi if ((importNode).exportClause) { // export {a, b as c} from 'foo' // emit as: - // exports('a', _foo["a"]) - // exports('c', _foo["b"]) + // var reexports = {} + // reexports['a'] = _foo["a"]; + // reexports['c'] = _foo["b"]; + // exports_(reexports); + let reexportsVariableName = makeUniqueName("reexports"); + writeLine(); + write(`var ${reexportsVariableName} = {};`) + writeLine(); for (let e of (importNode).exportClause.elements) { - writeLine(); - write(`${exportFunctionForFile}("`); + write(`${reexportsVariableName}["`); emitNodeWithoutSourceMap(e.name); - write(`", ${parameterName}["`); + write(`"] = ${parameterName}["`); emitNodeWithoutSourceMap(e.propertyName || e.name); - write(`"]);`); + write(`"];`); + writeLine(); } + write(`${exportFunctionForFile}(${reexportsVariableName});`); } else { writeLine(); diff --git a/tests/baselines/reference/systemModule11.js b/tests/baselines/reference/systemModule11.js index 55011214042..34dd0d3df5f 100644 --- a/tests/baselines/reference/systemModule11.js +++ b/tests/baselines/reference/systemModule11.js @@ -51,9 +51,11 @@ System.register(['bar'], function(exports_1) { 'foo': true }; function exportStar_1(m) { + var exports = {}; for(var n in m) { - if (n !== "default"&& !exportedNames_1.hasOwnProperty(n)) exports_1(n, m[n]); + if (n !== "default"&& !exportedNames_1.hasOwnProperty(n)) exports[n] = m[n]; } + exports_1(exports); } return { setters:[ @@ -72,9 +74,11 @@ System.register(['bar'], function(exports_1) { 'y1': true }; function exportStar_1(m) { + var exports = {}; for(var n in m) { - if (n !== "default"&& !exportedNames_1.hasOwnProperty(n)) exports_1(n, m[n]); + if (n !== "default"&& !exportedNames_1.hasOwnProperty(n)) exports[n] = m[n]; } + exports_1(exports); } return { setters:[ @@ -96,15 +100,19 @@ System.register(['a', 'bar'], function(exports_1) { 'z': true }; function exportStar_1(m) { + var exports = {}; for(var n in m) { - if (n !== "default"&& !exportedNames_1.hasOwnProperty(n)) exports_1(n, m[n]); + if (n !== "default"&& !exportedNames_1.hasOwnProperty(n)) exports[n] = m[n]; } + exports_1(exports); } return { setters:[ function (_a_1) { - exports_1("x", _a_1["x"]); - exports_1("z", _a_1["y"]); + var reexports_1 = {}; + reexports_1["x"] = _a_1["x"]; + reexports_1["z"] = _a_1["y"]; + exports_1(reexports_1); }, function (_bar_1) { exportStar_1(_bar_1); @@ -123,8 +131,10 @@ System.register(['a'], function(exports_1) { return { setters:[ function (_a_1) { - exports_1("s", _a_1["s"]); - exports_1("s2", _a_1["s1"]); + var reexports_1 = {}; + reexports_1["s"] = _a_1["s"]; + reexports_1["s2"] = _a_1["s1"]; + exports_1(reexports_1); }], execute: function() { exports_1("z", z); @@ -136,9 +146,11 @@ System.register(['a'], function(exports_1) { System.register(['a'], function(exports_1) { function foo() { } function exportStar_1(m) { + var exports = {}; for(var n in m) { - if (n !== "default") exports_1(n, m[n]); + if (n !== "default") exports[n] = m[n]; } + exports_1(exports); } return { setters:[ diff --git a/tests/baselines/reference/systemModule9.js b/tests/baselines/reference/systemModule9.js index af05948c351..c282a47b686 100644 --- a/tests/baselines/reference/systemModule9.js +++ b/tests/baselines/reference/systemModule9.js @@ -30,9 +30,11 @@ System.register(['file1', 'file2', 'file3', 'file4', 'file5', 'file6', 'file7'], 'z': true }; function exportStar_1(m) { + var exports = {}; for(var n in m) { - if (n !== "default"&& !exportedNames_1.hasOwnProperty(n)) exports_1(n, m[n]); + if (n !== "default"&& !exportedNames_1.hasOwnProperty(n)) exports[n] = m[n]; } + exports_1(exports); } return { setters:[