Skip to content

Commit 4c06a56

Browse files
authoredApr 15, 2023
fix(es/minifier): Use UTF16 length for str.length (#7275)
**Related issue:** - Closes #7274.
1 parent d90d14f commit 4c06a56

File tree

2 files changed

+20
-1
lines changed
  • crates
    • swc_ecma_minifier/tests
    • swc_ecma_transforms_optimization/src/simplify/expr

2 files changed

+20
-1
lines changed
 

‎crates/swc_ecma_minifier/tests/exec.rs

+19
Original file line numberDiff line numberDiff line change
@@ -10931,3 +10931,22 @@ fn issue_6914_3() {
1093110931
false,
1093210932
);
1093310933
}
10934+
10935+
#[test]
10936+
fn issue_7274() {
10937+
run_default_exec_test(
10938+
r###"
10939+
if (
10940+
// incorrect:
10941+
"😋📋👌".length === 3
10942+
10943+
// correct:
10944+
// "😋📋👌".length === 6
10945+
) {
10946+
// side effect
10947+
new Response(123);
10948+
}
10949+
console.log('PASS');
10950+
"###,
10951+
);
10952+
}

‎crates/swc_ecma_transforms_optimization/src/simplify/expr/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ impl SimplifyExpr {
154154
self.changed = true;
155155

156156
*expr = Expr::Lit(Lit::Num(Number {
157-
value: value.chars().count() as f64,
157+
value: value.chars().map(|c| c.len_utf16()).sum::<usize>() as _,
158158
span: *span,
159159
raw: None,
160160
}));

1 commit comments

Comments
 (1)

github-actions[bot] commented on Apr 15, 2023

@github-actions[bot]

Benchmark

Benchmark suite Current: 4c06a56 Previous: 5d3313a Ratio
es/full/bugs-1 317534 ns/iter (± 8169) 305689 ns/iter (± 9668) 1.04
es/full/minify/libraries/antd 1698620871 ns/iter (± 27015444) 1572733818 ns/iter (± 15680329) 1.08
es/full/minify/libraries/d3 324941152 ns/iter (± 9781325) 308444654 ns/iter (± 7186388) 1.05
es/full/minify/libraries/echarts 1321397348 ns/iter (± 13604325) 1212875863 ns/iter (± 14262629) 1.09
es/full/minify/libraries/jquery 93265598 ns/iter (± 926061) 90871678 ns/iter (± 2521241) 1.03
es/full/minify/libraries/lodash 108660264 ns/iter (± 2236613) 107262861 ns/iter (± 1995755) 1.01
es/full/minify/libraries/moment 54096475 ns/iter (± 788997) 52626594 ns/iter (± 761505) 1.03
es/full/minify/libraries/react 20006728 ns/iter (± 253946) 19419554 ns/iter (± 212158) 1.03
es/full/minify/libraries/terser 266285355 ns/iter (± 5438567) 247362205 ns/iter (± 4918511) 1.08
es/full/minify/libraries/three 482784766 ns/iter (± 9855111) 436692300 ns/iter (± 7192564) 1.11
es/full/minify/libraries/typescript 3200186176 ns/iter (± 18287997) 2971286136 ns/iter (± 10526906) 1.08
es/full/minify/libraries/victory 736968670 ns/iter (± 11007267) 682585029 ns/iter (± 18207000) 1.08
es/full/minify/libraries/vue 140241992 ns/iter (± 1519149) 131944693 ns/iter (± 1593162) 1.06
es/full/codegen/es3 28786 ns/iter (± 59) 28289 ns/iter (± 49) 1.02
es/full/codegen/es5 28931 ns/iter (± 46) 28344 ns/iter (± 90) 1.02
es/full/codegen/es2015 28906 ns/iter (± 66) 28386 ns/iter (± 102) 1.02
es/full/codegen/es2016 28842 ns/iter (± 48) 28372 ns/iter (± 56) 1.02
es/full/codegen/es2017 28920 ns/iter (± 62) 28359 ns/iter (± 44) 1.02
es/full/codegen/es2018 28935 ns/iter (± 196) 28381 ns/iter (± 54) 1.02
es/full/codegen/es2019 28893 ns/iter (± 60) 28355 ns/iter (± 35) 1.02
es/full/codegen/es2020 28896 ns/iter (± 53) 28365 ns/iter (± 61) 1.02
es/full/all/es3 181588554 ns/iter (± 2727377) 182815831 ns/iter (± 4431270) 0.99
es/full/all/es5 176416680 ns/iter (± 2713280) 177493325 ns/iter (± 1664611) 0.99
es/full/all/es2015 136149022 ns/iter (± 2917783) 138921872 ns/iter (± 2659713) 0.98
es/full/all/es2016 135042229 ns/iter (± 1252560) 136347011 ns/iter (± 2541760) 0.99
es/full/all/es2017 133900097 ns/iter (± 3067306) 134950337 ns/iter (± 1037423) 0.99
es/full/all/es2018 128291978 ns/iter (± 1488561) 132555667 ns/iter (± 4035538) 0.97
es/full/all/es2019 126885720 ns/iter (± 1743163) 129913245 ns/iter (± 2643128) 0.98
es/full/all/es2020 120346629 ns/iter (± 863639) 123008132 ns/iter (± 2420393) 0.98
es/full/parser 523086 ns/iter (± 10399) 520987 ns/iter (± 8700) 1.00
es/full/base/fixer 22630 ns/iter (± 61) 22584 ns/iter (± 20) 1.00
es/full/base/resolver_and_hygiene 83820 ns/iter (± 76) 85555 ns/iter (± 141) 0.98
serialization of serde 121 ns/iter (± 0) 121 ns/iter (± 0) 1
css/minify/libraries/bootstrap 28345153 ns/iter (± 224989) 27703320 ns/iter (± 134292) 1.02
css/visitor/compare/clone 2112079 ns/iter (± 14469) 2104166 ns/iter (± 7881) 1.00
css/visitor/compare/visit_mut_span 2301077 ns/iter (± 11858) 2303190 ns/iter (± 11088) 1.00
css/visitor/compare/visit_mut_span_panic 2353396 ns/iter (± 6726) 2372394 ns/iter (± 5850) 0.99
css/visitor/compare/fold_span 3075967 ns/iter (± 15573) 3056266 ns/iter (± 16790) 1.01
css/visitor/compare/fold_span_panic 3249161 ns/iter (± 34747) 3244957 ns/iter (± 9457) 1.00
css/lexer/bootstrap_5_1_3 5140872 ns/iter (± 16931) 5130744 ns/iter (± 3083) 1.00
css/lexer/foundation_6_7_4 4407123 ns/iter (± 1340) 4317062 ns/iter (± 2575) 1.02
css/lexer/tailwind_3_1_1 838633 ns/iter (± 133) 821373 ns/iter (± 1035) 1.02
css/parser/bootstrap_5_1_3 21792515 ns/iter (± 200418) 21181451 ns/iter (± 210496) 1.03
css/parser/foundation_6_7_4 17329677 ns/iter (± 194146) 16751865 ns/iter (± 56476) 1.03
css/parser/tailwind_3_1_1 3230792 ns/iter (± 16508) 3236131 ns/iter (± 4534) 1.00
es/codegen/colors 317384 ns/iter (± 179143) 328025 ns/iter (± 185556) 0.97
es/codegen/large 1110732 ns/iter (± 556156) 1255711 ns/iter (± 656354) 0.88
es/codegen/with-parser/colors 47677 ns/iter (± 329) 47183 ns/iter (± 79) 1.01
es/codegen/with-parser/large 510078 ns/iter (± 1807) 510936 ns/iter (± 1240) 1.00
es/minify/libraries/antd 1516309789 ns/iter (± 25069412) 1365555157 ns/iter (± 12059985) 1.11
es/minify/libraries/d3 273754591 ns/iter (± 5318527) 255543578 ns/iter (± 6639054) 1.07
es/minify/libraries/echarts 1134299068 ns/iter (± 11037409) 1055406990 ns/iter (± 10079491) 1.07
es/minify/libraries/jquery 80895543 ns/iter (± 751322) 79190822 ns/iter (± 785402) 1.02
es/minify/libraries/lodash 98514069 ns/iter (± 2147712) 94964237 ns/iter (± 1992956) 1.04
es/minify/libraries/moment 46632007 ns/iter (± 444133) 46275969 ns/iter (± 721768) 1.01
es/minify/libraries/react 17836596 ns/iter (± 306210) 17194665 ns/iter (± 176163) 1.04
es/minify/libraries/terser 227773639 ns/iter (± 5408125) 212298296 ns/iter (± 4151749) 1.07
es/minify/libraries/three 391907376 ns/iter (± 4996466) 367960829 ns/iter (± 7917346) 1.07
es/minify/libraries/typescript 2697766931 ns/iter (± 24735433) 2511243666 ns/iter (± 10327499) 1.07
es/minify/libraries/victory 614666262 ns/iter (± 13258080) 554119922 ns/iter (± 17684286) 1.11
es/minify/libraries/vue 120605464 ns/iter (± 3378199) 118576240 ns/iter (± 2580675) 1.02
es/visitor/compare/clone 2345119 ns/iter (± 12533) 2336970 ns/iter (± 5709) 1.00
es/visitor/compare/visit_mut_span 2730192 ns/iter (± 22748) 2707210 ns/iter (± 3943) 1.01
es/visitor/compare/visit_mut_span_panic 2801438 ns/iter (± 33264) 2764138 ns/iter (± 7774) 1.01
es/visitor/compare/fold_span 3864667 ns/iter (± 48121) 3826267 ns/iter (± 20426) 1.01
es/visitor/compare/fold_span_panic 3963652 ns/iter (± 28310) 3930127 ns/iter (± 24138) 1.01
es/lexer/colors 13179 ns/iter (± 84) 13343 ns/iter (± 14) 0.99
es/lexer/angular 6341877 ns/iter (± 3139) 6358396 ns/iter (± 3785) 1.00
es/lexer/backbone 784276 ns/iter (± 255) 788057 ns/iter (± 566) 1.00
es/lexer/jquery 4402704 ns/iter (± 2266) 4411482 ns/iter (± 3961) 1.00
es/lexer/jquery mobile 6856969 ns/iter (± 3877) 6871994 ns/iter (± 7399) 1.00
es/lexer/mootools 3448373 ns/iter (± 12895) 3456517 ns/iter (± 2963) 1.00
es/lexer/underscore 648331 ns/iter (± 216) 651635 ns/iter (± 514) 0.99
es/lexer/three 20715519 ns/iter (± 17040) 20741831 ns/iter (± 13796) 1.00
es/lexer/yui 3848409 ns/iter (± 1455) 3863553 ns/iter (± 3033) 1.00
es/parser/colors 29149 ns/iter (± 101) 28688 ns/iter (± 58) 1.02
es/parser/angular 15594658 ns/iter (± 235760) 15005754 ns/iter (± 233418) 1.04
es/parser/backbone 2176726 ns/iter (± 9614) 2167994 ns/iter (± 12889) 1.00
es/parser/jquery 12086654 ns/iter (± 236745) 11739164 ns/iter (± 98268) 1.03
es/parser/jquery mobile 19446462 ns/iter (± 453111) 18646986 ns/iter (± 485187) 1.04
es/parser/mootools 9088185 ns/iter (± 66404) 8956758 ns/iter (± 36911) 1.01
es/parser/underscore 1834779 ns/iter (± 9450) 1827924 ns/iter (± 10418) 1.00
es/parser/three 56411369 ns/iter (± 261547) 53957761 ns/iter (± 325690) 1.05
es/parser/yui 9222358 ns/iter (± 71371) 9026880 ns/iter (± 76554) 1.02
es/preset-env/usage/builtin_type 142263 ns/iter (± 35279) 143032 ns/iter (± 34356) 0.99
es/preset-env/usage/property 19456 ns/iter (± 117) 19641 ns/iter (± 128) 0.99
es/resolver/typescript 119911636 ns/iter (± 1652240) 113345108 ns/iter (± 1615902) 1.06
es/fixer/typescript 87639762 ns/iter (± 339142) 80632124 ns/iter (± 1550815) 1.09
es/hygiene/typescript 192829556 ns/iter (± 2255810) 170827945 ns/iter (± 2009835) 1.13
es/resolver_with_hygiene/typescript 334131215 ns/iter (± 3062838) 303889945 ns/iter (± 3314800) 1.10
es/visitor/base-perf/module_clone 80972 ns/iter (± 672) 80933 ns/iter (± 515) 1.00
es/visitor/base-perf/fold_empty 90869 ns/iter (± 486) 90359 ns/iter (± 395) 1.01
es/visitor/base-perf/fold_noop_impl_all 91270 ns/iter (± 454) 91096 ns/iter (± 587) 1.00
es/visitor/base-perf/fold_noop_impl_vec 91357 ns/iter (± 322) 91167 ns/iter (± 264) 1.00
es/visitor/base-perf/boxing_boxed_clone 56 ns/iter (± 0) 57 ns/iter (± 0) 0.98
es/visitor/base-perf/boxing_unboxed_clone 41 ns/iter (± 0) 41 ns/iter (± 0) 1
es/visitor/base-perf/boxing_boxed 102 ns/iter (± 0) 102 ns/iter (± 0) 1
es/visitor/base-perf/boxing_unboxed 79 ns/iter (± 0) 78 ns/iter (± 0) 1.01
es/visitor/base-perf/visit_contains_this 3561 ns/iter (± 67) 3608 ns/iter (± 87) 0.99
es/base/parallel/resolver/typescript 6630248908 ns/iter (± 463237642) 5686593617 ns/iter (± 367879848) 1.17
es/base/parallel/hygiene/typescript 2180321177 ns/iter (± 27388979) 1990149418 ns/iter (± 25726580) 1.10
misc/visitors/time-complexity/time 5 105 ns/iter (± 0) 106 ns/iter (± 0) 0.99
misc/visitors/time-complexity/time 10 340 ns/iter (± 1) 339 ns/iter (± 1) 1.00
misc/visitors/time-complexity/time 15 658 ns/iter (± 5) 659 ns/iter (± 0) 1.00
misc/visitors/time-complexity/time 20 1220 ns/iter (± 0) 1222 ns/iter (± 2) 1.00
misc/visitors/time-complexity/time 40 6200 ns/iter (± 18) 6268 ns/iter (± 27) 0.99
misc/visitors/time-complexity/time 60 15595 ns/iter (± 63) 15598 ns/iter (± 10) 1.00
es/full-target/es2016 254338 ns/iter (± 1146) 253299 ns/iter (± 790) 1.00
es/full-target/es2017 246613 ns/iter (± 694) 247060 ns/iter (± 421) 1.00
es/full-target/es2018 235389 ns/iter (± 333) 235604 ns/iter (± 437) 1.00
es2020_nullish_coalescing 93311 ns/iter (± 339) 93172 ns/iter (± 226) 1.00
es2020_optional_chaining 125285 ns/iter (± 414) 124544 ns/iter (± 152) 1.01
es2022_class_properties 149601 ns/iter (± 369) 149425 ns/iter (± 353) 1.00
es2018_object_rest_spread 96100 ns/iter (± 237) 95463 ns/iter (± 222) 1.01
es2019_optional_catch_binding 85402 ns/iter (± 137) 85218 ns/iter (± 172) 1.00
es2017_async_to_generator 85731 ns/iter (± 227) 85854 ns/iter (± 174) 1.00
es2016_exponentiation 90046 ns/iter (± 246) 90371 ns/iter (± 270) 1.00
es2015_arrow 94147 ns/iter (± 264) 94155 ns/iter (± 137) 1.00
es2015_block_scoped_fn 92121 ns/iter (± 188) 91812 ns/iter (± 239) 1.00
es2015_block_scoping 170056 ns/iter (± 316) 170239 ns/iter (± 251) 1.00

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

Please sign in to comment.