Skip to content

Commit

Permalink
feat(es/minifier): Implement more evaluation rules (#4030)
Browse files Browse the repository at this point in the history
  • Loading branch information
kdy1 committed Mar 21, 2022
1 parent 2e48c9f commit c6f8742
Show file tree
Hide file tree
Showing 73 changed files with 291 additions and 196 deletions.
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
var E, M;
(function(E) {
!function(E) {
E[E.a = 0] = "a", E[E.b = 1] = "b", E[E.c = 2] = "c";
})(E || (E = {})), function(M1) {
}(E || (E = {})), function(M1) {
var a;
M1.a = a;
}(M || (M = {})), new class {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ var E, M, C = function() {
}
return C.foo = function() {}, C;
}();
(function(E) {
!function(E) {
E[E.a = 0] = "a", E[E.b = 1] = "b", E[E.c = 2] = "c";
})(E || (E = {})), function(M1) {
}(E || (E = {})), function(M1) {
var a;
M1.a = a;
}(M || (M = {})), new C(), E.a;
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ var E, M;
class C {
static foo() {}
}
(function(E) {
!function(E) {
E[E.a = 0] = "a", E[E.b = 1] = "b", E[E.c = 2] = "c";
})(E || (E = {})), function(M1) {
}(E || (E = {})), function(M1) {
var a;
M1.a = a;
}(M || (M = {})), E.a + new C(), E.a + C.foo(), E.a;
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ var E, M, C = function() {
}
return C.foo = function() {}, C;
}();
(function(E) {
!function(E) {
E[E.a = 0] = "a", E[E.b = 1] = "b", E[E.c = 2] = "c";
})(E || (E = {})), function(M1) {
}(E || (E = {})), function(M1) {
var a;
M1.a = a;
}(M || (M = {})), E.a + new C(), E.a + C.foo(), E.a;
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
var E, F;
(function(E) {
!function(E) {
E[E.a = 0] = "a", E[E.b = 1] = "b";
})(E || (E = {})), function(F) {
}(E || (E = {})), function(F) {
F[F.c = 0] = "c", F[F.d = 1] = "d";
}(F || (F = {})), E.a, E.a + E.b, E.a + E.b, E.a + F.c;
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
var E, F;
(function(E) {
!function(E) {
E[E.a = 0] = "a", E[E.b = 1] = "b";
})(E || (E = {})), function(F) {
}(E || (E = {})), function(F) {
F[F.c = 0] = "c", F[F.d = 1] = "d";
}(F || (F = {})), E.a, E.a + E.b, E.a + E.b, E.a + F.c;
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
var E, F;
(function(E) {
!function(E) {
E[E.a = 0] = "a", E[E.b = 1] = "b";
})(E || (E = {})), function(F) {
}(E || (E = {})), function(F) {
F[F.c = 0] = "c", F[F.d = 1] = "d";
}(F || (F = {})), E.a, E.a, E.a * E.b, E.a, E.b, E.b, E.b, E.a, E.a, E.a / E.b, E.a, E.b, E.b, E.b, E.a, E.a, E.a % E.b, E.a, E.b, E.b, E.b, E.a, E.a, E.a - E.b, E.a, E.b, E.b, E.b, E.a, E.a, E.a << E.b, E.a, E.b, E.b, E.b, E.a, E.a, E.a >> E.b, E.a, E.b, E.b, E.b, E.a, E.a, E.a >>> E.b, E.a, E.b, E.b, E.b, E.a, E.a, E.a & E.b, E.a, E.b, E.b, E.b, E.a, E.a, E.a ^ E.b, E.a, E.b, E.b, E.b, E.a, E.a, E.a | E.b, E.a, E.b, E.b, E.b;
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
var E, F;
(function(E) {
!function(E) {
E[E.a = 0] = "a", E[E.b = 1] = "b";
})(E || (E = {})), function(F) {
}(E || (E = {})), function(F) {
F[F.c = 0] = "c", F[F.d = 1] = "d";
}(F || (F = {})), E.a, E.a, E.a * E.b, E.a, E.b, E.b, E.b, E.a, E.a, E.a / E.b, E.a, E.b, E.b, E.b, E.a, E.a, E.a % E.b, E.a, E.b, E.b, E.b, E.a, E.a, E.a - E.b, E.a, E.b, E.b, E.b, E.a, E.a, E.a << E.b, E.a, E.b, E.b, E.b, E.a, E.a, E.a >> E.b, E.a, E.b, E.b, E.b, E.a, E.a, E.a >>> E.b, E.a, E.b, E.b, E.b, E.a, E.a, E.a & E.b, E.a, E.b, E.b, E.b, E.a, E.a, E.a ^ E.b, E.a, E.b, E.b, E.b, E.a, E.a, E.a | E.b, E.a, E.b, E.b, E.b;
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
var G;
(function(G) {
!function(G) {
G[G.A = 1] = "A", G[G.B = 2] = "B", G[G.C = 3] = "C", G[G.D = 2] = "D";
})(G || (G = {})), G[1], G.B = 3;
}(G || (G = {})), G[1], G.B = 3;
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
var G;
(function(G) {
!function(G) {
G[G.A = 1] = "A", G[G.B = 2] = "B", G[G.C = 3] = "C", G[G.D = 2] = "D";
})(G || (G = {})), G[1], G.B = 3;
}(G || (G = {})), G[1], G.B = 3;
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
(function() {
!function() {
arguments.length > 0 && void 0 !== arguments[0] && arguments[0];
})(12), function() {
}(12), function() {
arguments.length > 0 && void 0 !== arguments[0] && arguments[0];
}(), function() {
for(var _len = arguments.length, numbers = new Array(_len), _key = 0; _key < _len; _key++)numbers[_key] = arguments[_key];
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
(function() {
!function() {
arguments.length > 0 && void 0 !== arguments[0] && arguments[0];
})(12), function() {
}(12), function() {
arguments.length > 0 && void 0 !== arguments[0] && arguments[0];
}(), function() {
for(var _len = arguments.length, numbers = new Array(_len), _key = 0; _key < _len; _key++)numbers[_key] = arguments[_key];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,9 @@ function g5() {
var ref = swcHelpers.slicedToArray(arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [], 2);
ref[0], ref[1];
}
(function(param) {
!function(param) {
param.x, param.y;
})({
}({
x: 1,
y: 1
}), f2({
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
var E, E2;
function f() {}
(function(E) {
!function(E) {
E[E.A = 0] = "A";
})(E || (E = {})), foo(E.A), foo(1), foo(null), foo2(E.A), foo3(E.A), foo4(E.A), foo5(E.A), foo6(E.A), foo7(E.A), foo8(E.A), foo9(E.A), foo10(E.A), foo11(E.A), foo12(E.A), function(E2) {
}(E || (E = {})), foo(E.A), foo(1), foo(null), foo2(E.A), foo3(E.A), foo4(E.A), foo5(E.A), foo6(E.A), foo7(E.A), foo8(E.A), foo9(E.A), foo10(E.A), foo11(E.A), foo12(E.A), function(E2) {
E2[E2.A = 0] = "A";
}(E2 || (E2 = {})), foo13(E.A), (f || (f = {})).bar = 1, foo14(E.A);
class CC {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
var E, F;
(function(E) {
!function(E) {
E[E.A = 0] = "A";
})(E || (E = {})), function(F) {
}(E || (E = {})), function(F) {
F[F.B = 0] = "B";
}(F || (F = {})), E.A, F.B;
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
var E, F, Others;
import * as swcHelpers from "@swc/helpers";
(function(E) {
!function(E) {
E[E.A = 0] = "A";
})(E || (E = {})), function(F) {
}(E || (E = {})), function(F) {
F[F.B = 0] = "B";
}(F || (F = {})), E.A, F.B, function(Others) {
var C = function() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
var E01, E02, E03, E04, E05, E06, E07, E08, E11, E12, E20;
(function(E01) {
!function(E01) {
E01[E01.A = 0] = "A";
})(E01 || (E01 = {})), function(E02) {
}(E01 || (E01 = {})), function(E02) {
E02[E02.A = 123] = "A";
}(E02 || (E02 = {})), function(E03) {
E03.A = "hello";
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
var E01, E02, E03, E04, E05, E06, E07, E08, E11, E12, E20;
(function(E01) {
!function(E01) {
E01[E01.A = 0] = "A";
})(E01 || (E01 = {})), function(E02) {
}(E01 || (E01 = {})), function(E02) {
E02[E02.A = 123] = "A";
}(E02 || (E02 = {})), function(E03) {
E03.A = "hello";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@ class C {
}
class D {
}
(function(M1) {
!function(M1) {
M1.A = class {
}, M1.F2 = function(x) {
return x.toString();
};
})(M || (M = {})), function(N1) {
}(M || (M = {})), function(N1) {
N1.A = class {
}, N1.F2 = function(x) {
return x.toString();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,15 @@ var M, N, C = function() {
"use strict";
swcHelpers.classCallCheck(this, D);
};
(function(M1) {
!function(M1) {
var A = function() {
"use strict";
swcHelpers.classCallCheck(this, A);
};
M1.A = A, M1.F2 = function(x) {
return x.toString();
};
})(M || (M = {})), function(N1) {
}(M || (M = {})), function(N1) {
var A = function() {
"use strict";
swcHelpers.classCallCheck(this, A);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
var E, F, a, b;
(function(E) {
!function(E) {
E[E.a = 0] = "a", E[E.b = 1] = "b";
})(E || (E = {})), function(F) {
}(E || (E = {})), function(F) {
F[F.c = 0] = "c", F[F.d = 1] = "d";
}(F || (F = {})), Math.pow(E.a, a), Math.pow(E.a, b), Math.pow(E.a, E.b), Math.pow(E.a, 1), Math.pow(a, E.b), Math.pow(b, E.b), Math.pow(1, E.b);
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
var E, F, a, b;
(function(E) {
!function(E) {
E[E.a = 0] = "a", E[E.b = 1] = "b";
})(E || (E = {})), function(F) {
}(E || (E = {})), function(F) {
F[F.c = 0] = "c", F[F.d = 1] = "d";
}(F || (F = {})), Math.pow(E.a, a), Math.pow(E.a, b), Math.pow(E.a, E.b), Math.pow(E.a, 1), Math.pow(a, E.b), Math.pow(b, E.b), Math.pow(1, E.b);
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
var x, E, M;
(function(E) {
!function(E) {
E[E.A = 0] = "A";
})(E || (E = {})), (E = x).A = x, I = x, (M || (M = {})).x = 1, M = x;
}(E || (E = {})), (E = x).A = x, I = x, (M || (M = {})).x = 1, M = x;
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ import * as swcHelpers from "@swc/helpers";
!function(E) {
E[E.A = 0] = "A";
}(E || (E = {})), (E = x).A = x;
var x, E, M, C = function() {
var M, x, E, M1, C = function() {
"use strict";
swcHelpers.classCallCheck(this, C);
};
C = x, I = x, (M || (M = {})).x = 1, M = x;
C = x, I = x, M = M1 || (M1 = {}), M.x = 1, M1 = x;
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ Component, Namespace.Component, Namespace.DeepNamespace.Component, Component, sw
z: !0
}), Component, swcHelpers.extends({}, this.props, {
sound: "moo"
}), Component, swcHelpers.extends({}, x), Component, swcHelpers.extends({}, x, {
}), Component, Component, swcHelpers.extends({}, x), Component, swcHelpers.extends({}, x, {
y: 2
}), Component, swcHelpers.extends({}, x, {
y: 2,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ Component, Namespace.Component, Namespace.DeepNamespace.Component, Component, sw
z: !0
}), Component, swcHelpers.extends({}, this.props, {
sound: "moo"
}), Component, swcHelpers.extends({}, x), Component, swcHelpers.extends({}, x, {
}), Component, Component, swcHelpers.extends({}, x), Component, swcHelpers.extends({}, x, {
y: 2
}), Component, swcHelpers.extends({}, x, {
y: 2,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
(function() {
!0 === new.target.marked;
new.target.marked;
}).marked = !0;
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import * as swcHelpers from "@swc/helpers";
function f() {
!0 === (swcHelpers._instanceof(this, f) ? this.constructor : void 0).marked;
(swcHelpers._instanceof(this, f) ? this.constructor : void 0).marked;
}
f.marked = !0;

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
var a;
a.toString, a = void 0, a = null, a = b, a = c, a = a = d, "object" != typeof b && b.toString(), "object" == typeof b && (a = b), "object" == typeof d && (b = d), d.toString(), d, d.toString(), d, d.toString(), d, d.toString();
a.toString, a = void 0, a = null, a = b, a = c, a = a = d, "object" != typeof b && b.toString(), "object" == typeof b && (a = b), "object" == typeof d && (b = d), d.toString(), d, d.toString(), d, d.toString(), d.toString();
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
var a;
a.toString, a = void 0, a = null, a = b, a = c, a = a = d, "object" != typeof b && b.toString(), "object" == typeof b && (a = b), "object" == typeof d && (b = d), d.toString(), d, d.toString(), d, d.toString(), d, d.toString();
a.toString, a = void 0, a = null, a = b, a = c, a = a = d, "object" != typeof b && b.toString(), "object" == typeof b && (a = b), "object" == typeof d && (b = d), d.toString(), d, d.toString(), d, d.toString(), d.toString();
Original file line number Diff line number Diff line change
Expand Up @@ -84,4 +84,4 @@ var computed = "b", computed2 = "a", o = (o[computed], o[computed2], swcHelpers.
_o = o, o = swcHelpers.objectWithoutProperties(_o, [
computed,
computed2
].map(swcHelpers.toPropertyKey)), (ref1 = _o)[computed], ref1[computed2];
].map(swcHelpers.toPropertyKey)), ref1 = _o, ref1[computed], ref1[computed2];

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@ import * as swcHelpers from "@swc/helpers";
ref = swcHelpers.toArray([
"",
1
]), (ref1 = swcHelpers.slicedToArray(ref.slice(0), 2))[0], ref1[1];
]), ref1 = swcHelpers.slicedToArray(ref.slice(0), 2), ref1[0], ref1[1];
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
import * as swcHelpers from "@swc/helpers";
import Main from "mod";
Foo, swcHelpers.extends({}, Main);
Foo, Foo, swcHelpers.extends({}, Main);
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
import * as swcHelpers from "@swc/helpers";
import Main from "mod";
Foo, swcHelpers.extends({}, Main);
Foo, Foo, swcHelpers.extends({}, Main);
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
var E, M;
(function(E) {
!function(E) {
E[E.A = 0] = "A";
})(E || (E = {})), E.A = null, I = null, (M || (M = {})).x = 1, M = null;
}(E || (E = {})), E.A = null, I = null, (M || (M = {})).x = 1, M = null;
1 change: 1 addition & 0 deletions crates/swc_ecma_codegen/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#![recursion_limit = "1024"]
#![deny(clippy::all)]
#![deny(unused)]
#![allow(clippy::match_like_matches_macro)]
#![allow(clippy::nonminimal_bool)]
#![allow(unused_variables)]
Expand Down
2 changes: 1 addition & 1 deletion crates/swc_ecma_codegen/src/text_writer/basic_impl.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use std::io::{self, Write};

use rustc_hash::FxHashSet;
use swc_common::{sync::Lrc, BytePos, LineCol, SourceMap, Span, DUMMY_SP};
use swc_common::{sync::Lrc, BytePos, LineCol, SourceMap, Span};
use swc_ecma_ast::EsVersion;

use super::{Result, WriteJs};
Expand Down
2 changes: 1 addition & 1 deletion crates/swc_ecma_minifier/src/compress/optimize/bools.rs
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ where
}

pub(super) fn compress_if_stmt_as_expr(&mut self, s: &mut Stmt) {
if !self.options.bools {
if !self.options.conditionals && !self.options.bools {
return;
}

Expand Down

1 comment on commit c6f8742

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark

Benchmark suite Current: c6f8742 Previous: 61f1a37 Ratio
base_tr_fixer 27698 ns/iter (± 567) 22992 ns/iter (± 349) 1.20
base_tr_resolver_and_hygiene 114516 ns/iter (± 10926) 93055 ns/iter (± 27218) 1.23
codegen_es2015 35905 ns/iter (± 697) 30467 ns/iter (± 244) 1.18
codegen_es2016 35868 ns/iter (± 1771) 30398 ns/iter (± 205) 1.18
codegen_es2017 36005 ns/iter (± 741) 30341 ns/iter (± 208) 1.19
codegen_es2018 36072 ns/iter (± 1147) 30384 ns/iter (± 171) 1.19
codegen_es2019 35966 ns/iter (± 4722) 30543 ns/iter (± 243) 1.18
codegen_es2020 35886 ns/iter (± 535) 30488 ns/iter (± 184) 1.18
codegen_es3 35949 ns/iter (± 513) 30430 ns/iter (± 234) 1.18
codegen_es5 35984 ns/iter (± 5057) 30384 ns/iter (± 185) 1.18
full_es2015 160267667 ns/iter (± 28731335) 137760772 ns/iter (± 13651208) 1.16
full_es2016 158737242 ns/iter (± 5981787) 137186677 ns/iter (± 8218002) 1.16
full_es2017 157030114 ns/iter (± 4198235) 136489065 ns/iter (± 11585787) 1.15
full_es2018 155765100 ns/iter (± 5328270) 136186578 ns/iter (± 10434510) 1.14
full_es2019 154642258 ns/iter (± 10908742) 134904679 ns/iter (± 12551137) 1.15
full_es2020 149760421 ns/iter (± 4035459) 126108380 ns/iter (± 8641300) 1.19
full_es3 212541156 ns/iter (± 6107142) 184130325 ns/iter (± 11098656) 1.15
full_es5 200493038 ns/iter (± 9600430) 174411204 ns/iter (± 12953297) 1.15
parser 662412 ns/iter (± 15273) 573845 ns/iter (± 13337) 1.15
ser_ast_node 175 ns/iter (± 4) 147 ns/iter (± 2) 1.19
ser_serde 173 ns/iter (± 1) 147 ns/iter (± 0) 1.18
emit_colors 11808055 ns/iter (± 8554188) 15326889 ns/iter (± 11994750) 0.77
emit_large 60687171 ns/iter (± 82280261) 77165251 ns/iter (± 98572449) 0.79
base_clone 2687188 ns/iter (± 151890) 2384471 ns/iter (± 1240390) 1.13
fold_span 4493084 ns/iter (± 194146) 3861026 ns/iter (± 452844) 1.16
fold_span_panic 4873936 ns/iter (± 368509) 4124225 ns/iter (± 423909) 1.18
visit_mut_span 3226047 ns/iter (± 103192) 2745511 ns/iter (± 91512) 1.18
visit_mut_span_panic 3276176 ns/iter (± 129629) 2798129 ns/iter (± 163191) 1.17
usage_builtin_type 19353766 ns/iter (± 11731035) 15917733 ns/iter (± 9882055) 1.22
usage_property 473214 ns/iter (± 14935) 401770 ns/iter (± 1398) 1.18
boxing_boxed 164 ns/iter (± 0) 134 ns/iter (± 1) 1.22
boxing_boxed_clone 84 ns/iter (± 0) 69 ns/iter (± 2) 1.22
boxing_unboxed 143 ns/iter (± 0) 126 ns/iter (± 0) 1.13
boxing_unboxed_clone 76 ns/iter (± 0) 63 ns/iter (± 0) 1.21
time_10 367 ns/iter (± 11) 310 ns/iter (± 8) 1.18
time_15 769 ns/iter (± 11) 705 ns/iter (± 5) 1.09
time_20 1555 ns/iter (± 56) 1390 ns/iter (± 12) 1.12
time_40 4907 ns/iter (± 294) 7102 ns/iter (± 31) 0.69
time_5 119 ns/iter (± 3) 103 ns/iter (± 1) 1.16
time_60 10536 ns/iter (± 349) 16321 ns/iter (± 48) 0.65
total 0 ns/iter (± 0) 0 ns/iter (± 0) NaN

This comment was automatically generated by workflow using github-action-benchmark.

Please sign in to comment.