Skip to content

Commit d057f56

Browse files
committed
Merge pull request #3945 from Microsoft/bulkReexportInSystem
System: use batching when doing star exports
2 parents 45affe4 + 22961e5 commit d057f56

File tree

3 files changed

+41
-16
lines changed

3 files changed

+41
-16
lines changed

Diff for: src/compiler/emitter.ts

+18-7
Original file line numberDiff line numberDiff line change
@@ -5779,17 +5779,21 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
57795779
write(`function ${exportStarFunction}(m) {`);
57805780
increaseIndent();
57815781
writeLine();
5782+
write(`var exports = {};`);
5783+
writeLine();
57825784
write(`for(var n in m) {`);
57835785
increaseIndent();
57845786
writeLine();
57855787
write(`if (n !== "default"`);
57865788
if (localNames) {
57875789
write(`&& !${localNames}.hasOwnProperty(n)`);
57885790
}
5789-
write(`) ${exportFunctionForFile}(n, m[n]);`);
5791+
write(`) exports[n] = m[n];`);
57905792
decreaseIndent();
57915793
writeLine();
57925794
write("}");
5795+
writeLine();
5796+
write(`${exportFunctionForFile}(exports);`)
57935797
decreaseIndent();
57945798
writeLine();
57955799
write("}");
@@ -6122,16 +6126,23 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
61226126
if ((<ExportDeclaration>importNode).exportClause) {
61236127
// export {a, b as c} from 'foo'
61246128
// emit as:
6125-
// exports('a', _foo["a"])
6126-
// exports('c', _foo["b"])
6129+
// var reexports = {}
6130+
// reexports['a'] = _foo["a"];
6131+
// reexports['c'] = _foo["b"];
6132+
// exports_(reexports);
6133+
let reexportsVariableName = makeUniqueName("reexports");
6134+
writeLine();
6135+
write(`var ${reexportsVariableName} = {};`)
6136+
writeLine();
61276137
for (let e of (<ExportDeclaration>importNode).exportClause.elements) {
6128-
writeLine();
6129-
write(`${exportFunctionForFile}("`);
6138+
write(`${reexportsVariableName}["`);
61306139
emitNodeWithoutSourceMap(e.name);
6131-
write(`", ${parameterName}["`);
6140+
write(`"] = ${parameterName}["`);
61326141
emitNodeWithoutSourceMap(e.propertyName || e.name);
6133-
write(`"]);`);
6142+
write(`"];`);
6143+
writeLine();
61346144
}
6145+
write(`${exportFunctionForFile}(${reexportsVariableName});`);
61356146
}
61366147
else {
61376148
writeLine();

Diff for: tests/baselines/reference/systemModule11.js

+20-8
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,11 @@ System.register(['bar'], function(exports_1) {
5151
'foo': true
5252
};
5353
function exportStar_1(m) {
54+
var exports = {};
5455
for(var n in m) {
55-
if (n !== "default"&& !exportedNames_1.hasOwnProperty(n)) exports_1(n, m[n]);
56+
if (n !== "default"&& !exportedNames_1.hasOwnProperty(n)) exports[n] = m[n];
5657
}
58+
exports_1(exports);
5759
}
5860
return {
5961
setters:[
@@ -72,9 +74,11 @@ System.register(['bar'], function(exports_1) {
7274
'y1': true
7375
};
7476
function exportStar_1(m) {
77+
var exports = {};
7578
for(var n in m) {
76-
if (n !== "default"&& !exportedNames_1.hasOwnProperty(n)) exports_1(n, m[n]);
79+
if (n !== "default"&& !exportedNames_1.hasOwnProperty(n)) exports[n] = m[n];
7780
}
81+
exports_1(exports);
7882
}
7983
return {
8084
setters:[
@@ -96,15 +100,19 @@ System.register(['a', 'bar'], function(exports_1) {
96100
'z': true
97101
};
98102
function exportStar_1(m) {
103+
var exports = {};
99104
for(var n in m) {
100-
if (n !== "default"&& !exportedNames_1.hasOwnProperty(n)) exports_1(n, m[n]);
105+
if (n !== "default"&& !exportedNames_1.hasOwnProperty(n)) exports[n] = m[n];
101106
}
107+
exports_1(exports);
102108
}
103109
return {
104110
setters:[
105111
function (_a_1) {
106-
exports_1("x", _a_1["x"]);
107-
exports_1("z", _a_1["y"]);
112+
var reexports_1 = {};
113+
reexports_1["x"] = _a_1["x"];
114+
reexports_1["z"] = _a_1["y"];
115+
exports_1(reexports_1);
108116
},
109117
function (_bar_1) {
110118
exportStar_1(_bar_1);
@@ -123,8 +131,10 @@ System.register(['a'], function(exports_1) {
123131
return {
124132
setters:[
125133
function (_a_1) {
126-
exports_1("s", _a_1["s"]);
127-
exports_1("s2", _a_1["s1"]);
134+
var reexports_1 = {};
135+
reexports_1["s"] = _a_1["s"];
136+
reexports_1["s2"] = _a_1["s1"];
137+
exports_1(reexports_1);
128138
}],
129139
execute: function() {
130140
exports_1("z", z);
@@ -136,9 +146,11 @@ System.register(['a'], function(exports_1) {
136146
System.register(['a'], function(exports_1) {
137147
function foo() { }
138148
function exportStar_1(m) {
149+
var exports = {};
139150
for(var n in m) {
140-
if (n !== "default") exports_1(n, m[n]);
151+
if (n !== "default") exports[n] = m[n];
141152
}
153+
exports_1(exports);
142154
}
143155
return {
144156
setters:[

Diff for: tests/baselines/reference/systemModule9.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,11 @@ System.register(['file1', 'file2', 'file3', 'file4', 'file5', 'file6', 'file7'],
3030
'z': true
3131
};
3232
function exportStar_1(m) {
33+
var exports = {};
3334
for(var n in m) {
34-
if (n !== "default"&& !exportedNames_1.hasOwnProperty(n)) exports_1(n, m[n]);
35+
if (n !== "default"&& !exportedNames_1.hasOwnProperty(n)) exports[n] = m[n];
3536
}
37+
exports_1(exports);
3638
}
3739
return {
3840
setters:[

0 commit comments

Comments
 (0)