From 6e74b20dd337b6864b63606a695a096e435a9cb1 Mon Sep 17 00:00:00 2001 From: Boopathi Rajaa Date: Wed, 2 May 2018 23:50:20 +0200 Subject: [PATCH 1/2] fix: do not update references for constant violations renaming fix #822 --- .../__tests__/fixtures/issue-822/actual.js | 32 +++++++++++++++++ .../__tests__/fixtures/issue-822/expected.js | 35 +++++++++++++++++++ .../src/index.js | 6 ---- 3 files changed, 67 insertions(+), 6 deletions(-) create mode 100644 packages/babel-plugin-minify-mangle-names/__tests__/fixtures/issue-822/actual.js create mode 100644 packages/babel-plugin-minify-mangle-names/__tests__/fixtures/issue-822/expected.js diff --git a/packages/babel-plugin-minify-mangle-names/__tests__/fixtures/issue-822/actual.js b/packages/babel-plugin-minify-mangle-names/__tests__/fixtures/issue-822/actual.js new file mode 100644 index 000000000..c50da617e --- /dev/null +++ b/packages/babel-plugin-minify-mangle-names/__tests__/fixtures/issue-822/actual.js @@ -0,0 +1,32 @@ +function d3_svg_line(projection) { + var x = d3_geom_pointX, + y = d3_geom_pointY, + defined = d3_true, + interpolate = d3_svg_lineLinear, + interpolateKey = interpolate.key, + tension = 0.7; + + function line(data) { + var segments = [], + points = [], + i = -1, + n = data.length, + d, + fx = d3_functor(x); + function segment() { + segments.push("M", interpolate(projection(points), tension)); + } + while (++i < n) { + if (defined.call(this, (d = data[i]), i)) { + points.push([+fx.call(this, d, i)]); + } else if (points.length) { + segment(); + points = []; + } + } + if (points.length) segment(); + return segments.length ? segments.join("") : null; + } + + return line; +} diff --git a/packages/babel-plugin-minify-mangle-names/__tests__/fixtures/issue-822/expected.js b/packages/babel-plugin-minify-mangle-names/__tests__/fixtures/issue-822/expected.js new file mode 100644 index 000000000..8c61d5a0d --- /dev/null +++ b/packages/babel-plugin-minify-mangle-names/__tests__/fixtures/issue-822/expected.js @@ -0,0 +1,35 @@ +function d3_svg_line(a) { + var c = d3_geom_pointX, + d = d3_geom_pointY, + e = d3_true, + f = d3_svg_lineLinear, + g = f.key, + h = 0.7; + + function b(b) { + var j = [], + k = [], + l = -1, + i = b.length, + m, + d = d3_functor(c); + + function g() { + j.push("M", f(a(k), h)); + } + + while (++l < i) { + if (e.call(this, m = b[l], l)) { + k.push([+d.call(this, m, l)]); + } else if (k.length) { + g(); + k = []; + } + } + + if (k.length) g(); + return j.length ? j.join("") : null; + } + + return b; +} \ No newline at end of file diff --git a/packages/babel-plugin-minify-mangle-names/src/index.js b/packages/babel-plugin-minify-mangle-names/src/index.js index 49d908a3a..3b7b9651f 100644 --- a/packages/babel-plugin-minify-mangle-names/src/index.js +++ b/packages/babel-plugin-minify-mangle-names/src/index.js @@ -387,12 +387,6 @@ module.exports = babel => { if (violations[i].isLabeledStatement()) continue; this.renameBindingIds(violations[i], oldName, newName); - scopeTracker.updateReference( - violations[i].scope, - binding, - oldName, - newName - ); } // update all referenced places From e66b77a5368da40800535141e8caee5763db1df7 Mon Sep 17 00:00:00 2001 From: Boopathi Rajaa Date: Thu, 3 May 2018 00:23:16 +0200 Subject: [PATCH 2/2] add constant violations to references in mangler collect phase --- .../__tests__/fixtures/issue-822/expected.js | 12 ++++++------ .../babel-plugin-minify-mangle-names/src/index.js | 11 +++++++++++ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/packages/babel-plugin-minify-mangle-names/__tests__/fixtures/issue-822/expected.js b/packages/babel-plugin-minify-mangle-names/__tests__/fixtures/issue-822/expected.js index 8c61d5a0d..d47113d3a 100644 --- a/packages/babel-plugin-minify-mangle-names/__tests__/fixtures/issue-822/expected.js +++ b/packages/babel-plugin-minify-mangle-names/__tests__/fixtures/issue-822/expected.js @@ -10,17 +10,17 @@ function d3_svg_line(a) { var j = [], k = [], l = -1, - i = b.length, - m, - d = d3_functor(c); + m = b.length, + n, + o = d3_functor(c); function g() { j.push("M", f(a(k), h)); } - while (++l < i) { - if (e.call(this, m = b[l], l)) { - k.push([+d.call(this, m, l)]); + while (++l < m) { + if (e.call(this, n = b[l], l)) { + k.push([+o.call(this, n, l)]); } else if (k.length) { g(); k = []; diff --git a/packages/babel-plugin-minify-mangle-names/src/index.js b/packages/babel-plugin-minify-mangle-names/src/index.js index 3b7b9651f..1b20fc8e5 100644 --- a/packages/babel-plugin-minify-mangle-names/src/index.js +++ b/packages/babel-plugin-minify-mangle-names/src/index.js @@ -131,6 +131,11 @@ module.exports = babel => { // Collect bindings defined in the scope Object.keys(scope.bindings).forEach(name => { scopeTracker.addBinding(scope.bindings[name]); + + // add all constant violations as references + scope.bindings[name].constantViolations.forEach(() => { + scopeTracker.addReference(scope, scope.bindings[name], name); + }); }); }, @@ -387,6 +392,12 @@ module.exports = babel => { if (violations[i].isLabeledStatement()) continue; this.renameBindingIds(violations[i], oldName, newName); + scopeTracker.updateReference( + violations[i].scope, + binding, + oldName, + newName + ); } // update all referenced places