fix(es/minifier): Skip getter/setter when collapsing vars (#4557)

This commit is contained in:
Austaras 2022-05-07 15:23:13 +08:00 committed by GitHub
parent 56fb1c8762
commit 5d3a01ad35
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 236 additions and 3 deletions

View File

@ -1,12 +1,14 @@
var num, strOrNum, var1, var2, var21, obj1 = {
var num, strOrNum, var1, obj1 = {
method (param) {
var var22;
return num = "string" == typeof var1 && var1.length, num = "string" == typeof var22 && var22.length, num = "string" == typeof param && param.length, strOrNum;
},
get prop () {
var var2;
return num = "string" == typeof var1 && var1.length, num = "string" == typeof var2 && var2.length, strOrNum;
},
set prop (param){
var var21;
num = "string" == typeof var1 && var1.length, num = "string" == typeof var21 && var21.length, num = "string" == typeof param && param.length;
}
};

View File

@ -1,12 +1,14 @@
var num, strOrNum, var1, var2, var21, obj1 = {
var num, strOrNum, var1, obj1 = {
method: function(param) {
var var22;
return num = "string" == typeof var1 && var1.length, num = "string" == typeof var22 && var22.length, num = "string" == typeof param && param.length, strOrNum;
},
get prop () {
var var2;
return num = "string" == typeof var1 && var1.length, num = "string" == typeof var2 && var2.length, strOrNum;
},
set prop (param){
var var21;
num = "string" == typeof var1 && var1.length, num = "string" == typeof var21 && var21.length, num = "string" == typeof param && param.length;
}
};

View File

@ -63,7 +63,7 @@ where
};
report_change!(
"collpase_vars: Decided to inline {}{:?}",
"collapse_vars: Decided to inline {}{:?}",
left.id.sym,
left.id.span.ctxt
);

View File

@ -258,6 +258,10 @@ impl Visit for VarWithOutInitCounter {
fn visit_function(&mut self, _: &Function) {}
fn visit_getter_prop(&mut self, _: &GetterProp) {}
fn visit_setter_prop(&mut self, _: &SetterProp) {}
fn visit_var_decl(&mut self, v: &VarDecl) {
v.visit_children_with(self);
@ -314,6 +318,10 @@ impl VisitMut for VarMover {
/// Noop
fn visit_mut_function(&mut self, _: &mut Function) {}
fn visit_mut_getter_prop(&mut self, _: &mut GetterProp) {}
fn visit_mut_setter_prop(&mut self, _: &mut SetterProp) {}
fn visit_mut_module_item(&mut self, s: &mut ModuleItem) {
if let ModuleItem::Stmt(_) = s {
s.visit_mut_children_with(self);
@ -411,6 +419,10 @@ impl VisitMut for VarPrepender {
/// Noop
fn visit_mut_function(&mut self, _: &mut Function) {}
fn visit_mut_getter_prop(&mut self, _: &mut GetterProp) {}
fn visit_mut_setter_prop(&mut self, _: &mut SetterProp) {}
fn visit_mut_var_decl(&mut self, v: &mut VarDecl) {
if self.vars.is_empty() {
return;

View File

@ -0,0 +1,198 @@
TestSnapshot {
vars: [
(
(
Atom('B' type=inline),
#2,
),
VarUsageInfo {
inline_prevented: false,
ref_count: 1,
cond_init: false,
declared: false,
declared_count: 0,
declared_as_fn_param: false,
declared_as_fn_expr: false,
assign_count: 0,
mutation_by_call_count: 0,
usage_count: 1,
reassigned_with_assignment: false,
reassigned_with_var_decl: false,
mutated: true,
has_property_access: true,
has_property_mutation: true,
accessed_props: {},
exported: false,
used_above_decl: true,
is_fn_local: true,
used_by_nested_fn: false,
executed_multiple_time: false,
used_in_cond: false,
var_kind: None,
var_initialized: false,
declared_as_catch_param: false,
no_side_effect_for_member_access: false,
used_as_callee: false,
used_as_arg: false,
pure_fn: false,
infects: [],
},
),
(
(
Atom('a' type=inline),
#3,
),
VarUsageInfo {
inline_prevented: false,
ref_count: 3,
cond_init: false,
declared: true,
declared_count: 1,
declared_as_fn_param: false,
declared_as_fn_expr: false,
assign_count: 1,
mutation_by_call_count: 0,
usage_count: 2,
reassigned_with_assignment: true,
reassigned_with_var_decl: false,
mutated: true,
has_property_access: false,
has_property_mutation: false,
accessed_props: {},
exported: false,
used_above_decl: false,
is_fn_local: true,
used_by_nested_fn: false,
executed_multiple_time: true,
used_in_cond: true,
var_kind: Some(
"var",
),
var_initialized: true,
declared_as_catch_param: false,
no_side_effect_for_member_access: true,
used_as_callee: false,
used_as_arg: false,
pure_fn: false,
infects: [],
},
),
(
(
Atom('getChildNodes$1' type=dynamic),
#1,
),
VarUsageInfo {
inline_prevented: false,
ref_count: 1,
cond_init: false,
declared: true,
declared_count: 1,
declared_as_fn_param: false,
declared_as_fn_expr: false,
assign_count: 1,
mutation_by_call_count: 0,
usage_count: 0,
reassigned_with_assignment: true,
reassigned_with_var_decl: false,
mutated: true,
has_property_access: false,
has_property_mutation: false,
accessed_props: {},
exported: false,
used_above_decl: false,
is_fn_local: false,
used_by_nested_fn: true,
executed_multiple_time: false,
used_in_cond: false,
var_kind: Some(
"var",
),
var_initialized: false,
declared_as_catch_param: false,
no_side_effect_for_member_access: false,
used_as_callee: false,
used_as_arg: false,
pure_fn: false,
infects: [],
},
),
(
(
Atom('getChildNodesImpl' type=dynamic),
#4,
),
VarUsageInfo {
inline_prevented: false,
ref_count: 1,
cond_init: false,
declared: true,
declared_count: 1,
declared_as_fn_param: true,
declared_as_fn_expr: false,
assign_count: 0,
mutation_by_call_count: 0,
usage_count: 1,
reassigned_with_assignment: false,
reassigned_with_var_decl: false,
mutated: false,
has_property_access: false,
has_property_mutation: false,
accessed_props: {},
exported: false,
used_above_decl: false,
is_fn_local: true,
used_by_nested_fn: true,
executed_multiple_time: false,
used_in_cond: false,
var_kind: None,
var_initialized: false,
declared_as_catch_param: false,
no_side_effect_for_member_access: false,
used_as_callee: false,
used_as_arg: false,
pure_fn: false,
infects: [],
},
),
(
(
Atom('setGetChildNodes' type=dynamic),
#1,
),
VarUsageInfo {
inline_prevented: true,
ref_count: 0,
cond_init: false,
declared: true,
declared_count: 1,
declared_as_fn_param: false,
declared_as_fn_expr: false,
assign_count: 0,
mutation_by_call_count: 0,
usage_count: 0,
reassigned_with_assignment: false,
reassigned_with_var_decl: false,
mutated: false,
has_property_access: false,
has_property_mutation: false,
accessed_props: {},
exported: false,
used_above_decl: false,
is_fn_local: true,
used_by_nested_fn: false,
executed_multiple_time: false,
used_in_cond: false,
var_kind: None,
var_initialized: true,
declared_as_catch_param: false,
no_side_effect_for_member_access: false,
used_as_callee: false,
used_as_arg: false,
pure_fn: false,
infects: [],
},
),
],
}

View File

@ -0,0 +1,10 @@
B.c = {
get foo() {
for (var a = 1; a < 10; a++) {}
},
};
var getChildNodes$1;
export function setGetChildNodes(getChildNodesImpl) {
getChildNodes$1 = getChildNodesImpl;
}

View File

@ -0,0 +1,9 @@
var getChildNodes$1;
B.c = {
get foo () {
for(var a = 1; a < 10; a++);
}
};
export function setGetChildNodes(getChildNodesImpl) {
getChildNodes$1 = getChildNodesImpl;
}