Skip to content

Commit

Permalink
More fix
Browse files Browse the repository at this point in the history
  • Loading branch information
kdy1 committed Jul 11, 2024
1 parent b6c5710 commit f95c367
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 49 deletions.
37 changes: 18 additions & 19 deletions crates/swc_ecma_parser/src/parser/class_and_fn.rs
Original file line number Diff line number Diff line change
Expand Up @@ -208,12 +208,12 @@ impl<I: Tokens> Parser<I> {
} else {
for member in class.body.iter() {
match member {
ClassMember::ClassProp(ClassProp {
ClassMember::ClassProp(box ClassProp {
is_abstract: true,
span,
..
})
| ClassMember::Method(ClassMethod {
| ClassMember::Method(box ClassMethod {
span,
is_abstract: true,
..
Expand All @@ -231,8 +231,8 @@ impl<I: Tokens> Parser<I> {

fn parse_super_class(&mut self) -> PResult<(Expr, Option<Box<TsTypeParamInstantiation>>)> {
let super_class = self.parse_lhs_expr()?;
match *super_class {
Expr::TsInstantiation(TsInstantiation {
match super_class {
Expr::TsInstantiation(box TsInstantiation {
expr, type_args, ..
}) => Ok((expr, Some(type_args))),
_ => {
Expand Down Expand Up @@ -295,10 +295,7 @@ impl<I: Tokens> Parser<I> {
expect!(self, ')');
expr
} else {
let expr = self
.parse_ident(false, false)
.map(Expr::from)
.map(Box::new)?;
let expr = self.parse_ident(false, false).map(Expr::from)?;

self.parse_subscripts(Callee::Expr(expr), false, true)?
};
Expand Down Expand Up @@ -350,7 +347,7 @@ impl<I: Tokens> Parser<I> {
let elem = p.parse_class_member()?;

if !p.ctx().in_declare {
if let ClassMember::Constructor(Constructor {
if let ClassMember::Constructor(box Constructor {
body: Some(..),
span,
..
Expand Down Expand Up @@ -835,7 +832,7 @@ impl<I: Tokens> Parser<I> {
Pat::Assign(ref p) => Some(p.span()),
_ => None,
},
ParamOrTsParamProp::TsParamProp(TsParamProp {
ParamOrTsParamProp::TsParamProp(box TsParamProp {
param: TsParamPropParam::Assign(ref p),
..
}) => Some(p.span()),
Expand All @@ -858,7 +855,7 @@ impl<I: Tokens> Parser<I> {
}
}

return Ok(ClassMember::Constructor(Constructor {
return Ok(ClassMember::Constructor(Box::new(Constructor {
span: span!(self, start),
accessibility,
key: match key {
Expand All @@ -869,7 +866,7 @@ impl<I: Tokens> Parser<I> {
params,
body,
..Default::default()
}));
})));
} else {
return self.make_method(
|p| p.parse_formal_params(),
Expand Down Expand Up @@ -1092,7 +1089,7 @@ impl<I: Tokens> Parser<I> {
}

if accessor_token.is_some() {
return Ok(ClassMember::AutoAccessor(AutoAccessor {
return Ok(ClassMember::AutoAccessor(Box::new(AutoAccessor {
span: span!(p, start),
key,
value,
Expand All @@ -1103,7 +1100,7 @@ impl<I: Tokens> Parser<I> {
is_abstract,
is_override,
definite,
}));
})));
}

Ok(match key {
Expand Down Expand Up @@ -1628,10 +1625,11 @@ impl OutputType for Decl {
.into())
Ok(Decl::Fn(Box::new(FnDecl {
Ok(Decl::Fn(FnDecl {
Ok(Decl::Fn(Box::new(FnDecl {
declare: false,
ident,
function,
}))
})))
}

fn finish_class(_: Span, ident: Option<Ident>, class: Box<Class>) -> Result<Self, SyntaxError> {
Expand All @@ -1645,10 +1643,11 @@ impl OutputType for Decl {
.into())
Ok(Decl::Class(Box::new(ClassDecl {
Ok(Decl::Class(ClassDecl {
Ok(Decl::Class(Box::new(ClassDecl {
declare: false,
ident,
class,
}))
})))
}
}

Expand Down Expand Up @@ -1681,7 +1680,7 @@ impl<I: Tokens> FnBodyParser<Box<BlockStmtOrExpr>> for Parser<I> {
self.emit_err(span, SyntaxError::IllegalLanguageModeDirective);
}
}
BlockStmtOrExpr::BlockStmt(block_stmt)
BlockStmtOrExpr::BlockStmt(Box::new(block_stmt))
})
.map(Box::new)
} else {
Expand Down Expand Up @@ -1799,9 +1798,9 @@ mod tests {
fn class_expr() {
assert_eq_ignore_span!(
expr("(class extends a {})"),
Box::new(Expr::Paren(ParenExpr {
Expr::Paren(Box::new(ParenExpr {
span,
expr: Box::new(Expr::Class(ClassExpr {
expr: Expr::Class(Box::new(ClassExpr {
ident: None,
class: Box::new(Class {
decorators: vec![],
Expand Down
54 changes: 24 additions & 30 deletions crates/swc_ecma_parser/src/parser/expr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -105,8 +105,8 @@ impl<I: Tokens> Parser<I> {

let type_parameters = p.parse_ts_type_params(false, true)?;
let mut arrow = p.parse_assignment_expr_base()?;
match *arrow {
Expr::Arrow(ArrowExpr {
match arrow {
Expr::Arrow(box ArrowExpr {
ref mut span,
ref mut type_params,
..
Expand Down Expand Up @@ -142,7 +142,7 @@ impl<I: Tokens> Parser<I> {

return_if_arrow!(self, cond);

match *cond {
match cond {
// if cond is conditional expression but not left-hand-side expression,
// just return it.
Expr::Cond(..) | Expr::Bin(..) | Expr::Unary(..) | Expr::Update(..) => return Ok(cond),
Expand Down Expand Up @@ -437,7 +437,7 @@ impl<I: Tokens> Parser<I> {
let type_ann = self.in_type().parse_with(|p| p.parse_ts_type())?;
return Ok(TsAsExpr {
span: span!(self, start),
expr: Box::new(id.into()),
expr: id.into(),
type_ann,
}
.into());
Expand Down Expand Up @@ -576,24 +576,24 @@ impl<I: Tokens> Parser<I> {
return_if_arrow!(self, callee);

if is_new_expr {
match *callee {
match callee {
Expr::OptChain(OptChainExpr {
span,
optional: true,
..
}) => {
syntax_error!(self, span, SyntaxError::OptChainCannotFollowConstructorCall)
}
Expr::Member(MemberExpr { ref obj, .. }) => {
Expr::Member(box MemberExpr { ref obj, .. }) => {
if let Expr::OptChain(OptChainExpr {
span,
optional: true,
..
}) = **obj
}) = obj
{
syntax_error!(
self,
span,
*span,
SyntaxError::OptChainCannotFollowConstructorCall
)
}
Expand Down Expand Up @@ -896,8 +896,7 @@ impl<I: Tokens> Parser<I> {
if let Some(&Token::BinOp(..)) = self.input.cur() {
// ) is required
self.emit_err(self.input.cur_span(), SyntaxError::TS1005);
let errorred_expr =
self.parse_bin_op_recursively(Box::new(arrow_expr.into()), 0)?;
let errorred_expr = self.parse_bin_op_recursively(arrow_expr.into(), 0)?;

if !is!(self, ';') {
// ; is required
Expand All @@ -914,10 +913,10 @@ impl<I: Tokens> Parser<I> {
// like (a, {b = 1});
for expr_or_spread in paren_items.iter() {
if let AssignTargetOrSpread::ExprOrSpread(e) = expr_or_spread {
if let Expr::Object(o) = &*e.expr {
if let Expr::Object(o) = &e.expr {
for p in o.props.iter() {
if let PropOrSpread::Prop(prop) = p {
if let Prop::Assign(..) = **prop {
if let Prop::Assign(..) = prop {
self.emit_err(prop.span(), SyntaxError::AssignProperty);
}
}
Expand All @@ -940,9 +939,7 @@ impl<I: Tokens> Parser<I> {
// It's a call expression
return Ok(CallExpr {
span: span!(self, async_span.lo()),
callee: Callee::Expr(Box::new(
Ident::new_no_ctxt("async".into(), async_span).into(),
)),
callee: Callee::Expr(Ident::new_no_ctxt("async".into(), async_span).into()),
args: expr_or_spreads,
..Default::default()
}
Expand Down Expand Up @@ -1007,10 +1004,7 @@ impl<I: Tokens> Parser<I> {
}
}

fn parse_tpl_elements(
&mut self,
is_tagged_tpl: bool,
) -> PResult<(Vec<Expr>, Vec<TplElement>)> {
fn parse_tpl_elements(&mut self, is_tagged_tpl: bool) -> PResult<(Vec<Expr>, Vec<TplElement>)> {
trace_cur!(self, parse_tpl_elements);

let mut exprs = vec![];
Expand Down Expand Up @@ -1205,17 +1199,17 @@ impl<I: Tokens> Parser<I> {
let obj = mut_obj_opt.take().unwrap();

if let Callee::Expr(callee) = &obj {
if let Expr::OptChain(..) = &**callee {
if let Expr::OptChain(..) = callee {
return Ok(Some((
OptChainExpr {
span: span!(p, start),
base: Box::new(OptChainBase::Call(OptCall {
base: Box::new(OptChainBase::Call(Box::new(OptCall {
span: span!(p, start),
callee: obj.expect_expr(),
type_args: Some(type_args),
args,
..Default::default()
})),
}))),
optional: false,
}
.into(),
Expand Down Expand Up @@ -1304,10 +1298,10 @@ impl<I: Tokens> Parser<I> {
expect!(self, ']');
let span = Span::new(obj.span_lo(), self.input.last_pos());
debug_assert_eq!(obj.span_lo(), span.lo());
let prop = ComputedPropName {
let prop = Box::new(ComputedPropName {
span: Span::new(bracket_lo, self.input.last_pos()),
expr: prop,
};
});

let type_args = if self.syntax().typescript() && is!(self, '<') {
self.try_parse_ts_type_args()
Expand All @@ -1316,7 +1310,7 @@ impl<I: Tokens> Parser<I> {
};

return Ok((
Box::new(match obj {
match obj {
Callee::Import(..) => unreachable!(),
Callee::Super(obj) => {
if !self.ctx().allow_direct_super
Expand Down Expand Up @@ -1352,7 +1346,7 @@ impl<I: Tokens> Parser<I> {
OptChainExpr {
span,
optional: question_dot_token.is_some(),
base: Box::new(OptChainBase::Member(expr)),
base: Box::new(OptChainBase::Member(Box::new(expr))),
}
.into()
} else {
Expand All @@ -1361,7 +1355,7 @@ impl<I: Tokens> Parser<I> {

if let Some(type_args) = type_args {
TsInstantiation {
expr: Box::new(expr),
expr,
type_args,
span: span!(self, start),
}
Expand All @@ -1370,7 +1364,7 @@ impl<I: Tokens> Parser<I> {
expr
}
}
}),
},
true,
));
}
Expand Down Expand Up @@ -1401,13 +1395,13 @@ impl<I: Tokens> Parser<I> {
OptChainExpr {
span,
optional: question_dot_token.is_some(),
base: Box::new(OptChainBase::Call(OptCall {
base: Box::new(OptChainBase::Call(Box::new(OptCall {
span: span!(self, start),
callee,
args,
type_args,
..Default::default()
})),
}))),
}
.into(),
true,
Expand Down

0 comments on commit f95c367

Please sign in to comment.