Skip to content

Commit 79fa394

Browse files
committed
Cleanup generated code for export default declaration (#2128)
For: ```js export default function f() {} ``` We used to generate: ```js function f() {} var $__default = f; ... = { get default() { return $__default; } } ``` With this change we skip the `$__default` var: ```js function f() {} ... = { get default() { return f; } } ```
1 parent 7681667 commit 79fa394

File tree

3 files changed

+25
-9
lines changed

3 files changed

+25
-9
lines changed

src/codegeneration/ModuleTransformer.js

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,17 @@ export class ModuleTransformer extends ImportRuntimeTrait(TempVarTransformer) {
172172
let returnExpression;
173173
switch (tree.type) {
174174
case EXPORT_DEFAULT:
175-
returnExpression = createIdentifierExpression('$__default');
175+
switch (tree.expression.type) {
176+
case CLASS_DECLARATION:
177+
case FUNCTION_DECLARATION: {
178+
const nameBinding = tree.expression.name;
179+
returnExpression =
180+
createIdentifierExpression(nameBinding.identifierToken);
181+
break;
182+
}
183+
default:
184+
returnExpression = createIdentifierExpression('$__default');
185+
}
176186
break;
177187

178188
case EXPORT_SPECIFIER:
@@ -266,14 +276,8 @@ export class ModuleTransformer extends ImportRuntimeTrait(TempVarTransformer) {
266276
transformExportDefault(tree) {
267277
switch (tree.expression.type) {
268278
case CLASS_DECLARATION:
269-
case FUNCTION_DECLARATION: {
270-
let nameBinding = tree.expression.name;
271-
let name = createIdentifierExpression(nameBinding.identifierToken);
272-
return new AnonBlock(null, [
273-
tree.expression,
274-
parseStatement `var $__default = ${name}`
275-
]);
276-
}
279+
case FUNCTION_DECLARATION:
280+
return tree.expression;
277281
}
278282
return parseStatement `var $__default = ${tree.expression}`;
279283
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import * as m from './resources/default-live.js';
2+
3+
assert.equal(m.default(), 1);
4+
m.changeDefault();
5+
assert.equal(m.default, 2);
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
export default function f() {
2+
return 1;
3+
}
4+
5+
export function changeDefault() {
6+
f = 2;
7+
}

0 commit comments

Comments
 (0)