Skip to content

Commit

Permalink
fix(es/compat): Visit non-method properties in a nested object literal (
Browse files Browse the repository at this point in the history
  • Loading branch information
Austaras committed Mar 19, 2022
1 parent 544a341 commit f5b9600
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 3 deletions.
1 change: 1 addition & 0 deletions crates/swc_ecma_preset_env/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,7 @@ where
es2015::spread(es2015::spread::Config { loose }),
true
);
let pass = add!(pass, ObjectSuper, es2015::object_super());
let pass = add!(pass, FunctionName, es2015::function_name());
let pass = add!(pass, ArrowFunctions, es2015::arrow());
let pass = add!(pass, DuplicateKeys, es2015::duplicate_keys());
Expand Down
13 changes: 11 additions & 2 deletions crates/swc_ecma_transforms_compat/src/es2015/object_super.rs
Original file line number Diff line number Diff line change
Expand Up @@ -135,8 +135,17 @@ impl VisitMut for SuperReplacer {
fn visit_mut_object_lit(&mut self, obj: &mut ObjectLit) {
for prop_or_spread in obj.props.iter_mut() {
if let PropOrSpread::Prop(prop) = prop_or_spread {
if let Prop::Method(MethodProp { key, function: _ }) = &mut **prop {
key.visit_mut_with(self);
match &mut **prop {
Prop::Method(MethodProp { key, .. })
| Prop::Getter(GetterProp { key, .. })
| Prop::Setter(SetterProp { key, .. }) => key.visit_mut_with(self),
Prop::KeyValue(KeyValueProp { key, value }) => {
key.visit_mut_with(self);
if !(value.is_fn_expr() || value.is_class()) {
value.visit_mut_with(self)
}
}
Prop::Shorthand(_) | Prop::Assign(_) => (),
}
}
}
Expand Down
40 changes: 39 additions & 1 deletion crates/swc_ecma_transforms_compat/tests/es2015_object_super.rs
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ test!(
const obj = {
test: 2,
get() {
return super.test;
},
Expand Down Expand Up @@ -202,3 +202,41 @@ test!(
};
Object.setPrototypeOf(obj, Base);"#
);

test!(
syntax(),
|_| tr(),
nested_object,
r#"
function f0() {
}
f0.prototype = {
name: 'Nicholas',
age: 29,
job: 'Software Engineer',
sayName() {
v0[args](1, {
v9: v7 => super.v3(v27),
foo: a,
done: 'a'
});
}
};
"#,
r#"
var _obj;
function f0() {}
f0.prototype = _obj = {
name: "Nicholas",
age: 29,
job: "Software Engineer",
sayName: function sayName() {
v0[args](1, {
v9: (v7)=>_get(_getPrototypeOf(_obj), "v3", this).call(this, v27),
foo: a,
done: "a"
});
}
};
"#
);

1 comment on commit f5b9600

@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: f5b9600 Previous: 0d6bd81 Ratio
base_tr_fixer 30617 ns/iter (± 7411) 27941 ns/iter (± 5577) 1.10
base_tr_resolver_and_hygiene 131999 ns/iter (± 27090) 119754 ns/iter (± 46917) 1.10
codegen_es2015 36555 ns/iter (± 5162) 36948 ns/iter (± 9968) 0.99
codegen_es2016 34146 ns/iter (± 6973) 37993 ns/iter (± 8241) 0.90
codegen_es2017 36286 ns/iter (± 8088) 37297 ns/iter (± 7282) 0.97
codegen_es2018 38709 ns/iter (± 10798) 36779 ns/iter (± 9679) 1.05
codegen_es2019 35661 ns/iter (± 6381) 36448 ns/iter (± 7702) 0.98
codegen_es2020 34989 ns/iter (± 4101) 36556 ns/iter (± 8980) 0.96
codegen_es3 34540 ns/iter (± 5882) 37398 ns/iter (± 6963) 0.92
codegen_es5 35119 ns/iter (± 4839) 38009 ns/iter (± 7987) 0.92
full_es2015 164302586 ns/iter (± 18221660) 155937711 ns/iter (± 25060915) 1.05
full_es2016 150684802 ns/iter (± 20178885) 152847261 ns/iter (± 16151231) 0.99
full_es2017 155184812 ns/iter (± 17127474) 150934421 ns/iter (± 16493562) 1.03
full_es2018 151050581 ns/iter (± 19735422) 149739670 ns/iter (± 15318819) 1.01
full_es2019 153372366 ns/iter (± 18642908) 148152851 ns/iter (± 16615397) 1.04
full_es2020 147853340 ns/iter (± 14966885) 143700905 ns/iter (± 17200999) 1.03
full_es3 205926816 ns/iter (± 19524804) 200525164 ns/iter (± 23362735) 1.03
full_es5 202543832 ns/iter (± 24603164) 190364570 ns/iter (± 24072601) 1.06
parser 654685 ns/iter (± 112677) 652989 ns/iter (± 215529) 1.00
ser_ast_node 181 ns/iter (± 37) 158 ns/iter (± 35) 1.15
ser_serde 177 ns/iter (± 24) 148 ns/iter (± 43) 1.20
emit_colors 4979167 ns/iter (± 3749469) 9373700 ns/iter (± 7602261) 0.53
emit_large 53641768 ns/iter (± 85096421) 50476676 ns/iter (± 72956303) 1.06
base_clone 2727863 ns/iter (± 232187) 2490822 ns/iter (± 776848) 1.10
fold_span 4677811 ns/iter (± 471565) 4769814 ns/iter (± 1300567) 0.98
fold_span_panic 4880953 ns/iter (± 546035) 4864885 ns/iter (± 1378974) 1.00
visit_mut_span 3197328 ns/iter (± 254348) 3030941 ns/iter (± 440964) 1.05
visit_mut_span_panic 3046275 ns/iter (± 465765) 3115990 ns/iter (± 4032199) 0.98
usage_builtin_type 17029001 ns/iter (± 10238013) 18013118 ns/iter (± 14319793) 0.95
usage_property 429139 ns/iter (± 61801) 433388 ns/iter (± 94118) 0.99
boxing_boxed 191 ns/iter (± 18) 130 ns/iter (± 55) 1.47
boxing_boxed_clone 93 ns/iter (± 6) 80 ns/iter (± 16) 1.16
boxing_unboxed 180 ns/iter (± 13) 128 ns/iter (± 51) 1.41
boxing_unboxed_clone 81 ns/iter (± 4) 63 ns/iter (± 9) 1.29
time_10 365 ns/iter (± 18) 304 ns/iter (± 81) 1.20
time_15 867 ns/iter (± 65) 690 ns/iter (± 158) 1.26
time_20 1475 ns/iter (± 230) 1207 ns/iter (± 350) 1.22
time_40 5076 ns/iter (± 629) 4465 ns/iter (± 949) 1.14
time_5 106 ns/iter (± 17) 98 ns/iter (± 22) 1.08
time_60 10090 ns/iter (± 1359) 10156 ns/iter (± 2352) 0.99
total 0 ns/iter (± 0) 0 ns/iter (± 0) NaN

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

Please sign in to comment.