Skip to content

Commit

Permalink
fix(es/typescript): Support ts_enum_is_mutable with const enums (#8171
Browse files Browse the repository at this point in the history
)
  • Loading branch information
dsherret committed Oct 23, 2023
1 parent 7932111 commit 02d0613
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 5 deletions.
12 changes: 9 additions & 3 deletions crates/swc_ecma_transforms_typescript/src/transform.rs
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ impl VisitMut for Transform {
fn visit_mut_program(&mut self, n: &mut Program) {
n.visit_mut_children_with(self);

if !self.ts_enum_is_mutable && !self.record.is_empty() {
if !self.record.is_empty() {
let record = mem::take(&mut self.record);
n.visit_mut_children_with(&mut InlineEnum::new(record));
}
Expand Down Expand Up @@ -487,6 +487,12 @@ impl Transform {

let mut default_init = 0.0.into();
let mut member_list = vec![];
let mut local_record = if self.ts_enum_is_mutable && !is_const {
Some(TsEnumRecord::default())
} else {
None
};
let record = local_record.as_mut().unwrap_or(&mut self.record);

for m in members {
let span = m.span;
Expand All @@ -496,7 +502,7 @@ impl Transform {
m,
&id.to_id(),
&default_init,
&self.record,
record,
self.top_level_mark,
);

Expand All @@ -514,7 +520,7 @@ impl Transform {
TsEnumRecordValue::Void
};

self.record.insert(key, value);
record.insert(key, value);
}

let item = EnumMemberItem { span, name, value };
Expand Down
42 changes: 40 additions & 2 deletions crates/swc_ecma_transforms_typescript/tests/strip.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4567,19 +4567,57 @@ test!(
r#"
enum D {
A,
B,
B = 2,
}
(D as any).A = 5;
console.log(D.A);
const enum E {
A,
B,
}
console.log(E.B);
const enum F {
A = 2,
}
enum G {
A = F.A
}
console.log(G.A);
enum H {
A = 2,
}
const enum I {
A = H.A
}
console.log(I.A);
"#,
r#"
var D;
(function(D) {
D[D["A"] = 0] = "A";
D[D["B"] = 1] = "B";
D[D["B"] = 2] = "B";
})(D || (D = {}));
D.A = 5;
console.log(D.A);
var E;
console.log(1);
var F;
var G;
(function(G) {
G[G["A"] = 2] = "A";
})(G || (G = {}));
console.log(G.A);
var H;
(function(H) {
H[H["A"] = 2] = "A";
})(H || (H = {}));
var I;
(function(I) {
I[I["A"] = H.A] = "A";
})(I || (I = {}));
console.log(I.A);
"#
);

1 comment on commit 02d0613

@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: 02d0613 Previous: 5be8e74 Ratio
es/full/bugs-1 299007 ns/iter (± 11909) 301071 ns/iter (± 7755) 0.99
es/full/minify/libraries/antd 1476291998 ns/iter (± 18195232) 1468245436 ns/iter (± 21604648) 1.01
es/full/minify/libraries/d3 302255474 ns/iter (± 2958233) 303923743 ns/iter (± 3801573) 0.99
es/full/minify/libraries/echarts 1198367515 ns/iter (± 24792959) 1173700181 ns/iter (± 4420853) 1.02
es/full/minify/libraries/jquery 89791683 ns/iter (± 336959) 90380970 ns/iter (± 741540) 0.99
es/full/minify/libraries/lodash 104427358 ns/iter (± 596845) 105500737 ns/iter (± 269343) 0.99
es/full/minify/libraries/moment 52793536 ns/iter (± 143385) 53164180 ns/iter (± 533175) 0.99
es/full/minify/libraries/react 18784272 ns/iter (± 166599) 18849864 ns/iter (± 184339) 1.00
es/full/minify/libraries/terser 232571476 ns/iter (± 1922052) 238732481 ns/iter (± 2343517) 0.97
es/full/minify/libraries/three 417149877 ns/iter (± 2779734) 428418744 ns/iter (± 2078878) 0.97
es/full/minify/libraries/typescript 2863722850 ns/iter (± 28173893) 2907768647 ns/iter (± 18218083) 0.98
es/full/minify/libraries/victory 608216738 ns/iter (± 8250063) 630673364 ns/iter (± 4302854) 0.96
es/full/minify/libraries/vue 127630697 ns/iter (± 471004) 129014044 ns/iter (± 503039) 0.99
es/full/codegen/es3 33784 ns/iter (± 96) 34134 ns/iter (± 222) 0.99
es/full/codegen/es5 33980 ns/iter (± 103) 34142 ns/iter (± 44) 1.00
es/full/codegen/es2015 34079 ns/iter (± 64) 34107 ns/iter (± 58) 1.00
es/full/codegen/es2016 34052 ns/iter (± 65) 34153 ns/iter (± 132) 1.00
es/full/codegen/es2017 33976 ns/iter (± 130) 34150 ns/iter (± 63) 0.99
es/full/codegen/es2018 33869 ns/iter (± 109) 34024 ns/iter (± 77) 1.00
es/full/codegen/es2019 33849 ns/iter (± 124) 34145 ns/iter (± 69) 0.99
es/full/codegen/es2020 33801 ns/iter (± 68) 34096 ns/iter (± 382) 0.99
es/full/all/es3 176853652 ns/iter (± 792771) 177793575 ns/iter (± 1234314) 0.99
es/full/all/es5 170318170 ns/iter (± 4841250) 169517063 ns/iter (± 1912281) 1.00
es/full/all/es2015 128311988 ns/iter (± 654979) 128661556 ns/iter (± 1276337) 1.00
es/full/all/es2016 127836789 ns/iter (± 885086) 127686252 ns/iter (± 722223) 1.00
es/full/all/es2017 127412193 ns/iter (± 1287239) 126620489 ns/iter (± 882941) 1.01
es/full/all/es2018 125094082 ns/iter (± 1029271) 124645684 ns/iter (± 654824) 1.00
es/full/all/es2019 124469811 ns/iter (± 562487) 124466833 ns/iter (± 885733) 1.00
es/full/all/es2020 120877524 ns/iter (± 1838480) 120233455 ns/iter (± 1259198) 1.01
es/full/parser 560613 ns/iter (± 1262) 554528 ns/iter (± 3708) 1.01
es/full/base/fixer 17970 ns/iter (± 153) 18309 ns/iter (± 84) 0.98
es/full/base/resolver_and_hygiene 82474 ns/iter (± 335) 83184 ns/iter (± 173) 0.99

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

Please sign in to comment.