File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ ---
2+ swc_core : patch
3+ swc_ecma_parser : patch
4+ ---
5+
6+ fix(parser): reject invalid object rest assignment targets
Original file line number Diff line number Diff line change @@ -246,15 +246,32 @@ impl<I: Tokens> Parser<I> {
246246 } ;
247247
248248 let element_pat_ty = pat_ty. element ( ) ;
249- let pat = if let PatType :: BindingElement = element_pat_ty {
250- if let Expr :: Ident ( i) = * expr {
251- i. into ( )
252- } else {
253- self . emit_err ( span, SyntaxError :: DotsWithoutIdentifier ) ;
254- Pat :: Invalid ( Invalid { span } )
249+ let pat = match element_pat_ty {
250+ PatType :: BindingElement => {
251+ if let Expr :: Ident ( i) = * expr {
252+ i. into ( )
253+ } else {
254+ self . emit_err (
255+ span,
256+ SyntaxError :: DotsWithoutIdentifier ,
257+ ) ;
258+ Pat :: Invalid ( Invalid { span } )
259+ }
255260 }
256- } else {
257- self . reparse_expr_as_pat ( element_pat_ty, expr) ?
261+ PatType :: AssignElement => {
262+ if !expr. is_valid_simple_assignment_target (
263+ self . ctx ( ) . contains ( Context :: Strict ) ,
264+ ) {
265+ self . emit_err ( span, SyntaxError :: NotSimpleAssign ) ;
266+ expr. into ( )
267+ } else {
268+ self . reparse_expr_as_pat ( element_pat_ty, expr) ?
269+ }
270+ }
271+ _ => unreachable ! (
272+ "object rest element must be binding/assignment \
273+ element"
274+ ) ,
258275 } ;
259276 if let Pat :: Assign ( _) = pat {
260277 self . emit_err ( span, SyntaxError :: TS1048 )
Original file line number Diff line number Diff line change 1+ ( { ...{ } } = { } ) ;
Original file line number Diff line number Diff line change 1+ x Cannot assign to this
2+ ,-[$DIR/tests/errors/issue-11543/input.js:1:1]
3+ 1 | ({...{}} = {});
4+ : ^^^^^
5+ `----
You can’t perform that action at this time.
0 commit comments