Skip to content

Commit f3c9bd0

Browse files
authored
Merge pull request webpack#6953 from webpack/refactor/mode_deopt
Change internal representation of harmony export modes
2 parents 1958784 + 24a5699 commit f3c9bd0

File tree

1 file changed

+68
-81
lines changed

1 file changed

+68
-81
lines changed

lib/dependencies/HarmonyExportImportedSpecifierDependency.js

Lines changed: 68 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,20 @@ const HarmonyImportDependency = require("./HarmonyImportDependency");
99
const Template = require("../Template");
1010
const HarmonyLinkingError = require("../HarmonyLinkingError");
1111

12+
const EMPTY_MAP = new Map();
13+
14+
class ExportMode {
15+
constructor(type) {
16+
this.type = type;
17+
this.name = null;
18+
this.map = EMPTY_MAP;
19+
this.module = null;
20+
this.userRequest = null;
21+
}
22+
}
23+
24+
const EMPTY_STAR_MODE = new ExportMode("empty-star");
25+
1226
class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency {
1327
constructor(
1428
request,
@@ -40,81 +54,64 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency {
4054
const importedModule = this.module;
4155

4256
if (!importedModule) {
43-
return {
44-
type: "missing",
45-
userRequest: this.userRequest
46-
};
57+
const mode = new ExportMode("missing");
58+
mode.userRequest = this.userRequest;
59+
return mode;
4760
}
4861

4962
if (
5063
!ignoreUnused &&
5164
(name ? !used : this.originModule.usedExports === false)
5265
) {
53-
return {
54-
type: "unused",
55-
name: name || "*"
56-
};
66+
const mode = new ExportMode("unused");
67+
mode.name = name || "*";
68+
return mode;
5769
}
5870

5971
const strictHarmonyModule = this.originModule.buildMeta.strictHarmonyModule;
6072
if (name && id === "default" && importedModule.buildMeta) {
6173
if (!importedModule.buildMeta.exportsType) {
62-
if (strictHarmonyModule) {
63-
return {
64-
type: "reexport-non-harmony-default-strict",
65-
module: importedModule,
66-
name
67-
};
68-
} else {
69-
return {
70-
type: "reexport-non-harmony-default",
71-
module: importedModule,
72-
name
73-
};
74-
}
74+
const mode = new ExportMode(
75+
strictHarmonyModule
76+
? "reexport-non-harmony-default-strict"
77+
: "reexport-non-harmony-default"
78+
);
79+
mode.name = name;
80+
mode.module = importedModule;
81+
return mode;
7582
} else if (importedModule.buildMeta.exportsType === "named") {
76-
return {
77-
type: "reexport-named-default",
78-
module: importedModule,
79-
name
80-
};
83+
const mode = new ExportMode("reexport-named-default");
84+
mode.name = name;
85+
mode.module = importedModule;
86+
return mode;
8187
}
8288
}
8389

8490
const isNotAHarmonyModule =
8591
importedModule.buildMeta && !importedModule.buildMeta.exportsType;
8692
if (name) {
87-
// export { name as name }
93+
let mode;
8894
if (id) {
95+
// export { name as name }
8996
if (isNotAHarmonyModule && strictHarmonyModule) {
90-
return {
91-
type: "rexport-non-harmony-undefined",
92-
module: importedModule,
93-
name
94-
};
97+
mode = new ExportMode("rexport-non-harmony-undefined");
98+
mode.name = name;
9599
} else {
96-
return {
97-
type: "safe-reexport",
98-
module: importedModule,
99-
map: new Map([[name, id]])
100-
};
100+
mode = new ExportMode("safe-reexport");
101+
mode.map = new Map([[name, id]]);
101102
}
102-
}
103-
104-
// export { * as name }
105-
if (isNotAHarmonyModule && strictHarmonyModule) {
106-
return {
107-
type: "reexport-fake-namespace-object",
108-
module: importedModule,
109-
name
110-
};
111103
} else {
112-
return {
113-
type: "reexport-namespace-object",
114-
module: importedModule,
115-
name
116-
};
104+
// export { * as name }
105+
if (isNotAHarmonyModule && strictHarmonyModule) {
106+
mode = new ExportMode("reexport-fake-namespace-object");
107+
mode.name = name;
108+
} else {
109+
mode = new ExportMode("reexport-namespace-object");
110+
mode.name = name;
111+
}
117112
}
113+
mode.module = importedModule;
114+
return mode;
118115
}
119116

120117
const hasUsedExports = Array.isArray(this.originModule.usedExports);
@@ -141,16 +138,13 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency {
141138
);
142139

143140
if (map.size === 0) {
144-
return {
145-
type: "empty-star"
146-
};
141+
return EMPTY_STAR_MODE;
147142
}
148143

149-
return {
150-
type: "safe-reexport",
151-
module: importedModule,
152-
map
153-
};
144+
const mode = new ExportMode("safe-reexport");
145+
mode.module = importedModule;
146+
mode.map = map;
147+
return mode;
154148
}
155149

156150
const map = new Map(
@@ -166,16 +160,13 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency {
166160
);
167161

168162
if (map.size === 0) {
169-
return {
170-
type: "empty-star"
171-
};
163+
return EMPTY_STAR_MODE;
172164
}
173165

174-
return {
175-
type: "checked-reexport",
176-
module: importedModule,
177-
map
178-
};
166+
const mode = new ExportMode("checked-reexport");
167+
mode.module = importedModule;
168+
mode.map = map;
169+
return mode;
179170
}
180171

181172
if (hasProvidedExports) {
@@ -192,26 +183,22 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency {
192183
);
193184

194185
if (map.size === 0) {
195-
return {
196-
type: "empty-star"
197-
};
186+
return EMPTY_STAR_MODE;
198187
}
199188

200-
return {
201-
type: "safe-reexport",
202-
module: importedModule,
203-
map
204-
};
189+
const mode = new ExportMode("safe-reexport");
190+
mode.module = importedModule;
191+
mode.map = map;
192+
return mode;
205193
}
206194

207-
return {
208-
type: "dynamic-reexport",
209-
module: importedModule
210-
};
195+
const mode = new ExportMode("dynamic-reexport");
196+
mode.module = importedModule;
197+
return mode;
211198
}
212199

213200
getReference() {
214-
const mode = this.getMode();
201+
const mode = this.getMode(false);
215202

216203
switch (mode.type) {
217204
case "missing":
@@ -432,7 +419,7 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS
432419
}
433420

434421
getContent(dep) {
435-
const mode = dep.getMode();
422+
const mode = dep.getMode(false);
436423
const module = dep.originModule;
437424
const importedModule = dep.module;
438425
const importVar = dep.getImportVar();

0 commit comments

Comments
 (0)