@@ -75,10 +75,21 @@ impl<'a> CoverGrammar<'a, ArrayExpression<'a>> for ArrayAssignmentTarget<'a> {
7575 }
7676 ArrayExpressionElement :: SpreadElement ( elem) => {
7777 if i == len - 1 {
78- rest = Some ( p. ast . assignment_target_rest (
79- elem. span ,
80- AssignmentTarget :: cover ( elem. unbox ( ) . argument , p) ,
81- ) ) ;
78+ let span = elem. span ;
79+ let argument = elem. unbox ( ) . argument ;
80+ if !matches ! (
81+ argument. get_inner_expression( ) ,
82+ Expression :: Identifier ( _)
83+ | Expression :: ArrayExpression ( _)
84+ | Expression :: ObjectExpression ( _)
85+ | Expression :: StaticMemberExpression ( _)
86+ | Expression :: ComputedMemberExpression ( _)
87+ | Expression :: PrivateFieldExpression ( _)
88+ ) {
89+ p. error ( diagnostics:: invalid_rest_assignment_target ( argument. span ( ) ) ) ;
90+ }
91+ let target = AssignmentTarget :: cover ( argument, p) ;
92+ rest = Some ( p. ast . assignment_target_rest ( span, target) ) ;
8293 if let Some ( span) = p. state . trailing_commas . get ( & expr. span . start ) {
8394 p. error ( diagnostics:: rest_element_trailing_comma ( * span) ) ;
8495 }
@@ -130,10 +141,19 @@ impl<'a> CoverGrammar<'a, ObjectExpression<'a>> for ObjectAssignmentTarget<'a> {
130141 }
131142 ObjectPropertyKind :: SpreadProperty ( spread) => {
132143 if i == len - 1 {
133- rest = Some ( p. ast . assignment_target_rest (
134- spread. span ,
135- AssignmentTarget :: cover ( spread. unbox ( ) . argument , p) ,
136- ) ) ;
144+ let span = spread. span ;
145+ let argument = spread. unbox ( ) . argument ;
146+ if !matches ! (
147+ argument. get_inner_expression( ) ,
148+ Expression :: Identifier ( _)
149+ | Expression :: StaticMemberExpression ( _)
150+ | Expression :: ComputedMemberExpression ( _)
151+ | Expression :: PrivateFieldExpression ( _)
152+ ) {
153+ p. error ( diagnostics:: invalid_rest_assignment_target ( argument. span ( ) ) ) ;
154+ }
155+ let target = AssignmentTarget :: cover ( argument, p) ;
156+ rest = Some ( p. ast . assignment_target_rest ( span, target) ) ;
137157 } else {
138158 return p. fatal_error ( diagnostics:: spread_last_element ( spread. span ) ) ;
139159 }
0 commit comments