Skip to content

Commit

Permalink
refactor(es/ast): Avoid transmute in impl of Hash for Number (#…
Browse files Browse the repository at this point in the history
…7771)

**Description:**

[`f64::to_bits()`](https://doc.rust-lang.org/stable/std/primitive.f64.html#method.to_bits) does the same thing.
  • Loading branch information
Manishearth committed Aug 7, 2023
1 parent 76c78f8 commit 2258274
Showing 1 changed file with 1 addition and 2 deletions.
3 changes: 1 addition & 2 deletions crates/swc_ecma_ast/src/lit.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ use std::{
borrow::Cow,
fmt::{self, Display, Formatter},
hash::{Hash, Hasher},
mem,
};

use num_bigint::BigInt as BigIntValue;
Expand Down Expand Up @@ -353,7 +352,7 @@ impl EqIgnoreSpan for Number {
impl Hash for Number {
fn hash<H: Hasher>(&self, state: &mut H) {
fn integer_decode(val: f64) -> (u64, i16, i8) {
let bits: u64 = unsafe { mem::transmute(val) };
let bits: u64 = val.to_bits();
let sign: i8 = if bits >> 63 == 0 { 1 } else { -1 };
let mut exponent: i16 = ((bits >> 52) & 0x7ff) as i16;
let mantissa = if exponent == 0 {
Expand Down

1 comment on commit 2258274

@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: 2258274 Previous: fa7e428 Ratio
es/full/bugs-1 293444 ns/iter (± 7265) 282590 ns/iter (± 10343) 1.04
es/full/minify/libraries/antd 1340039380 ns/iter (± 8773715) 1284420305 ns/iter (± 8403948) 1.04
es/full/minify/libraries/d3 279873753 ns/iter (± 2566702) 279525896 ns/iter (± 4373608) 1.00
es/full/minify/libraries/echarts 1088719337 ns/iter (± 33293514) 1035078719 ns/iter (± 11626480) 1.05
es/full/minify/libraries/jquery 85367558 ns/iter (± 196549) 82866684 ns/iter (± 1033975) 1.03
es/full/minify/libraries/lodash 99251946 ns/iter (± 862204) 97246292 ns/iter (± 1152078) 1.02
es/full/minify/libraries/moment 50084261 ns/iter (± 65174) 48382114 ns/iter (± 566909) 1.04
es/full/minify/libraries/react 17988288 ns/iter (± 39416) 17615534 ns/iter (± 306988) 1.02
es/full/minify/libraries/terser 236527797 ns/iter (± 3055034) 214873748 ns/iter (± 2397634) 1.10
es/full/minify/libraries/three 434795421 ns/iter (± 7496945) 389233040 ns/iter (± 8680139) 1.12
es/full/minify/libraries/typescript 2748269886 ns/iter (± 16790905) 2645383786 ns/iter (± 29987552) 1.04
es/full/minify/libraries/victory 606056209 ns/iter (± 9017098) 570422055 ns/iter (± 2725681) 1.06
es/full/minify/libraries/vue 124159561 ns/iter (± 661774) 120171711 ns/iter (± 454344) 1.03
es/full/codegen/es3 34516 ns/iter (± 80) 34836 ns/iter (± 54) 0.99
es/full/codegen/es5 34629 ns/iter (± 105) 34863 ns/iter (± 112) 0.99
es/full/codegen/es2015 34496 ns/iter (± 43) 34725 ns/iter (± 137) 0.99
es/full/codegen/es2016 34518 ns/iter (± 110) 34834 ns/iter (± 351) 0.99
es/full/codegen/es2017 34517 ns/iter (± 69) 34762 ns/iter (± 86) 0.99
es/full/codegen/es2018 34496 ns/iter (± 55) 34214 ns/iter (± 448) 1.01
es/full/codegen/es2019 34570 ns/iter (± 88) 34280 ns/iter (± 353) 1.01
es/full/codegen/es2020 34525 ns/iter (± 59) 34758 ns/iter (± 387) 0.99
es/full/all/es3 173262277 ns/iter (± 1543950) 172750488 ns/iter (± 1638173) 1.00
es/full/all/es5 165300186 ns/iter (± 784625) 163897790 ns/iter (± 758076) 1.01
es/full/all/es2015 124412526 ns/iter (± 850088) 122231967 ns/iter (± 905057) 1.02
es/full/all/es2016 122507122 ns/iter (± 1028805) 122300343 ns/iter (± 813399) 1.00
es/full/all/es2017 123099647 ns/iter (± 947043) 121421457 ns/iter (± 883963) 1.01
es/full/all/es2018 121258678 ns/iter (± 730000) 120117931 ns/iter (± 855395) 1.01
es/full/all/es2019 120107647 ns/iter (± 555594) 119294867 ns/iter (± 1148529) 1.01
es/full/all/es2020 115274899 ns/iter (± 620212) 114091440 ns/iter (± 998955) 1.01
es/full/parser 532194 ns/iter (± 6313) 527675 ns/iter (± 6163) 1.01
es/full/base/fixer 18786 ns/iter (± 204) 19234 ns/iter (± 254) 0.98
es/full/base/resolver_and_hygiene 83068 ns/iter (± 306) 80720 ns/iter (± 266) 1.03
serialization of serde 297 ns/iter (± 0) 290 ns/iter (± 0) 1.02
css/minify/libraries/bootstrap 28744072 ns/iter (± 229176) 28978229 ns/iter (± 422656) 0.99
css/visitor/compare/clone 1641298 ns/iter (± 8767) 1639170 ns/iter (± 3337) 1.00
css/visitor/compare/visit_mut_span 1780750 ns/iter (± 7116) 1773143 ns/iter (± 4619) 1.00
css/visitor/compare/visit_mut_span_panic 1848101 ns/iter (± 3902) 1850724 ns/iter (± 20637) 1.00
css/visitor/compare/fold_span 2568565 ns/iter (± 13342) 2600132 ns/iter (± 22937) 0.99
css/visitor/compare/fold_span_panic 2751004 ns/iter (± 21646) 2759121 ns/iter (± 9322) 1.00
css/lexer/bootstrap_5_1_3 4472989 ns/iter (± 6149) 4508174 ns/iter (± 2798) 0.99
css/lexer/foundation_6_7_4 3742302 ns/iter (± 4435) 3785627 ns/iter (± 2491) 0.99
css/lexer/tailwind_3_1_1 713695 ns/iter (± 325) 717172 ns/iter (± 4927) 1.00
css/parser/bootstrap_5_1_3 19523772 ns/iter (± 74752) 19083702 ns/iter (± 53042) 1.02
css/parser/foundation_6_7_4 15250813 ns/iter (± 29434) 15239556 ns/iter (± 33502) 1.00
css/parser/tailwind_3_1_1 2995351 ns/iter (± 3680) 2936320 ns/iter (± 12139) 1.02
es/codegen/colors 737177 ns/iter (± 403763) 726494 ns/iter (± 403493) 1.01
es/codegen/large 2895555 ns/iter (± 1546462) 2901866 ns/iter (± 1530437) 1.00
es/codegen/with-parser/colors 45945 ns/iter (± 159) 45728 ns/iter (± 543) 1.00
es/codegen/with-parser/large 493301 ns/iter (± 1103) 499366 ns/iter (± 2197) 0.99
es/minify/libraries/antd 1267727925 ns/iter (± 32734994) 1219914963 ns/iter (± 23308932) 1.04
es/minify/libraries/d3 254223080 ns/iter (± 950485) 253562407 ns/iter (± 2407901) 1.00
es/minify/libraries/echarts 981797404 ns/iter (± 11408644) 974577323 ns/iter (± 9067402) 1.01
es/minify/libraries/jquery 77495945 ns/iter (± 1174504) 75506759 ns/iter (± 585540) 1.03
es/minify/libraries/lodash 89943678 ns/iter (± 72625) 90827280 ns/iter (± 942177) 0.99
es/minify/libraries/moment 43903757 ns/iter (± 64827) 44530018 ns/iter (± 441789) 0.99
es/minify/libraries/react 16064350 ns/iter (± 53033) 16165595 ns/iter (± 100848) 0.99
es/minify/libraries/terser 191648632 ns/iter (± 275785) 197879429 ns/iter (± 1568568) 0.97
es/minify/libraries/three 335736354 ns/iter (± 812397) 339673580 ns/iter (± 7506375) 0.99
es/minify/libraries/typescript 2347430560 ns/iter (± 5141143) 2293512934 ns/iter (± 61101110) 1.02
es/minify/libraries/victory 501017370 ns/iter (± 3308116) 473151051 ns/iter (± 11785315) 1.06
es/minify/libraries/vue 109261622 ns/iter (± 249903) 108190457 ns/iter (± 1085030) 1.01
es/visitor/compare/clone 1925218 ns/iter (± 7402) 1934074 ns/iter (± 6272) 1.00
es/visitor/compare/visit_mut_span 2257010 ns/iter (± 2368) 2258245 ns/iter (± 20416) 1.00
es/visitor/compare/visit_mut_span_panic 2310745 ns/iter (± 5410) 2289742 ns/iter (± 28297) 1.01
es/visitor/compare/fold_span 3357756 ns/iter (± 3870) 3288987 ns/iter (± 37172) 1.02
es/visitor/compare/fold_span_panic 3476035 ns/iter (± 6013) 3388744 ns/iter (± 29176) 1.03
es/lexer/colors 12832 ns/iter (± 69) 12858 ns/iter (± 152) 1.00
es/lexer/angular 5940442 ns/iter (± 12921) 6008098 ns/iter (± 60144) 0.99
es/lexer/backbone 767423 ns/iter (± 2686) 778026 ns/iter (± 9575) 0.99
es/lexer/jquery 4365502 ns/iter (± 7058) 4465035 ns/iter (± 39049) 0.98
es/lexer/jquery mobile 6627882 ns/iter (± 71325) 6796550 ns/iter (± 53018) 0.98
es/lexer/mootools 3450247 ns/iter (± 3751) 3544288 ns/iter (± 27532) 0.97
es/lexer/underscore 649497 ns/iter (± 557) 669360 ns/iter (± 5648) 0.97
es/lexer/three 20765361 ns/iter (± 13257) 21356338 ns/iter (± 154912) 0.97
es/lexer/yui 3740985 ns/iter (± 2249) 3803381 ns/iter (± 13357) 0.98
es/parser/colors 27887 ns/iter (± 70) 27134 ns/iter (± 64) 1.03
es/parser/angular 14097918 ns/iter (± 73884) 13492002 ns/iter (± 213992) 1.04
es/parser/backbone 2083450 ns/iter (± 9274) 1965084 ns/iter (± 30870) 1.06
es/parser/jquery 11404383 ns/iter (± 67947) 10920914 ns/iter (± 182006) 1.04
es/parser/jquery mobile 17375066 ns/iter (± 203105) 16899679 ns/iter (± 1132973) 1.03
es/parser/mootools 8734215 ns/iter (± 29075) 8234784 ns/iter (± 112903) 1.06
es/parser/underscore 1821672 ns/iter (± 7099) 1735664 ns/iter (± 11512) 1.05
es/parser/three 51076489 ns/iter (± 787869) 49988814 ns/iter (± 354337) 1.02
es/parser/yui 8642966 ns/iter (± 46105) 8243604 ns/iter (± 102706) 1.05
es/preset-env/usage/builtin_type 140799 ns/iter (± 33768) 136655 ns/iter (± 34063) 1.03
es/preset-env/usage/property 16393 ns/iter (± 49) 16983 ns/iter (± 192) 0.97
es/resolver/typescript 91609919 ns/iter (± 837013) 87829419 ns/iter (± 1160713) 1.04
es/fixer/typescript 64024457 ns/iter (± 727254) 63457823 ns/iter (± 655284) 1.01
es/hygiene/typescript 133830691 ns/iter (± 2363453) 127996259 ns/iter (± 1717450) 1.05
es/resolver_with_hygiene/typescript 243553152 ns/iter (± 1718306) 238914049 ns/iter (± 6753703) 1.02
es/visitor/base-perf/module_clone 59727 ns/iter (± 565) 59104 ns/iter (± 475) 1.01
es/visitor/base-perf/fold_empty 64287 ns/iter (± 360) 63170 ns/iter (± 564) 1.02
es/visitor/base-perf/fold_noop_impl_all 64046 ns/iter (± 640) 61348 ns/iter (± 853) 1.04
es/visitor/base-perf/fold_noop_impl_vec 63900 ns/iter (± 387) 61856 ns/iter (± 1113) 1.03
es/visitor/base-perf/boxing_boxed_clone 56 ns/iter (± 0) 58 ns/iter (± 0) 0.97
es/visitor/base-perf/boxing_unboxed_clone 40 ns/iter (± 0) 39 ns/iter (± 0) 1.03
es/visitor/base-perf/boxing_boxed 108 ns/iter (± 0) 102 ns/iter (± 1) 1.06
es/visitor/base-perf/boxing_unboxed 77 ns/iter (± 0) 74 ns/iter (± 0) 1.04
es/visitor/base-perf/visit_empty 0 ns/iter (± 0) 0 ns/iter (± 0) NaN
es/visitor/base-perf/visit_contains_this 2525 ns/iter (± 15) 2530 ns/iter (± 12) 1.00
es/base/parallel/resolver/typescript 4467717027 ns/iter (± 187364155) 4551061079 ns/iter (± 295067151) 0.98
es/base/parallel/hygiene/typescript 1438605066 ns/iter (± 13778724) 1462210355 ns/iter (± 5005716) 0.98
misc/visitors/time-complexity/time 5 125 ns/iter (± 3) 121 ns/iter (± 1) 1.03
misc/visitors/time-complexity/time 10 397 ns/iter (± 7) 393 ns/iter (± 17) 1.01
misc/visitors/time-complexity/time 15 666 ns/iter (± 30) 521 ns/iter (± 38) 1.28
misc/visitors/time-complexity/time 20 1058 ns/iter (± 19) 1047 ns/iter (± 4) 1.01
misc/visitors/time-complexity/time 40 4126 ns/iter (± 282) 3620 ns/iter (± 12) 1.14
misc/visitors/time-complexity/time 60 7239 ns/iter (± 12) 7314 ns/iter (± 16) 0.99
es/full-target/es2016 234686 ns/iter (± 779) 234684 ns/iter (± 1436) 1.00
es/full-target/es2017 222612 ns/iter (± 665) 221841 ns/iter (± 967) 1.00
es/full-target/es2018 209777 ns/iter (± 494) 209016 ns/iter (± 665) 1.00
es2020_nullish_coalescing 70579 ns/iter (± 445) 71371 ns/iter (± 585) 0.99
es2020_optional_chaining 79447 ns/iter (± 460) 79139 ns/iter (± 282) 1.00
es2022_class_properties 117942 ns/iter (± 540) 118065 ns/iter (± 441) 1.00
es2018_object_rest_spread 76406 ns/iter (± 303) 75623 ns/iter (± 406) 1.01
es2019_optional_catch_binding 64640 ns/iter (± 145) 65325 ns/iter (± 191) 0.99
es2017_async_to_generator 64364 ns/iter (± 161) 64586 ns/iter (± 203) 1.00
es2016_exponentiation 68993 ns/iter (± 236) 69020 ns/iter (± 200) 1.00
es2015_arrow 70695 ns/iter (± 182) 71432 ns/iter (± 165) 0.99
es2015_block_scoped_fn 68415 ns/iter (± 330) 69092 ns/iter (± 204) 0.99
es2015_block_scoping 123827 ns/iter (± 607) 124221 ns/iter (± 493) 1.00

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

Please sign in to comment.