[Pkg-javascript-commits] [uglifyjs] 410/491: improve synergy between `compress` and `rename` (#2755)
Jonas Smedegaard
dr at jones.dk
Wed Feb 14 19:51:58 UTC 2018
This is an automated email from the git hooks/post-receive script.
js pushed a commit to annotated tag debian/3.3.10-1
in repository uglifyjs.
commit bf832cde167b6de119761d54302977e14b10c00b
Author: Alex Lam S.L <alexlamsl at gmail.com>
Date: Tue Jan 9 17:55:41 2018 +0800
improve synergy between `compress` and `rename` (#2755)
---
lib/minify.js | 1 -
lib/scope.js | 48 ++++++++++++++++++++++--------------------------
test/mocha/minify.js | 2 +-
3 files changed, 23 insertions(+), 28 deletions(-)
diff --git a/lib/minify.js b/lib/minify.js
index aad7d22..a68cbf3 100644
--- a/lib/minify.js
+++ b/lib/minify.js
@@ -141,7 +141,6 @@ function minify(files, options) {
}
if (timings) timings.rename = Date.now();
if (options.rename) {
- SymbolDef.next_id = 1;
toplevel.figure_out_scope(options.mangle);
toplevel.expand_names(options.mangle);
}
diff --git a/lib/scope.js b/lib/scope.js
index a18e92a..af852bb 100644
--- a/lib/scope.js
+++ b/lib/scope.js
@@ -464,59 +464,55 @@ AST_Toplevel.DEFMETHOD("mangle_names", function(options){
}
});
-AST_Toplevel.DEFMETHOD("find_unique_prefix", function(options) {
- var letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_";
+AST_Toplevel.DEFMETHOD("find_colliding_names", function(options) {
var cache = options.cache && options.cache.props;
- var prefixes = Object.create(null);
- options.reserved.forEach(add_prefix);
+ var avoid = Object.create(null);
+ options.reserved.forEach(to_avoid);
this.globals.each(add_def);
this.walk(new TreeWalker(function(node) {
if (node instanceof AST_Scope) node.variables.each(add_def);
if (node instanceof AST_SymbolCatch) add_def(node.definition());
}));
- var prefix, i = 0;
- do {
- prefix = create_name(i++);
- } while (prefixes[prefix]);
- return prefix;
+ return avoid;
- function add_prefix(name) {
- if (/[0-9]$/.test(name)) {
- prefixes[name.replace(/[0-9]+$/, "")] = true;
- }
+ function to_avoid(name) {
+ avoid[name] = true;
}
function add_def(def) {
var name = def.name;
if (def.global && cache && cache.has(name)) name = cache.get(name);
else if (!def.unmangleable(options)) return;
- add_prefix(name);
- }
-
- function create_name(num) {
- var name = "";
- do {
- name += letters[num % letters.length];
- num = Math.floor(num / letters.length);
- } while (num);
- return name;
+ to_avoid(name);
}
});
AST_Toplevel.DEFMETHOD("expand_names", function(options) {
+ base54.reset();
+ base54.sort();
options = this._default_mangler_options(options);
- var prefix = this.find_unique_prefix(options);
+ var avoid = this.find_colliding_names(options);
+ var cname = 0;
this.globals.each(rename);
this.walk(new TreeWalker(function(node) {
if (node instanceof AST_Scope) node.variables.each(rename);
if (node instanceof AST_SymbolCatch) rename(node.definition());
}));
+ function next_name() {
+ var name;
+ do {
+ name = base54(cname++);
+ } while (avoid[name] || !is_identifier(name));
+ return name;
+ }
+
function rename(def) {
- if (def.global || def.unmangleable(options)) return;
+ if (def.global && options.cache) return;
+ if (def.unmangleable(options)) return;
if (member(def.name, options.reserved)) return;
var d = def.redefined();
- def.name = d ? d.name : prefix + def.id;
+ def.name = d ? d.name : next_name();
def.orig.forEach(function(sym) {
sym.name = def.name;
});
diff --git a/test/mocha/minify.js b/test/mocha/minify.js
index d696a25..65392ee 100644
--- a/test/mocha/minify.js
+++ b/test/mocha/minify.js
@@ -383,7 +383,7 @@ describe("minify", function() {
toplevel: true,
},
rename: true,
- }).code, "var a2;(a2=y)(a2);");
+ }).code, "var a;(a=y)(a);");
}
});
});
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-javascript/uglifyjs.git
More information about the Pkg-javascript-commits
mailing list