From 2d45c1ff301e8ae27af77089f53f8f4d726daf6e Mon Sep 17 00:00:00 2001 From: alexlamsl Date: Fri, 26 May 2017 04:35:10 +0800 Subject: [PATCH] improve mangle and tests --- lib/scope.js | 12 ++++++++++-- test/compress/issue-2001.js | 20 +++++++++++++++++--- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/lib/scope.js b/lib/scope.js index 72503205..7890ec31 100644 --- a/lib/scope.js +++ b/lib/scope.js @@ -183,7 +183,8 @@ AST_Toplevel.DEFMETHOD("figure_out_scope", function(options){ node.references = []; } if (node instanceof AST_SymbolLambda) { - mark_export(defun.def_function(node)); + defun.def_function(node); + in_export = false; } else if (node instanceof AST_SymbolDefun) { // Careful here, the scope where this should be defined is @@ -201,7 +202,8 @@ AST_Toplevel.DEFMETHOD("figure_out_scope", function(options){ mark_export(defun.def_variable(node)); } else if (node instanceof AST_SymbolImport) { - mark_export(scope.def_variable(node)); + scope.def_variable(node); + in_export = false; } else if (node instanceof AST_SymbolDefClass) { // This deals with the name of the class being available @@ -212,6 +214,11 @@ AST_Toplevel.DEFMETHOD("figure_out_scope", function(options){ || node instanceof AST_SymbolLet || node instanceof AST_SymbolConst) { var def = ((node instanceof AST_SymbolBlockDeclaration) ? scope : defun).def_variable(node); + if (node instanceof AST_SymbolFunarg) { + in_export = false; + } else { + mark_export(def); + } def.destructuring = in_destructuring; if (defun !== scope) { node.mark_enclosed(options); @@ -224,6 +231,7 @@ AST_Toplevel.DEFMETHOD("figure_out_scope", function(options){ } else if (node instanceof AST_SymbolCatch) { scope.def_variable(node).defun = defun; + in_export = false; } else if (node instanceof AST_LabelRef) { var sym = labels.get(node.name); diff --git a/test/compress/issue-2001.js b/test/compress/issue-2001.js index a6efcb5b..90493aed 100644 --- a/test/compress/issue-2001.js +++ b/test/compress/issue-2001.js @@ -79,10 +79,13 @@ export_mangle_2: { return one - two; }; } - expect_exact: "export default function foo(n,o){return n-o};" + expect_exact: "export default function n(r,t){return r-t};" } export_mangle_3: { + options = { + collapse_vars: true, + } mangle = {} input: { export class C { @@ -92,10 +95,13 @@ export_mangle_3: { } }; } - expect_exact: "export class C{go(n,r){var t=n;return n-r+t}};" + expect_exact: "export class C{go(n,r){return n-r+n}};" } export_mangle_4: { + options = { + collapse_vars: true, + } mangle = {} input: { export default class C { @@ -105,7 +111,7 @@ export_mangle_4: { } }; } - expect_exact: "export default class C{go(n,r){var t=n;return n-r+t}};" + expect_exact: "export default class C{go(n,r){return n-r+n}};" } export_mangle_5: { @@ -119,3 +125,11 @@ export_mangle_5: { } expect_exact: "export default{prop:function(n,r){return n-r}};" } + +export_mangle_6: { + mangle = {} + input: { + export let foo = 1; + } + expect_exact: "export let foo=1;" +}