Skip to content

Commit

Permalink
Deconflict top-level class and function expressions with ids (#2458)
Browse files Browse the repository at this point in the history
  • Loading branch information
lukastaegert committed Sep 16, 2018
1 parent cdfd279 commit d9b479d
Show file tree
Hide file tree
Showing 12 changed files with 62 additions and 2 deletions.
7 changes: 5 additions & 2 deletions src/ast/variables/ExportDefaultVariable.ts
Expand Up @@ -2,6 +2,7 @@ import ClassDeclaration from '../nodes/ClassDeclaration';
import ExportDefaultDeclaration from '../nodes/ExportDefaultDeclaration';
import FunctionDeclaration from '../nodes/FunctionDeclaration';
import Identifier from '../nodes/Identifier';
import * as NodeType from '../nodes/NodeType';
import { EntityPathTracker } from '../utils/EntityPathTracker';
import LocalVariable from './LocalVariable';
import Variable from './Variable';
Expand All @@ -28,8 +29,10 @@ export default class ExportDefaultVariable extends LocalVariable {
exportDefaultDeclaration.declaration,
deoptimizationTracker
);
this.hasId = !!(<FunctionDeclaration | ClassDeclaration>exportDefaultDeclaration.declaration)
.id;
this.hasId =
(exportDefaultDeclaration.declaration.type === NodeType.FunctionDeclaration ||
exportDefaultDeclaration.declaration.type === NodeType.ClassDeclaration) &&
!!(<FunctionDeclaration | ClassDeclaration>exportDefaultDeclaration.declaration).id;
}

addReference(identifier: Identifier) {
Expand Down
@@ -0,0 +1,3 @@
module.exports = {
description: 'deconflict default exported named function and class expressions'
};
@@ -0,0 +1,5 @@
export default class test {
constructor() {
this.name = 'classDeclaration1';
}
}
@@ -0,0 +1,5 @@
export default class test {
constructor() {
this.name = 'classDeclaration2';
}
}
@@ -0,0 +1,5 @@
export default (class test {
constructor() {
this.name = 'classExpression1';
}
})
@@ -0,0 +1,5 @@
export default (class test {
constructor() {
this.name = 'classExpression2';
}
})
@@ -0,0 +1,3 @@
export default function test() {
return 'functionDeclaration1';
};
@@ -0,0 +1,3 @@
export default function test() {
return 'functionDeclaration2';
};
@@ -0,0 +1,3 @@
export default (function test() {
return 'functionExpression1';
});
@@ -0,0 +1,3 @@
export default (function test() {
return 'functionExpression2';
});
@@ -0,0 +1,19 @@
import ClassDeclaration1 from './classDeclaration1';
import ClassDeclaration2 from './classDeclaration2';
import ClassExpression1 from './classExpression1';
import ClassExpression2 from './classExpression2';
import functionDeclaration1 from './functionDeclaration1';
import functionDeclaration2 from './functionDeclaration2';
import functionExpression1 from './functionExpression1';
import functionExpression2 from './functionExpression2';
import { test } from './named.js';

assert.equal(test(), 'named');
assert.equal(functionDeclaration1(), 'functionDeclaration1');
assert.equal(functionDeclaration2(), 'functionDeclaration2');
assert.equal(functionExpression1(), 'functionExpression1');
assert.equal(functionExpression2(), 'functionExpression2');
assert.equal((new ClassDeclaration1()).name, 'classDeclaration1');
assert.equal((new ClassDeclaration2()).name, 'classDeclaration2');
assert.equal((new ClassExpression1()).name, 'classExpression1');
assert.equal((new ClassExpression2()).name, 'classExpression2');
@@ -0,0 +1,3 @@
export const test = function() {
return 'named';
};

0 comments on commit d9b479d

Please sign in to comment.