refactor: destructuring pattern handling in ExprWorker

This commit is contained in:
Hong Jiarong 2025-11-15 16:54:22 +08:00
parent 79215fb191
commit 11e6e31cab

View file

@ -516,7 +516,7 @@ impl ExprWorker<'_> {
} }
ast::DestructuringItem::Named(named) => { ast::DestructuringItem::Named(named) => {
let key = Decl::var(named.name()).into(); let key = Decl::var(named.name()).into();
let val = self.check_pattern_expr(named.expr()); let val = self.check_pattern(named.pattern());
names.push((key, val)); names.push((key, val));
} }
ast::DestructuringItem::Spread(spreading) => { ast::DestructuringItem::Spread(spreading) => {
@ -525,14 +525,17 @@ impl ExprWorker<'_> {
} else { } else {
Decl::spread(spreading.span()).into() Decl::spread(spreading.span()).into()
}; };
let pattern = Pattern::Expr(Expr::Star).into();
if inputs.is_empty() { if inputs.is_empty() {
spread_left = spread_left = Some((decl.clone(), pattern));
Some((decl, self.check_pattern_expr(spreading.expr())));
} else { } else {
spread_right = spread_right = Some((decl.clone(), pattern));
Some((decl, self.check_pattern_expr(spreading.expr())));
} }
self.resolve_as(Decl::as_def(&decl, None));
self.scope_mut()
.insert_mut(decl.name().clone(), decl.into());
} }
} }
} }