fix export of keyword and redirection (#2143)

fixes #2141
fixes #2142
This commit is contained in:
Alex Lam S.L
2017-06-23 03:49:30 +08:00
committed by GitHub
parent 402954bdf3
commit b163b13a0b
3 changed files with 87 additions and 6 deletions

View File

@@ -2327,6 +2327,14 @@ function parse($TEXT, options) {
}
function map_name(is_import) {
function make_symbol(type) {
return new type({
name: as_property_name(),
start: prev(),
end: prev()
});
}
var foreign_type = is_import ? AST_SymbolImportForeign : AST_SymbolExportForeign;
var type = is_import ? AST_SymbolImport : AST_SymbolExport;
var start = S.token;
@@ -2334,16 +2342,16 @@ function parse($TEXT, options) {
var name;
if (is_import) {
foreign_name = as_symbol(foreign_type);
foreign_name = make_symbol(foreign_type);
} else {
name = as_symbol(type);
name = make_symbol(type);
}
if (is("name", "as")) {
next(); // The "as" word
if (is_import) {
name = as_symbol(type);
name = make_symbol(type);
} else {
foreign_name = as_symbol(foreign_type);
foreign_name = make_symbol(foreign_type);
}
} else if (is_import) {
name = new type(foreign_name);

View File

@@ -263,8 +263,9 @@ AST_Toplevel.DEFMETHOD("figure_out_scope", function(options){
s.uses_eval = true;
}
}
var sym = node.scope.find_variable(name);
if (!sym) {
var sym;
if (tw.parent() instanceof AST_NameMapping && tw.parent(1).module_name
|| !(sym = node.scope.find_variable(name))) {
sym = self.def_global(node);
} else if (sym.scope instanceof AST_Lambda && name == "arguments") {
sym.scope.uses_arguments = true;

View File

@@ -154,3 +154,75 @@ issue_2134_2: {
Foo.prototype = {};
}
}
redirection: {
mangle = {
toplevel: true,
}
input: {
let foo = 1, bar = 2;
export { foo as delete };
export { bar as default };
export { foo as var } from "module.js";
}
expect: {
let o = 1, d = 2;
export { o as delete };
export { d as default };
export { foo as var } from "module.js";
}
}
keyword_invalid_1: {
input: {
export { default };
}
expect: {
export { default };
}
}
keyword_invalid_2: {
input: {
export { default as Alias };
}
expect: {
export { default as Alias };
}
}
keyword_invalid_3: {
input: {
export { default as default };
}
expect: {
export { default as default };
}
}
keyword_valid_1: {
input: {
export { default } from "module.js";
}
expect: {
export { default } from "module.js";
}
}
keyword_valid_2: {
input: {
export { default as Alias } from "module.js";
}
expect: {
export { default as Alias } from "module.js";
}
}
keyword_valid_3: {
input: {
export { default as default } from "module.js";
}
expect: {
export { default as default } from "module.js";
}
}