Skip to content

Commit

Permalink
feat(common): Enable bytecheck for missing structs (#7465)
Browse files Browse the repository at this point in the history
  • Loading branch information
kwonoj committed May 30, 2023
1 parent a29ef90 commit 56ac9eb
Show file tree
Hide file tree
Showing 9 changed files with 52 additions and 42 deletions.
3 changes: 3 additions & 0 deletions crates/swc_common/src/comments.rs
Original file line number Diff line number Diff line change
Expand Up @@ -546,6 +546,8 @@ impl SingleThreadedComments {
any(feature = "rkyv-impl"),
derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize)
)]
#[cfg_attr(feature = "rkyv-impl", archive(check_bytes))]
#[cfg_attr(feature = "rkyv-impl", archive_attr(repr(C)))]
pub struct Comment {
pub kind: CommentKind,
pub span: Span,
Expand All @@ -564,6 +566,7 @@ impl Spanned for Comment {
any(feature = "rkyv-impl"),
derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize)
)]
#[cfg_attr(feature = "rkyv-impl", archive(check_bytes))]
pub enum CommentKind {
Line,
Block,
Expand Down
23 changes: 1 addition & 22 deletions crates/swc_common/src/plugin/serialized.rs
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ impl PluginSerializedBytes {
* Internal fn to constructs an instance from raw bytes ptr.
*/
#[tracing::instrument(level = "info", skip_all)]
fn from_raw_ptr(
pub fn from_raw_ptr(
raw_allocated_ptr: *const u8,
raw_allocated_ptr_len: usize,
) -> PluginSerializedBytes {
Expand Down Expand Up @@ -114,27 +114,6 @@ impl PluginSerializedBytes {
}
}

/// Simple wrapper around constructing PluginSerializedBytes from raw
/// ptr to call deserialize to support common workflow on both of runtime
/// (host / plugin) to instantiate a struct from allocated / copied ptr.
///
/// # Safety
/// This is naturally unsafe by constructing bytes slice from raw ptr.
#[tracing::instrument(level = "info", skip_all)]
pub unsafe fn deserialize_from_ptr<W>(
raw_allocated_ptr: *const u8,
raw_allocated_ptr_len: u32,
) -> Result<VersionedSerializable<W>, Error>
where
W: rkyv::Archive,
W::Archived: rkyv::Deserialize<W, rkyv::de::deserializers::SharedDeserializeMap>,
{
let serialized =
PluginSerializedBytes::from_raw_ptr(raw_allocated_ptr, raw_allocated_ptr_len as usize);

serialized.deserialize()
}

/// A wrapper type for the structures to be passed into plugins
/// serializes the contained value out-of-line so that newer
/// versions can be viewed as the older version.
Expand Down
25 changes: 13 additions & 12 deletions crates/swc_common/src/syntax_pos/hygiene.rs
Original file line number Diff line number Diff line change
Expand Up @@ -196,14 +196,15 @@ impl Mark {
}

// Deserialize result, assign / return values as needed.
let context: MutableMarkContext = unsafe {
crate::plugin::serialized::deserialize_from_ptr(
let context: MutableMarkContext =
crate::plugin::serialized::PluginSerializedBytes::from_raw_ptr(
ptr,
len.try_into().expect("Should able to convert ptr length"),
)
.deserialize()
.expect("Should able to deserialize")
.into_inner()
};
.into_inner();

self = Mark::from_u32(context.0);

return context.2 != 0;
Expand Down Expand Up @@ -237,14 +238,14 @@ impl Mark {
__mark_least_ancestor(a.0, b.0, ptr as _);
}

let context: MutableMarkContext = unsafe {
crate::plugin::serialized::deserialize_from_ptr(
let context: MutableMarkContext =
crate::plugin::serialized::PluginSerializedBytes::from_raw_ptr(
ptr,
len.try_into().expect("Should able to convert ptr length"),
)
.deserialize()
.expect("Should able to deserialize")
.into_inner()
};
.into_inner();
a = Mark::from_u32(context.0);
b = Mark::from_u32(context.1);

Expand Down Expand Up @@ -435,14 +436,14 @@ impl SyntaxContext {
__syntax_context_remove_mark_proxy(self.0, ptr as _);
}

let context: MutableMarkContext = unsafe {
crate::plugin::serialized::deserialize_from_ptr(
let context: MutableMarkContext =
crate::plugin::serialized::PluginSerializedBytes::from_raw_ptr(
ptr,
len.try_into().expect("Should able to convert ptr length"),
)
.deserialize()
.expect("Should able to deserialize")
.into_inner()
};
.into_inner();

*self = SyntaxContext(context.0);

Expand Down
4 changes: 4 additions & 0 deletions crates/swc_css_ast/src/at_rule.rs
Original file line number Diff line number Diff line change
Expand Up @@ -436,6 +436,8 @@ pub struct MediaFeatureBoolean {
feature = "rkyv",
derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize)
)]
#[cfg_attr(feature = "rkyv", archive(check_bytes))]
#[cfg_attr(feature = "rkyv", archive_attr(repr(u32)))]
#[cfg_attr(
feature = "rkyv",
archive(bound(
Expand Down Expand Up @@ -764,6 +766,8 @@ pub struct SizeFeatureBoolean {
feature = "rkyv",
derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize)
)]
#[cfg_attr(feature = "rkyv", archive(check_bytes))]
#[cfg_attr(feature = "rkyv", archive_attr(repr(u32)))]
#[cfg_attr(
feature = "rkyv",
archive(bound(
Expand Down
4 changes: 4 additions & 0 deletions crates/swc_css_ast/src/selector.rs
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,8 @@ pub struct Combinator {
deserialize = "__D: rkyv::de::SharedDeserializeRegistry"
))
)]
#[cfg_attr(feature = "rkyv", archive(check_bytes))]
#[cfg_attr(feature = "rkyv", archive_attr(repr(u32)))]
pub enum CombinatorValue {
/// ` `
Descendant,
Expand Down Expand Up @@ -264,6 +266,8 @@ pub struct AttributeSelector {
feature = "rkyv",
derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize)
)]
#[cfg_attr(feature = "rkyv", archive(check_bytes))]
#[cfg_attr(feature = "rkyv", archive_attr(repr(u32)))]
#[cfg_attr(
feature = "rkyv",
archive(bound(
Expand Down
8 changes: 8 additions & 0 deletions crates/swc_css_ast/src/token.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,13 +31,17 @@ impl Take for TokenAndSpan {
any(feature = "rkyv-impl"),
derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize)
)]
#[cfg_attr(feature = "rkyv-impl", archive(check_bytes))]
#[cfg_attr(feature = "rkyv-impl", archive_attr(repr(C)))]
pub struct UrlKeyValue(pub Atom, pub Atom);

#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Is, EqIgnoreSpan)]
#[cfg_attr(
feature = "rkyv",
derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize)
)]
#[cfg_attr(feature = "rkyv", archive(check_bytes))]
#[cfg_attr(feature = "rkyv", archive_attr(repr(u32)))]
#[cfg_attr(
feature = "rkyv",
archive(bound(
Expand All @@ -59,6 +63,8 @@ pub enum NumberType {
feature = "rkyv",
derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize)
)]
#[cfg_attr(feature = "rkyv", archive(check_bytes))]
#[cfg_attr(feature = "rkyv", archive_attr(repr(C)))]
#[cfg_attr(feature = "serde-impl", derive(Serialize, Deserialize))]
pub struct DimensionToken {
pub value: f64,
Expand All @@ -76,6 +82,8 @@ pub struct DimensionToken {
feature = "rkyv",
derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize)
)]
#[cfg_attr(feature = "rkyv", archive(check_bytes))]
#[cfg_attr(feature = "rkyv", archive_attr(repr(u32)))]
#[cfg_attr(
feature = "rkyv",
archive(bound(
Expand Down
6 changes: 6 additions & 0 deletions crates/swc_css_ast/src/value.rs
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,8 @@ impl EqIgnoreSpan for Str {
deserialize = "__D: rkyv::de::SharedDeserializeRegistry"
))
)]
#[cfg_attr(feature = "rkyv", archive(check_bytes))]
#[cfg_attr(feature = "rkyv", archive_attr(repr(u32)))]
pub enum DelimiterValue {
/// `,`
Comma,
Expand Down Expand Up @@ -406,6 +408,8 @@ pub struct Ratio {
deserialize = "__D: rkyv::de::SharedDeserializeRegistry"
))
)]
#[cfg_attr(feature = "rkyv", archive(check_bytes))]
#[cfg_attr(feature = "rkyv", archive_attr(repr(u32)))]
pub enum BinOp {
/// `+`
Add,
Expand Down Expand Up @@ -514,6 +518,8 @@ pub struct CalcOperator {
deserialize = "__D: rkyv::de::SharedDeserializeRegistry"
))
)]
#[cfg_attr(feature = "rkyv-impl", archive(check_bytes))]
#[cfg_attr(feature = "rkyv-impl", archive_attr(repr(u32)))]
pub enum CalcOperatorType {
/// `+`
Add,
Expand Down
2 changes: 1 addition & 1 deletion crates/swc_plugin_macro/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ fn handle_func(func: ItemFn, ast_type: Ident) -> TokenStream {
unresolved_mark: u32, should_enable_comments_proxy: i32) -> u32 {
// Reconstruct `Program` & config string from serialized program
// Host (SWC) should allocate memory, copy bytes and pass ptr to plugin.
let program = unsafe { swc_core::common::plugin::serialized::deserialize_from_ptr(ast_ptr, ast_ptr_len) };
let program = swc_core::common::plugin::serialized::PluginSerializedBytes::from_raw_ptr(ast_ptr, ast_ptr_len.try_into().expect("Should able to convert ptr length")).deserialize();
if program.is_err() {
let err = swc_core::common::plugin::serialized::PluginError::Deserialize("Failed to deserialize program received from host".to_string());
return construct_error_ptr(err);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#[cfg_attr(not(target_arch = "wasm32"), allow(unused))]
#[cfg(any(feature = "__plugin_rt", feature = "__plugin_mode"))]
use swc_common::plugin::serialized::{deserialize_from_ptr, PluginSerializedBytes};
use swc_common::plugin::serialized::PluginSerializedBytes;

/// A struct to exchange allocated data between memory spaces.
#[cfg_attr(
Expand Down Expand Up @@ -62,16 +62,17 @@ where
}

// Return reconstructted AllocatedBytesPtr to reveal ptr to the allocated bytes
Some(unsafe {
deserialize_from_ptr(
Some(
PluginSerializedBytes::from_raw_ptr(
serialized_allocated_bytes_raw_ptr,
serialized_allocated_bytes_raw_ptr_size
.try_into()
.expect("Should able to convert ptr length"),
)
.deserialize()
.expect("Should able to deserialize AllocatedBytesPtr")
.into_inner()
})
.into_inner(),
)
}

#[cfg(not(feature = "__rkyv"))]
Expand All @@ -95,10 +96,14 @@ where

// Using AllocatedBytesPtr's value, reconstruct actual return value
allocated_returned_value_ptr.map(|allocated_returned_value_ptr| unsafe {
deserialize_from_ptr(
PluginSerializedBytes::from_raw_ptr(
allocated_returned_value_ptr.0 as _,
allocated_returned_value_ptr.1,
allocated_returned_value_ptr
.1
.try_into()
.expect("Should able to convert ptr length"),
)
.deserialize()
.expect("Returned value should be serializable")
.into_inner()
})
Expand Down

1 comment on commit 56ac9eb

@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: 56ac9eb Previous: 8274cce Ratio
es/full/bugs-1 319295 ns/iter (± 8772) 300435 ns/iter (± 10390) 1.06
es/full/minify/libraries/antd 1695727293 ns/iter (± 28414416) 1481894130 ns/iter (± 20167987) 1.14
es/full/minify/libraries/d3 310715191 ns/iter (± 7372177) 285096561 ns/iter (± 11171379) 1.09
es/full/minify/libraries/echarts 1298928363 ns/iter (± 11999072) 1169003362 ns/iter (± 15995173) 1.11
es/full/minify/libraries/jquery 93101975 ns/iter (± 1033456) 87843807 ns/iter (± 625655) 1.06
es/full/minify/libraries/lodash 110110918 ns/iter (± 2175991) 102532208 ns/iter (± 853462) 1.07
es/full/minify/libraries/moment 54556089 ns/iter (± 333704) 50788073 ns/iter (± 479218) 1.07
es/full/minify/libraries/react 19542697 ns/iter (± 299661) 18834695 ns/iter (± 101585) 1.04
es/full/minify/libraries/terser 254654003 ns/iter (± 4700111) 232605452 ns/iter (± 1835642) 1.09
es/full/minify/libraries/three 463997689 ns/iter (± 7097490) 400091218 ns/iter (± 10821754) 1.16
es/full/minify/libraries/typescript 3171902754 ns/iter (± 19436856) 2902939090 ns/iter (± 20792380) 1.09
es/full/minify/libraries/victory 702017032 ns/iter (± 7652880) 620892971 ns/iter (± 5322579) 1.13
es/full/minify/libraries/vue 135952648 ns/iter (± 1148723) 127029323 ns/iter (± 1561247) 1.07
es/full/codegen/es3 34058 ns/iter (± 52) 33461 ns/iter (± 794) 1.02
es/full/codegen/es5 34141 ns/iter (± 44) 33323 ns/iter (± 306) 1.02
es/full/codegen/es2015 34132 ns/iter (± 83) 32818 ns/iter (± 200) 1.04
es/full/codegen/es2016 34127 ns/iter (± 86) 32648 ns/iter (± 234) 1.05
es/full/codegen/es2017 34092 ns/iter (± 56) 32609 ns/iter (± 204) 1.05
es/full/codegen/es2018 34128 ns/iter (± 55) 32831 ns/iter (± 240) 1.04
es/full/codegen/es2019 34175 ns/iter (± 55) 33162 ns/iter (± 268) 1.03
es/full/codegen/es2020 34172 ns/iter (± 56) 32741 ns/iter (± 176) 1.04
es/full/all/es3 181038447 ns/iter (± 4201868) 180029982 ns/iter (± 3657975) 1.01
es/full/all/es5 176378767 ns/iter (± 3250613) 174953760 ns/iter (± 3418339) 1.01
es/full/all/es2015 137773056 ns/iter (± 2797772) 135017842 ns/iter (± 1971070) 1.02
es/full/all/es2016 136277430 ns/iter (± 2628750) 132332294 ns/iter (± 1863309) 1.03
es/full/all/es2017 134578910 ns/iter (± 3708327) 131309708 ns/iter (± 1821332) 1.02
es/full/all/es2018 129340945 ns/iter (± 2338670) 125235070 ns/iter (± 1580567) 1.03
es/full/all/es2019 128224354 ns/iter (± 2607354) 124691375 ns/iter (± 1337046) 1.03
es/full/all/es2020 122972533 ns/iter (± 2638062) 116812038 ns/iter (± 1134185) 1.05
es/full/parser 520206 ns/iter (± 9529) 499360 ns/iter (± 11588) 1.04
es/full/base/fixer 22574 ns/iter (± 34) 22372 ns/iter (± 163) 1.01
es/full/base/resolver_and_hygiene 85222 ns/iter (± 62) 82659 ns/iter (± 374) 1.03
serialization of serde 121 ns/iter (± 0) 117 ns/iter (± 1) 1.03
css/minify/libraries/bootstrap 27463067 ns/iter (± 94376) 26398235 ns/iter (± 274934) 1.04
css/visitor/compare/clone 2080210 ns/iter (± 18790) 2060059 ns/iter (± 28451) 1.01
css/visitor/compare/visit_mut_span 2296401 ns/iter (± 7884) 2220002 ns/iter (± 13263) 1.03
css/visitor/compare/visit_mut_span_panic 2342364 ns/iter (± 6657) 2266797 ns/iter (± 8870) 1.03
css/visitor/compare/fold_span 3038815 ns/iter (± 25997) 2965017 ns/iter (± 16041) 1.02
css/visitor/compare/fold_span_panic 3213668 ns/iter (± 14706) 3201627 ns/iter (± 28034) 1.00
css/lexer/bootstrap_5_1_3 5190164 ns/iter (± 21069) 5067070 ns/iter (± 67034) 1.02
css/lexer/foundation_6_7_4 4381311 ns/iter (± 1476) 4217063 ns/iter (± 49131) 1.04
css/lexer/tailwind_3_1_1 831708 ns/iter (± 311) 797149 ns/iter (± 3558) 1.04
css/parser/bootstrap_5_1_3 21396315 ns/iter (± 83438) 20536212 ns/iter (± 180857) 1.04
css/parser/foundation_6_7_4 17041823 ns/iter (± 58850) 16263528 ns/iter (± 60802) 1.05
css/parser/tailwind_3_1_1 3262056 ns/iter (± 2985) 3169459 ns/iter (± 27963) 1.03
es/codegen/colors 735915 ns/iter (± 395661) 740233 ns/iter (± 398917) 0.99
es/codegen/large 3212379 ns/iter (± 1684143) 3154124 ns/iter (± 1616309) 1.02
es/codegen/with-parser/colors 48722 ns/iter (± 292) 47142 ns/iter (± 705) 1.03
es/codegen/with-parser/large 508682 ns/iter (± 2110) 493582 ns/iter (± 3094) 1.03
es/minify/libraries/antd 1514710092 ns/iter (± 19540228) 1344045201 ns/iter (± 27344824) 1.13
es/minify/libraries/d3 287398341 ns/iter (± 5873694) 244859532 ns/iter (± 1656074) 1.17
es/minify/libraries/echarts 1166831251 ns/iter (± 16628693) 995906600 ns/iter (± 14329997) 1.17
es/minify/libraries/jquery 84524308 ns/iter (± 1452931) 78410783 ns/iter (± 1020199) 1.08
es/minify/libraries/lodash 101152986 ns/iter (± 1174375) 93770077 ns/iter (± 699916) 1.08
es/minify/libraries/moment 49496693 ns/iter (± 2319219) 45692121 ns/iter (± 513311) 1.08
es/minify/libraries/react 18290812 ns/iter (± 371466) 17082287 ns/iter (± 94368) 1.07
es/minify/libraries/terser 231915939 ns/iter (± 3866892) 203599530 ns/iter (± 1372364) 1.14
es/minify/libraries/three 406221950 ns/iter (± 7982043) 341629583 ns/iter (± 8102448) 1.19
es/minify/libraries/typescript 2748663555 ns/iter (± 17838295) 2521029404 ns/iter (± 17291605) 1.09
es/minify/libraries/victory 617911868 ns/iter (± 20158781) 519670216 ns/iter (± 7197098) 1.19
es/minify/libraries/vue 126060663 ns/iter (± 1869239) 114321883 ns/iter (± 779549) 1.10
es/visitor/compare/clone 2353866 ns/iter (± 27138) 2249477 ns/iter (± 37126) 1.05
es/visitor/compare/visit_mut_span 2683706 ns/iter (± 17881) 2599738 ns/iter (± 16980) 1.03
es/visitor/compare/visit_mut_span_panic 2780418 ns/iter (± 13920) 2623050 ns/iter (± 17738) 1.06
es/visitor/compare/fold_span 3876684 ns/iter (± 29915) 3673768 ns/iter (± 26048) 1.06
es/visitor/compare/fold_span_panic 3995244 ns/iter (± 14354) 3927383 ns/iter (± 19053) 1.02
es/lexer/colors 13340 ns/iter (± 23) 12788 ns/iter (± 268) 1.04
es/lexer/angular 6474705 ns/iter (± 10535) 6236842 ns/iter (± 55157) 1.04
es/lexer/backbone 801306 ns/iter (± 1680) 773200 ns/iter (± 3268) 1.04
es/lexer/jquery 4512778 ns/iter (± 1738) 4341895 ns/iter (± 35081) 1.04
es/lexer/jquery mobile 6999539 ns/iter (± 2906) 6754172 ns/iter (± 36951) 1.04
es/lexer/mootools 3513842 ns/iter (± 1998) 3393603 ns/iter (± 14117) 1.04
es/lexer/underscore 659908 ns/iter (± 327) 640512 ns/iter (± 2729) 1.03
es/lexer/three 21219815 ns/iter (± 29881) 20686645 ns/iter (± 235149) 1.03
es/lexer/yui 3907617 ns/iter (± 1605) 3765840 ns/iter (± 16597) 1.04
es/parser/colors 29044 ns/iter (± 28) 28209 ns/iter (± 442) 1.03
es/parser/angular 15684088 ns/iter (± 248022) 14429624 ns/iter (± 160571) 1.09
es/parser/backbone 2192660 ns/iter (± 12777) 2098558 ns/iter (± 18600) 1.04
es/parser/jquery 12164074 ns/iter (± 159918) 11431433 ns/iter (± 108076) 1.06
es/parser/jquery mobile 19052597 ns/iter (± 304932) 17495551 ns/iter (± 139507) 1.09
es/parser/mootools 9116910 ns/iter (± 30270) 8732703 ns/iter (± 119472) 1.04
es/parser/underscore 1854901 ns/iter (± 12778) 1769854 ns/iter (± 17786) 1.05
es/parser/three 56492159 ns/iter (± 416448) 49077994 ns/iter (± 1325941) 1.15
es/parser/yui 9225935 ns/iter (± 62521) 8733235 ns/iter (± 68117) 1.06
es/preset-env/usage/builtin_type 137795 ns/iter (± 33920) 135059 ns/iter (± 34721) 1.02
es/preset-env/usage/property 19873 ns/iter (± 64) 19265 ns/iter (± 124) 1.03
es/resolver/typescript 124334454 ns/iter (± 4145025) 114133627 ns/iter (± 1181776) 1.09
es/fixer/typescript 88182319 ns/iter (± 707992) 81167543 ns/iter (± 1006021) 1.09
es/hygiene/typescript 190776201 ns/iter (± 1274072) 171513579 ns/iter (± 2082664) 1.11
es/resolver_with_hygiene/typescript 341338763 ns/iter (± 2453198) 305165049 ns/iter (± 3188651) 1.12
es/visitor/base-perf/module_clone 81071 ns/iter (± 589) 79188 ns/iter (± 1042) 1.02
es/visitor/base-perf/fold_empty 91024 ns/iter (± 509) 87092 ns/iter (± 1018) 1.05
es/visitor/base-perf/fold_noop_impl_all 90989 ns/iter (± 354) 88086 ns/iter (± 539) 1.03
es/visitor/base-perf/fold_noop_impl_vec 91149 ns/iter (± 295) 87575 ns/iter (± 910) 1.04
es/visitor/base-perf/boxing_boxed_clone 56 ns/iter (± 0) 54 ns/iter (± 0) 1.04
es/visitor/base-perf/boxing_unboxed_clone 41 ns/iter (± 0) 39 ns/iter (± 0) 1.05
es/visitor/base-perf/boxing_boxed 101 ns/iter (± 0) 98 ns/iter (± 0) 1.03
es/visitor/base-perf/boxing_unboxed 78 ns/iter (± 0) 75 ns/iter (± 0) 1.04
es/visitor/base-perf/visit_contains_this 3458 ns/iter (± 45) 3433 ns/iter (± 85) 1.01
es/base/parallel/resolver/typescript 5851147258 ns/iter (± 595861326) 6314695872 ns/iter (± 590724946) 0.93
es/base/parallel/hygiene/typescript 2230704690 ns/iter (± 31943289) 2179078285 ns/iter (± 28656680) 1.02
misc/visitors/time-complexity/time 5 98 ns/iter (± 0) 96 ns/iter (± 0) 1.02
misc/visitors/time-complexity/time 10 311 ns/iter (± 0) 306 ns/iter (± 3) 1.02
misc/visitors/time-complexity/time 15 647 ns/iter (± 0) 625 ns/iter (± 8) 1.04
misc/visitors/time-complexity/time 20 1210 ns/iter (± 10) 1159 ns/iter (± 7) 1.04
misc/visitors/time-complexity/time 40 6186 ns/iter (± 35) 5972 ns/iter (± 39) 1.04
misc/visitors/time-complexity/time 60 15533 ns/iter (± 34) 15179 ns/iter (± 119) 1.02
es/full-target/es2016 259856 ns/iter (± 410) 244157 ns/iter (± 1949) 1.06
es/full-target/es2017 252014 ns/iter (± 390) 239548 ns/iter (± 1028) 1.05
es/full-target/es2018 240866 ns/iter (± 495) 227189 ns/iter (± 1175) 1.06
es2020_nullish_coalescing 98142 ns/iter (± 262) 89385 ns/iter (± 777) 1.10
es2020_optional_chaining 130459 ns/iter (± 311) 120271 ns/iter (± 1033) 1.08
es2022_class_properties 154741 ns/iter (± 235) 145171 ns/iter (± 1266) 1.07
es2018_object_rest_spread 100732 ns/iter (± 206) 94024 ns/iter (± 940) 1.07
es2019_optional_catch_binding 90053 ns/iter (± 289) 82466 ns/iter (± 409) 1.09
es2017_async_to_generator 90386 ns/iter (± 381) 82861 ns/iter (± 617) 1.09
es2016_exponentiation 94904 ns/iter (± 303) 87167 ns/iter (± 851) 1.09
es2015_arrow 98776 ns/iter (± 207) 92546 ns/iter (± 535) 1.07
es2015_block_scoped_fn 96894 ns/iter (± 208) 91001 ns/iter (± 382) 1.06
es2015_block_scoping 175001 ns/iter (± 287) 169348 ns/iter (± 468) 1.03

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

Please sign in to comment.