fix export of keyword and redirection

fixes #2141
fixes #2142
This commit is contained in:
alexlamsl 2017-06-23 01:32:23 +08:00
parent 402954bdf3
commit 11af06f3e0
3 changed files with 57 additions and 6 deletions

View File

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

View File

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

View File

@ -154,3 +154,45 @@ issue_2134_2: {
Foo.prototype = {}; Foo.prototype = {};
} }
} }
redirection: {
mangle = {
toplevel: true,
}
input: {
let foo = 1;
export { foo as var };
export { foo as var } from "module.js";
}
expect: {
let o = 1;
export { o as var };
export { foo as var } from "module.js";
}
}
keyword_invalid: {
input: {
export { default };
export { default as Alias };
export { default as default };
}
expect: {
export { default };
export { default as Alias };
export { default as default };
}
}
keyword_valid: {
input: {
export { default } from "module.js";
export { default as Alias } from "module.js";
export { default as default } from "module.js";
}
expect: {
export { default } from "module.js";
export { default as Alias } from "module.js";
export { default as default } from "module.js";
}
}