From 8c045fb182b3549b6f0bc10ecfc5a8fe13d5ed6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=EB=8F=99=EC=9C=A4=20=28Donny=29?= Date: Wed, 10 Jul 2024 23:08:07 +0900 Subject: [PATCH] fixup for rebase --- crates/swc_ecma_ast/src/expr.rs | 7 -- crates/swc_ecma_ast/src/pat.rs | 1 + .../src/edge_default_param.rs | 8 -- .../src/template_literal_caching.rs | 10 -- .../src/block_scoping/mod.rs | 51 +-------- .../src/classes/constructor.rs | 3 +- .../swc_ecma_compat_es2015/src/classes/mod.rs | 9 +- .../src/computed_props.rs | 25 ----- .../src/destructuring.rs | 103 ++---------------- crates/swc_ecma_compat_es2015/src/for_of.rs | 5 +- .../src/function_name.rs | 2 - .../swc_ecma_compat_es2015/src/generator.rs | 75 ++++++------- .../swc_ecma_compat_es2015/src/new_target.rs | 2 +- .../src/object_super.rs | 8 +- .../swc_ecma_compat_es2015/src/parameters.rs | 25 +---- crates/swc_ecma_compat_es2015/src/spread.rs | 6 +- .../src/template_literal.rs | 3 +- .../src/typeof_symbol.rs | 5 +- .../src/exponentiation.rs | 2 +- .../src/nullish_coalescing.rs | 2 - 20 files changed, 69 insertions(+), 283 deletions(-) diff --git a/crates/swc_ecma_ast/src/expr.rs b/crates/swc_ecma_ast/src/expr.rs index b6a6fcf1e8cb6..1f9ab3b8ae8f5 100644 --- a/crates/swc_ecma_ast/src/expr.rs +++ b/crates/swc_ecma_ast/src/expr.rs @@ -336,14 +336,9 @@ impl Expr { exprs.remove(0) } else { SeqExpr { - Expr::Seq(Box::new(SeqExpr { span: DUMMY_SP, exprs, } - Box::new(SeqExpr { - span: DUMMY_SP, - exprs, - }) .into() } } @@ -609,8 +604,6 @@ impl From for ObjectLit { PropOrSpread::Prop(Prop::KeyValue(Box::new(KeyValueProp { key: PropName::Ident(item.key), value: Lit::Str(item.value).into(), - value: Expr::Lit(Box::new(Lit::Str(item.value))), - value: Box::new(Lit::Str(item.value)).into(), }))) }) .collect(), diff --git a/crates/swc_ecma_ast/src/pat.rs b/crates/swc_ecma_ast/src/pat.rs index ba82f8f96f10e..c75a82feafec9 100644 --- a/crates/swc_ecma_ast/src/pat.rs +++ b/crates/swc_ecma_ast/src/pat.rs @@ -58,6 +58,7 @@ impl Clone for Pat { impl Default for Pat { fn default() -> Self { Invalid { span: DUMMY_SP }.into() + Pat::Invalid(Invalid { span: DUMMY_SP }) } } impl Take for Pat { diff --git a/crates/swc_ecma_compat_bugfixes/src/edge_default_param.rs b/crates/swc_ecma_compat_bugfixes/src/edge_default_param.rs index 9ebdd1a39225e..e4ba6f3a821ec 100644 --- a/crates/swc_ecma_compat_bugfixes/src/edge_default_param.rs +++ b/crates/swc_ecma_compat_bugfixes/src/edge_default_param.rs @@ -50,14 +50,6 @@ impl VisitMut for EdgeDefaultParam { right: value.clone(), } .into(), - value: Box::new( - AssignPat { - span: *span, - left: key.clone().into(), - right: value.clone(), - } - .into(), - ), }); n.props[idx] = prop; diff --git a/crates/swc_ecma_compat_bugfixes/src/template_literal_caching.rs b/crates/swc_ecma_compat_bugfixes/src/template_literal_caching.rs index 9e833bbf3a892..765e05e894e2e 100644 --- a/crates/swc_ecma_compat_bugfixes/src/template_literal_caching.rs +++ b/crates/swc_ecma_compat_bugfixes/src/template_literal_caching.rs @@ -81,14 +81,6 @@ impl Fold for TemplateLiteralCaching { } .into(), ), - Some(Expr::Arrow(ArrowExpr { - span: DUMMY_SP, - params: vec![t.clone().into()], - body: Box::new(BlockStmtOrExpr::Expr(t.into())), - is_async: false, - is_generator: false, - ..Default::default() - })), ) } @@ -113,7 +105,6 @@ impl Fold for TemplateLiteralCaching { let t = private_ident!("t"); self.create_binding(t.clone(), None); let inline_cache: Expr = BinExpr { - let inline_cache = BinExpr { span: DUMMY_SP, op: op!("||"), left: t.clone().into(), @@ -126,7 +117,6 @@ impl Fold for TemplateLiteralCaching { .into(), } .into(); - }); // The original tag function becomes a plain function call. // The expressions omitted from the cached Strings tag are diff --git a/crates/swc_ecma_compat_es2015/src/block_scoping/mod.rs b/crates/swc_ecma_compat_es2015/src/block_scoping/mod.rs index 92f0892fd68c7..c2e6a47fa205e 100644 --- a/crates/swc_ecma_compat_es2015/src/block_scoping/mod.rs +++ b/crates/swc_ecma_compat_es2015/src/block_scoping/mod.rs @@ -143,7 +143,7 @@ impl BlockScoping { let mut env_hoister = FnEnvHoister::new(SyntaxContext::empty().apply_mark(self.unresolved_mark)); body_stmt.visit_mut_with(&mut env_hoister); - let mut inits: Vec = vec![]; + let mut inits: Vec> = vec![]; for mut var in env_hoister.to_decl() { if let Some(init) = var.init.take() { @@ -591,7 +591,7 @@ impl VisitMut for BlockScoping { if self.var_decl_kind == VarDeclKind::Var { var.init = None } else { - var.init = Some(var.span().into()) + var.init = Some(Expr::undefined(var.span())) } } } @@ -828,37 +828,6 @@ impl VisitMut for FlowHelper<'_> { } .into(), ), - arg: Some(Box::new(Expr::Object(ObjectLit { - span, - props: vec![PropOrSpread::Prop(Box::new(Prop::KeyValue(KeyValueProp { - key: PropName::Ident(Ident::new_no_ctxt("v".into(), DUMMY_SP)), - value: s.arg.take().unwrap_or_else(|| { - Box::new(Expr::Unary(UnaryExpr { - span: DUMMY_SP, - op: op!("void"), - arg: Expr::undefined(DUMMY_SP), - })) - }), - })))], - }))), - arg: Some( - ObjectLit { - span, - props: vec![PropOrSpread::Prop(Box::new(Prop::KeyValue( - KeyValueProp { - key: PropName::Ident(Ident::new_no_ctxt("v".into(), DUMMY_SP)), - value: s.arg.take().unwrap_or_else(|| { - Box::new(Expr::Unary(UnaryExpr { - span: DUMMY_SP, - op: op!("void"), - arg: Expr::undefined(DUMMY_SP), - })) - }), - }, - )))], - } - .into(), - ), }); } _ => node.visit_mut_children_with(self), @@ -902,9 +871,9 @@ struct MutationHandler<'a> { } impl MutationHandler<'_> { - fn make_reassignment(&self, orig: Option) -> Expr { + fn make_reassignment(&self, orig: Option>) -> Expr { if self.map.is_empty() { - return *orig.unwrap_or_else(|| DUMMY_SP.into()); + return *orig.unwrap_or_else(|| Expr::undefined(DUMMY_SP)); } let mut exprs = Vec::with_capacity(self.map.len() + 1); @@ -919,18 +888,8 @@ impl MutationHandler<'_> { } .into(), ); - exprs.push(Box::new(Expr::Assign(AssignExpr { - span: DUMMY_SP, - left: Ident::new(id.0.clone(), DUMMY_SP, id.1).into(), - op: op!("="), - right: Box::new(Expr::Ident(Ident::new(id.0.clone(), DUMMY_SP, *ctxt))), - }))); - right: Box::new(Expr::Ident(Ident::new(id.0.clone(), DUMMY_SP, *ctxt))), - } - .into(), - ); } - exprs.push(orig.unwrap_or_else(|| DUMMY_SP.into())); + exprs.push(orig.unwrap_or_else(|| Expr::undefined(DUMMY_SP))); SeqExpr { span: DUMMY_SP, diff --git a/crates/swc_ecma_compat_es2015/src/classes/constructor.rs b/crates/swc_ecma_compat_es2015/src/classes/constructor.rs index 2abe823cca678..58ee2a518d2bf 100644 --- a/crates/swc_ecma_compat_es2015/src/classes/constructor.rs +++ b/crates/swc_ecma_compat_es2015/src/classes/constructor.rs @@ -237,7 +237,6 @@ impl VisitMut for ConstructorFolder<'_> { left: call, op: op!("||"), right: Box::new(ThisExpr { span: DUMMY_SP }.into()), - right: Box::new(Expr::This(ThisExpr { span: DUMMY_SP })), } .into() } else { @@ -366,7 +365,7 @@ pub(super) enum ReturningMode { Returning { /// Mark for `_this` mark: Mark, - arg: Option, + arg: Option>, }, /// `super()` call diff --git a/crates/swc_ecma_compat_es2015/src/classes/mod.rs b/crates/swc_ecma_compat_es2015/src/classes/mod.rs index 95d4f3310b534..470c30634f3f6 100644 --- a/crates/swc_ecma_compat_es2015/src/classes/mod.rs +++ b/crates/swc_ecma_compat_es2015/src/classes/mod.rs @@ -106,9 +106,9 @@ pub struct Config { struct Data { key_prop: Box, - method: Option, - set: Option, - get: Option, + method: Option>, + set: Option>, + get: Option>, } #[swc_trace] @@ -966,7 +966,6 @@ where .map(Some) .collect(), } - .into() .as_arg() } @@ -1277,7 +1276,7 @@ fn is_always_initialized(body: &[Stmt]) -> bool { !v.found } -fn escape_keywords(mut e: Expr) -> Expr { +fn escape_keywords(mut e: Box) -> Box { if let Expr::Fn(f) = &mut *e { if let Some(i) = &mut f.ident { let sym = Ident::verify_symbol(&i.sym); diff --git a/crates/swc_ecma_compat_es2015/src/computed_props.rs b/crates/swc_ecma_compat_es2015/src/computed_props.rs index b5e4bd059a686..ccb45c7ae4454 100644 --- a/crates/swc_ecma_compat_es2015/src/computed_props.rs +++ b/crates/swc_ecma_compat_es2015/src/computed_props.rs @@ -114,10 +114,6 @@ impl VisitMut for ComputedProps { } .into(), ), - right: Box::new(Expr::Object(ObjectLit { - span: DUMMY_SP, - props: obj_props, - })), } .into() }, @@ -219,21 +215,6 @@ impl VisitMut for ComputedProps { } .into(), ), - right: Box::new(Expr::Bin(BinExpr { - span, - left: mutator_elem.clone().into(), - op: op!("||"), - right: Box::new(Expr::Object(ObjectLit { - span, - left: mutator_elem.clone().into(), - op: op!("||"), - right: Box::new(Expr::Object(ObjectLit { - span, - props: vec![], - })), - } - .into(), - ), } .into(), ); @@ -253,10 +234,6 @@ impl VisitMut for ComputedProps { } .into(), ), - right: Box::new(Expr::Fn(FnExpr { - ident: None, - function, - })), } .into(), ); @@ -350,7 +327,6 @@ impl VisitMut for ComputedProps { // Last value exprs.push(obj_ident.into()); *expr = SeqExpr { - *expr = Expr::Seq(SeqExpr { span: DUMMY_SP, exprs, } @@ -434,7 +410,6 @@ fn prop_name_to_expr(p: PropName, loose: bool) -> (Expr, bool) { match p { PropName::Ident(i) => ( if loose { - Expr::Ident(i.into()) i.into() } else { Lit::Str(Str { diff --git a/crates/swc_ecma_compat_es2015/src/destructuring.rs b/crates/swc_ecma_compat_es2015/src/destructuring.rs index 0c562db39d12d..35c0d9f400ca7 100644 --- a/crates/swc_ecma_compat_es2015/src/destructuring.rs +++ b/crates/swc_ecma_compat_es2015/src/destructuring.rs @@ -557,7 +557,12 @@ struct AssignFolder { } impl AssignFolder { - pub fn handle_assign_pat(&mut self, span: Span, mut pat: AssignPat, right: &mut Expr) -> Expr { + pub fn handle_assign_pat( + &mut self, + span: Span, + mut pat: AssignPat, + right: &mut Box, + ) -> Expr { let ref_ident = make_ref_ident(self.c, &mut self.vars, None); let mut exprs = vec![Box::new( @@ -571,7 +576,6 @@ impl AssignFolder { )]; let mut assign_cond_expr: Expr = AssignExpr { - let mut assign_cond_expr = AssignExpr { span, left: pat.left.take().try_into().unwrap(), op: op!("="), @@ -680,13 +684,6 @@ impl VisitMut for AssignFolder { } .into(), ), - right: Box::new(Expr::Array(ArrayLit { - span: DUMMY_SP, - elems: arr_elems - .take() - .expect("two rest element?") - .collect(), - })), } .into(), ); @@ -702,7 +699,7 @@ impl VisitMut for AssignFolder { debug_assert_eq!(e.spread, None); e.expr }) - .unwrap_or_else(|| p.span().into()); + .unwrap_or_else(|| Expr::undefined(p.span())); let p = p.take(); let mut expr = if let Pat::Assign(pat) = p { @@ -767,44 +764,6 @@ impl VisitMut for AssignFolder { ) .as_callee(), args: vec![right.take().as_arg()], - exprs.push(Box::new(Expr::Assign(AssignExpr { - span: DUMMY_SP, - op: op!("="), - left: ref_ident.clone().into(), - right: if self.c.loose { - right.take() - } else { - match &mut **right { - Expr::Ident(Ident { sym, .. }) if &**sym == "arguments" => { - Box::new(Expr::Call(CallExpr { - span: DUMMY_SP, - callee: member_expr!( - Default::default(), - Default::default(), - Array.prototype.slice.call - ) - .as_callee(), - args: vec![right.take().as_arg()], - ..Default::default() - })) - } - Expr::Array(..) => right.take(), - _ => { - // if left has rest then need `_to_array` - // else `_sliced_to_array` - if elems.iter().any(|elem| matches!(elem, Some(Pat::Rest(..)))) - { - Box::new(Expr::Call(CallExpr { - span: DUMMY_SP, - callee: member_expr!( - Default::default(), - Default::default(), - Array.prototype.slice.call - ) - .as_callee(), - args: vec![right.take().as_arg()], - ..Default::default() - })) ..Default::default() } .into(), @@ -842,38 +801,6 @@ impl VisitMut for AssignFolder { ) } } - Expr::Array(..) => right.take(), - _ => { - // if left has rest then need `_to_array` - // else `_sliced_to_array` - if elems - .iter() - .any(|elem| matches!(elem, Some(Pat::Rest(..)))) - { - Box::new( - CallExpr { - span: DUMMY_SP, - callee: helper!(to_array), - args: vec![right.take().as_arg()], - ..Default::default() - } - .into(), - ) - } else { - Box::new( - CallExpr { - span: DUMMY_SP, - callee: helper!(sliced_to_array), - args: vec![ - right.take().as_arg(), - elems.len().as_arg(), - ], - ..Default::default() - } - .into(), - ) - } - } } }, } @@ -904,7 +831,6 @@ impl VisitMut for AssignFolder { ); let mut assign_expr: Expr = AssignExpr { - let mut assign_expr = AssignExpr { span: *span, left: left.take().try_into().unwrap(), op: op!("="), @@ -917,7 +843,6 @@ impl VisitMut for AssignFolder { } Pat::Rest(RestPat { arg, .. }) => { let mut assign_expr: Expr = AssignExpr { - let mut assign_expr = AssignExpr { span: elem_span, op: op!("="), left: arg.take().try_into().unwrap(), @@ -939,7 +864,6 @@ impl VisitMut for AssignFolder { } _ => { let mut assign_expr: Expr = AssignExpr { - let mut assign_expr = AssignExpr { span: elem_span, op: op!("="), left: elem.take().try_into().unwrap(), @@ -979,8 +903,6 @@ impl VisitMut for AssignFolder { op: op!("="), left: p.key.clone().into(), right: right.take().make_member(p.key.clone().into()).into(), - }); - right: right.take().make_member(p.key.clone()).into(), } .into(); return; @@ -1133,7 +1055,7 @@ impl VisitMut for AssignFolder { if var_decl.kind == VarDeclKind::Const { var_decl.decls.iter_mut().for_each(|v| { if v.init.is_none() { - v.init = Some(DUMMY_SP.into()); + v.init = Some(Expr::undefined(DUMMY_SP)); } }) } @@ -1209,7 +1131,7 @@ fn make_ref_idx_expr(ref_ident: &Ident, i: usize) -> MemberExpr { ref_ident.clone().computed_member(i as f64) } -fn make_ref_ident(c: Config, decls: &mut Vec, init: Option) -> Ident { +fn make_ref_ident(c: Config, decls: &mut Vec, init: Option>) -> Ident { make_ref_ident_for_array(c, decls, init, None) } @@ -1217,7 +1139,7 @@ fn make_ref_ident(c: Config, decls: &mut Vec, init: Option) fn make_ref_ident_for_array( c: Config, decls: &mut Vec, - mut init: Option, + mut init: Option>, elem_cnt: Option, ) -> Ident { if elem_cnt.is_none() { @@ -1281,7 +1203,7 @@ fn make_ref_ident_for_array( ref_ident } -fn make_ref_prop_expr(ref_ident: &Ident, prop: Expr, mut computed: bool) -> Expr { +fn make_ref_prop_expr(ref_ident: &Ident, prop: Box, mut computed: bool) -> Expr { computed |= matches!(*prop, Expr::Lit(Lit::Num(..)) | Expr::Lit(Lit::Str(..))); MemberExpr { @@ -1301,8 +1223,6 @@ fn make_ref_prop_expr(ref_ident: &Ident, prop: Expr, mut computed: bool) -> Expr /// Creates `tmp === void 0 ? def_value : tmp` fn make_cond_expr(tmp: Ident, def_value: Box) -> Expr { - CondExpr { -fn make_cond_expr(tmp: Ident, def_value: Expr) -> Expr { CondExpr { span: DUMMY_SP, test: BinExpr { @@ -1320,7 +1240,6 @@ fn make_cond_expr(tmp: Ident, def_value: Expr) -> Expr { alt: tmp.into(), } .into() - }) } fn can_be_null(e: &Expr) -> bool { diff --git a/crates/swc_ecma_compat_es2015/src/for_of.rs b/crates/swc_ecma_compat_es2015/src/for_of.rs index 1d5e5f170a35e..fe1348c7d7174 100644 --- a/crates/swc_ecma_compat_es2015/src/for_of.rs +++ b/crates/swc_ecma_compat_es2015/src/for_of.rs @@ -104,7 +104,6 @@ impl ForOf { BinExpr { span: DUMMY_SP, left: Box::new(i.clone().into()), - left: Box::new(Expr::Ident(i.clone())), op: op!("<"), right: arr.clone().make_member(quote_ident!("length")).into(), } @@ -116,7 +115,6 @@ impl ForOf { prefix: false, op: op!("++"), arg: Box::new(i.clone().into()), - arg: Box::new(Expr::Ident(i.clone())), } .into(), ); @@ -449,7 +447,6 @@ impl ForOf { op: op!("!"), arg: { let step_expr: Expr = AssignExpr { - let step_expr = Box::new(Expr::Assign(AssignExpr { span: DUMMY_SP, left: step.into(), op: op!("="), @@ -589,7 +586,7 @@ impl ForOf { /// ``` #[tracing::instrument(level = "info", skip_all)] fn make_finally_block( - iterator_return: Expr, + iterator_return: Box, normal_completion_ident: &Ident, error_flag_ident: Ident, error_ident: Ident, diff --git a/crates/swc_ecma_compat_es2015/src/function_name.rs b/crates/swc_ecma_compat_es2015/src/function_name.rs index b1522d2ce7890..c836e13e2d83c 100644 --- a/crates/swc_ecma_compat_es2015/src/function_name.rs +++ b/crates/swc_ecma_compat_es2015/src/function_name.rs @@ -78,8 +78,6 @@ impl VisitMut for FnName { p.value = if let PropName::Ident(ref i) = p.key { FnExpr { ident: Some(prepare(i.clone().into())), - FnExpr { - ident: Some(prepare(i.clone())), ..expr.take() } .into() diff --git a/crates/swc_ecma_compat_es2015/src/generator.rs b/crates/swc_ecma_compat_es2015/src/generator.rs index b7e48947d18ee..4b1d17027b096 100644 --- a/crates/swc_ecma_compat_es2015/src/generator.rs +++ b/crates/swc_ecma_compat_es2015/src/generator.rs @@ -170,10 +170,10 @@ enum OpCode { #[derive(Debug, Is, Clone)] enum OpArgs { Label(Label), - LabelExpr(Label, Expr), + LabelExpr(Label, Box), Stmt(Box), - OptExpr(Option), - PatAndExpr(AssignTarget, Expr), + OptExpr(Option>), + PatAndExpr(AssignTarget, Box), } /// whether a generated code block is opening or closing at the current @@ -741,7 +741,7 @@ impl VisitMut for Generator { expressions.push(temp.into()); - *e = *expressions.into(); + *e = *Expr::from_exprs(expressions); } Expr::Array(node) => { @@ -816,7 +816,7 @@ impl VisitMut for Generator { &mut args, Some(ExprOrSpread { spread: None, - expr: DUMMY_SP.into(), + expr: Expr::undefined(DUMMY_SP), }), None, )) @@ -825,7 +825,6 @@ impl VisitMut for Generator { }; let apply = callee.apply( - let apply = callee.into().apply( node.span, this_arg, arg.take().map(|v| v.as_arg()).into_iter().collect(), @@ -1202,10 +1201,10 @@ impl Generator { fn reduce_property( &mut self, - mut expressions: Vec, + mut expressions: Vec>, property: CompiledProp, temp: &mut Ident, - ) -> Vec { + ) -> Vec> { if match &property { CompiledProp::Prop(p) => contains_yield(p), CompiledProp::Accessor(g, s) => { @@ -1215,7 +1214,7 @@ impl Generator { { self.emit_stmt(Stmt::Expr(ExprStmt { span: DUMMY_SP, - expr: expressions.take().into(), + expr: Expr::from_exprs(expressions.take()), })); } @@ -1228,16 +1227,12 @@ impl Generator { span: DUMMY_SP, obj: temp.clone().into(), prop: MemberProp::Ident(p.clone().into()), - obj: temp.clone().into(), - prop: MemberProp::Ident(p.clone()), } .into(), right: p.into(), } .into(), Prop::KeyValue(p) => AssignExpr { - }), - Prop::KeyValue(p) => Expr::Assign(AssignExpr { span: DUMMY_SP, op: op!("="), left: MemberExpr { @@ -2114,7 +2109,7 @@ impl Generator { 0 } - fn cache_expression(&mut self, node: Expr) -> Ident { + fn cache_expression(&mut self, node: Box) -> Ident { match *node { Expr::Ident(i) => i, _ => { @@ -2591,7 +2586,7 @@ impl Generator { /// Creates an expression that can be used to indicate the value for a /// label. - fn create_label(&mut self, label: Option