@@ -174,7 +174,10 @@ where
174174 match & p. binding {
175175 AssignmentTargetMaybeDefault :: AssignmentTargetWithDefault ( d) => {
176176 // { location: x = parent } = {};
177-
177+ // if let Some(name) = p.binding.iden && name == "location" {
178+ // self.jschanges.add(rewrite!(p.span(), TempVar));
179+ // *location_assigned = true;
180+ // }
178181 // we still need to rewrite whatever stuff might be in the default expression
179182 walk:: walk_expression ( self , & d. init ) ;
180183 }
@@ -187,13 +190,50 @@ where
187190 self . jschanges . add ( rewrite ! ( p. span( ) , TempVar ) ) ;
188191 * location_assigned = true ;
189192 }
193+ }
194+ AssignmentTargetMaybeDefault :: ArrayAssignmentTarget ( a) => {
195+ self . recurse_array_assignment_target ( a, restids, location_assigned) ;
190196 }
191197 _ => { }
192198 }
193199 }
194200 }
195201 }
196202 }
203+ fn recurse_array_assignment_target (
204+ & mut self ,
205+ s : & oxc:: ast:: ast:: ArrayAssignmentTarget < ' data > ,
206+ restids : & mut Vec < Atom < ' data > > ,
207+ location_assigned : & mut bool ,
208+ ) {
209+ // note that i don't actually have to care about the rest param here since it wont have dangerous props. i still need to keep track of the object destructure rests though
210+ for elem in & s. elements {
211+ if let Some ( elem) = elem {
212+ match elem {
213+ AssignmentTargetMaybeDefault :: AssignmentTargetWithDefault ( p) => {
214+ if let Some ( name) = p. binding . get_identifier_name ( ) && name == "location" {
215+ self . jschanges . add ( rewrite ! ( p. span( ) , TempVar ) ) ;
216+ * location_assigned = true ;
217+ }
218+ walk:: walk_expression ( self , & p. init ) ;
219+ }
220+ AssignmentTargetMaybeDefault :: AssignmentTargetIdentifier ( p) => {
221+ if p. name == "location" {
222+ self . jschanges . add ( rewrite ! ( p. span( ) , TempVar ) ) ;
223+ * location_assigned = true ;
224+ }
225+ }
226+ AssignmentTargetMaybeDefault :: ObjectAssignmentTarget ( o) => {
227+ self . recurse_object_assignment_target ( o, restids, location_assigned) ;
228+ }
229+ AssignmentTargetMaybeDefault :: ArrayAssignmentTarget ( a) => {
230+ self . recurse_array_assignment_target ( a, restids, location_assigned) ;
231+ }
232+ _ => { }
233+ }
234+ }
235+ }
236+ }
197237
198238 fn scramitize ( & mut self , span : Span ) {
199239 self . jschanges . add ( rewrite ! ( span, Scramitize ) ) ;
@@ -438,13 +478,11 @@ where
438478 match & it. kind {
439479 BindingPatternKind :: BindingIdentifier ( p) => {
440480 // let a = 0;
441- dbg ! ( & p) ;
442481 walk:: walk_binding_identifier ( self , p) ;
443482 }
444483 BindingPatternKind :: AssignmentPattern ( p) => {
445484 walk:: walk_binding_pattern ( self , & p. left ) ;
446485 walk:: walk_expression ( self , & p. right ) ;
447- dbg ! ( & p) ;
448486 }
449487 BindingPatternKind :: ObjectPattern ( p) => {
450488 for prop in & p. properties {
@@ -533,6 +571,19 @@ where
533571 }
534572 return ;
535573 }
574+ AssignmentTarget :: ArrayAssignmentTarget ( a) => {
575+ if !self . flags . destructure_rewrites {
576+ return ;
577+ }
578+
579+ let mut restids: Vec < Atom < ' data > > = Vec :: new ( ) ;
580+ let mut location_assigned: bool = false ;
581+ self . recurse_array_assignment_target ( a, & mut restids, & mut location_assigned) ;
582+ if restids. len ( ) > 0 || location_assigned {
583+ self . jschanges
584+ . add ( rewrite ! ( it. span, WrapObjectAssignment { restids, location_assigned } ) ) ;
585+ }
586+ }
536587 _ => { }
537588 }
538589 walk:: walk_expression ( self , & it. right ) ;
0 commit comments