Skip to content

Commit 01391e3

Browse files
authoredSep 30, 2023
fix(es/minifier): Check if object shorthand is skippable for seq inliner (#8036)
**Related issue:** - Closes #7984
1 parent c062536 commit 01391e3

File tree

3 files changed

+46
-30
lines changed

3 files changed

+46
-30
lines changed
 

‎crates/swc_ecma_minifier/src/compress/optimize/sequences.rs

+22-30
Original file line numberDiff line numberDiff line change
@@ -1894,12 +1894,29 @@ impl Optimizer<'_> {
18941894
}
18951895
PropOrSpread::Prop(prop) => {
18961896
// Inline into key
1897-
let key = match &mut **prop {
1897+
let computed = match &mut **prop {
1898+
Prop::Shorthand(_) | Prop::Assign(_) => None,
1899+
Prop::KeyValue(prop) => prop.key.as_mut_computed(),
1900+
Prop::Getter(prop) => prop.key.as_mut_computed(),
1901+
Prop::Setter(prop) => prop.key.as_mut_computed(),
1902+
Prop::Method(prop) => prop.key.as_mut_computed(),
1903+
};
1904+
1905+
if let Some(computed) = computed {
1906+
if self.merge_sequential_expr(a, &mut computed.expr)? {
1907+
return Ok(true);
1908+
}
1909+
1910+
if !self.is_skippable_for_seq(Some(a), &computed.expr) {
1911+
return Ok(false);
1912+
}
1913+
}
1914+
1915+
match &mut **prop {
18981916
Prop::Shorthand(shorthand) => {
18991917
// We can't ignore shorthand properties
19001918
//
19011919
// https://github.com/swc-project/swc/issues/6914
1902-
19031920
let mut new_b = Box::new(Expr::Ident(shorthand.clone()));
19041921
if self.merge_sequential_expr(a, &mut new_b)? {
19051922
*prop = Box::new(Prop::KeyValue(KeyValueProp {
@@ -1908,40 +1925,15 @@ impl Optimizer<'_> {
19081925
shorthand.span.with_ctxt(SyntaxContext::empty()),
19091926
)
19101927
.into(),
1911-
value: new_b,
1928+
value: new_b.clone(),
19121929
}));
19131930
}
19141931

1915-
continue;
1916-
}
1917-
Prop::KeyValue(prop) => Some(&mut prop.key),
1918-
Prop::Assign(_) => None,
1919-
Prop::Getter(prop) => Some(&mut prop.key),
1920-
Prop::Setter(prop) => Some(&mut prop.key),
1921-
Prop::Method(prop) => Some(&mut prop.key),
1922-
};
1923-
1924-
if let Some(PropName::Computed(key)) = key {
1925-
if self.merge_sequential_expr(a, &mut key.expr)? {
1926-
return Ok(true);
1927-
}
1928-
1929-
if !self.is_skippable_for_seq(Some(a), &key.expr) {
1930-
return Ok(false);
1931-
}
1932-
}
1933-
1934-
match &mut **prop {
1935-
Prop::KeyValue(prop) => {
1936-
if self.merge_sequential_expr(a, &mut prop.value)? {
1937-
return Ok(true);
1938-
}
1939-
1940-
if !self.is_skippable_for_seq(Some(a), &prop.value) {
1932+
if !self.is_skippable_for_seq(Some(a), &new_b) {
19411933
return Ok(false);
19421934
}
19431935
}
1944-
Prop::Assign(prop) => {
1936+
Prop::KeyValue(prop) => {
19451937
if self.merge_sequential_expr(a, &mut prop.value)? {
19461938
return Ok(true);
19471939
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
getInitialProps = (code) => {
2+
let statusCode, message;
3+
4+
if (code) {
5+
statusCode = code;
6+
}
7+
8+
switch (statusCode) {
9+
case 404:
10+
message = "404";
11+
break;
12+
default:
13+
message = "500";
14+
}
15+
16+
return { statusCode, message };
17+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
getInitialProps = (code)=>{
2+
let statusCode, message;
3+
return code && (statusCode = code), message = 404 === statusCode ? "404" : "500", {
4+
statusCode,
5+
message
6+
};
7+
};

1 commit comments

Comments
 (1)

github-actions[bot] commented on Sep 30, 2023

@github-actions[bot]

Benchmark

Benchmark suite Current: 01391e3 Previous: 06b6eb9 Ratio
es/full/bugs-1 278685 ns/iter (± 8799) 281753 ns/iter (± 8214) 0.99
es/full/minify/libraries/antd 1306400999 ns/iter (± 7553557) 1310902953 ns/iter (± 6290217) 1.00
es/full/minify/libraries/d3 280564034 ns/iter (± 4398582) 276267250 ns/iter (± 4052925) 1.02
es/full/minify/libraries/echarts 1050579974 ns/iter (± 18955008) 1068183291 ns/iter (± 24378636) 0.98
es/full/minify/libraries/jquery 84228909 ns/iter (± 211767) 83842395 ns/iter (± 312468) 1.00
es/full/minify/libraries/lodash 97849488 ns/iter (± 386897) 97117168 ns/iter (± 457172) 1.01
es/full/minify/libraries/moment 50011759 ns/iter (± 77942) 50227921 ns/iter (± 141711) 1.00
es/full/minify/libraries/react 18061141 ns/iter (± 28242) 17986911 ns/iter (± 69693) 1.00
es/full/minify/libraries/terser 217781149 ns/iter (± 785750) 217090952 ns/iter (± 564132) 1.00
es/full/minify/libraries/three 384443615 ns/iter (± 2360071) 383859496 ns/iter (± 1302227) 1.00
es/full/minify/libraries/typescript 2638394815 ns/iter (± 10720442) 2642355444 ns/iter (± 16280606) 1.00
es/full/minify/libraries/victory 565654261 ns/iter (± 5060400) 562936170 ns/iter (± 8543489) 1.00
es/full/minify/libraries/vue 119507821 ns/iter (± 981115) 119196850 ns/iter (± 380357) 1.00
es/full/codegen/es3 34122 ns/iter (± 99) 34217 ns/iter (± 137) 1.00
es/full/codegen/es5 34013 ns/iter (± 390) 34228 ns/iter (± 45) 0.99
es/full/codegen/es2015 34157 ns/iter (± 86) 34376 ns/iter (± 1709) 0.99
es/full/codegen/es2016 34072 ns/iter (± 85) 34225 ns/iter (± 125) 1.00
es/full/codegen/es2017 33967 ns/iter (± 131) 34247 ns/iter (± 55) 0.99
es/full/codegen/es2018 34195 ns/iter (± 254) 34321 ns/iter (± 133) 1.00
es/full/codegen/es2019 34235 ns/iter (± 116) 34352 ns/iter (± 62) 1.00
es/full/codegen/es2020 34272 ns/iter (± 146) 34201 ns/iter (± 51) 1.00
es/full/all/es3 165339227 ns/iter (± 1567430) 165378325 ns/iter (± 495175) 1.00
es/full/all/es5 157435136 ns/iter (± 726426) 157742655 ns/iter (± 863676) 1.00
es/full/all/es2015 116426100 ns/iter (± 505324) 117999119 ns/iter (± 868427) 0.99
es/full/all/es2016 116052403 ns/iter (± 763786) 116922708 ns/iter (± 758007) 0.99
es/full/all/es2017 115111908 ns/iter (± 897604) 116568097 ns/iter (± 2323613) 0.99
es/full/all/es2018 113507113 ns/iter (± 676021) 114292795 ns/iter (± 612608) 0.99
es/full/all/es2019 112016010 ns/iter (± 880499) 113934104 ns/iter (± 696130) 0.98
es/full/all/es2020 108530499 ns/iter (± 361150) 109367898 ns/iter (± 353843) 0.99
es/full/parser 484037 ns/iter (± 5246) 491699 ns/iter (± 6408) 0.98
es/full/base/fixer 20314 ns/iter (± 191) 17924 ns/iter (± 65) 1.13
es/full/base/resolver_and_hygiene 82457 ns/iter (± 150) 80678 ns/iter (± 214) 1.02
serialization of serde 291 ns/iter (± 2) 287 ns/iter (± 0) 1.01

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

Please sign in to comment.