fix export related issues (#2005)

- `mangle` non-exported names
- `unused` on `export` of `function`
- `hoist_funs` on `export`
- `export default`
  - prohibit definition statements
  - parse `AST_Defun` properly
  - drop only unused class and function names


fixes #2001
fixes #2004
This commit is contained in:
Alex Lam S.L
2017-05-26 13:35:40 +08:00
committed by GitHub
parent 02811ce35e
commit 39d4d7e20a
4 changed files with 270 additions and 72 deletions

View File

@@ -2417,14 +2417,26 @@ function parse($TEXT, options) {
}
}
var is_definition = is("keyword", "var")
|| is("keyword", "let")
|| is("keyword", "const")
|| is("keyword", "function") && !is_default;
var is_definition = is("keyword", "var") || is("keyword", "let") || is("keyword", "const");
if (is_definition) {
if (is_default) unexpected();
exported_definition = statement();
} else if (is("keyword", "class")) {
var cls = expr_atom(false);
if (cls.name) {
cls.name = new AST_SymbolDefClass(cls.name);
exported_definition = new AST_DefClass(cls);
} else {
exported_value = cls;
}
} else if (is("keyword", "function")) {
exported_value = expr_atom(false);
var func = expr_atom(false);
if (func.name) {
func.name = new AST_SymbolDefun(func.name);
exported_definition = new AST_Defun(func);
} else {
exported_value = func;
}
} else {
exported_value = expression(false);
semicolon();