@@ -322,7 +322,7 @@ namespace ts {
322322 const variables = getInitializedVariables ( node ) ;
323323 if ( variables . length === 0 ) {
324324 if ( hasReceiver ) {
325- return convertBindingNameToAssignmentTarget ( node . declarations [ 0 ] . name ) ;
325+ return visitNode ( convertToAssignmentElementTarget ( node . declarations [ 0 ] . name ) , visitor , isExpression ) ;
326326 }
327327 return undefined ;
328328 }
@@ -348,81 +348,14 @@ namespace ts {
348348 }
349349
350350 function transformInitializedVariable ( node : VariableDeclaration ) {
351- return setSourceMapRange (
351+ const converted = setSourceMapRange (
352352 createAssignment (
353- convertBindingNameToAssignmentTarget ( node . name ) ,
354- visitNode ( node . initializer , visitor , isExpression )
353+ convertToAssignmentElementTarget ( node . name ) ,
354+ node . initializer
355355 ) ,
356356 node
357357 ) ;
358- }
359-
360- function convertBindingNameToAssignmentTarget ( node : BindingName ) : Identifier | AssignmentPattern {
361- return isObjectBindingPattern ( node ) ? convertObjectBindingPatternToObjectAssignmentPattern ( node ) :
362- isArrayBindingPattern ( node ) ? convertArrayBindingPatternToArrayAssignmentPattern ( node ) :
363- setSourceMapRange ( < Identifier > getSynthesizedClone ( node ) , node ) ;
364- }
365-
366- function convertObjectBindingPatternToObjectAssignmentPattern ( node : ObjectBindingPattern ) : ObjectLiteralExpression {
367- return createObjectLiteral (
368- map ( node . elements , convertObjectBindingElementToObjectAssignmentElement )
369- ) ;
370- }
371-
372- function convertObjectBindingElementToObjectAssignmentElement ( node : BindingElement ) : ObjectLiteralElementLike {
373- if ( node . propertyName ) {
374- let expression : Expression = convertBindingNameToAssignmentTarget ( node . name ) ;
375- if ( node . initializer ) {
376- expression = createAssignment ( expression , visitNode ( node . initializer , visitor , isExpression ) ) ;
377- }
378- return setSourceMapRange (
379- createPropertyAssignment (
380- visitNode ( node . propertyName , visitor , isPropertyName ) ,
381- expression
382- ) ,
383- node
384- ) ;
385- }
386- else if ( node . dotDotDotToken ) {
387- return setSourceMapRange (
388- createSpreadAssignment (
389- visitNode ( cast ( node . name , isIdentifier ) , visitor , isIdentifier )
390- ) ,
391- node
392- ) ;
393- }
394- else {
395- return setSourceMapRange (
396- createShorthandPropertyAssignment (
397- visitNode ( cast ( node . name , isIdentifier ) , visitor , isIdentifier ) ,
398- visitNode ( node . initializer , visitor , isExpression )
399- ) ,
400- node
401- ) ;
402- }
403- }
404-
405- function convertArrayBindingPatternToArrayAssignmentPattern ( node : ArrayBindingPattern ) : ArrayLiteralExpression {
406- return setSourceMapRange (
407- createArrayLiteral (
408- map ( node . elements , convertArrayBindingElementToArrayAssignmentElement )
409- ) ,
410- node
411- ) ;
412- }
413-
414- function convertArrayBindingElementToArrayAssignmentElement ( node : ArrayBindingElement ) : Expression {
415- if ( isOmittedExpression ( node ) ) return node ;
416- let expression : Expression = convertBindingNameToAssignmentTarget ( node . name ) ;
417- if ( node . initializer ) {
418- expression = createAssignment ( expression , visitNode ( node . initializer , visitor , isExpression ) ) ;
419- setSourceMapRange ( expression , node ) ;
420- }
421- else if ( node . dotDotDotToken ) {
422- expression = createSpread ( expression ) ;
423- setSourceMapRange ( expression , node ) ;
424- }
425- return expression ;
358+ return visitNode ( converted , visitor , isExpression ) ;
426359 }
427360
428361 function collidesWithParameterName ( { name } : VariableDeclaration | BindingElement ) : boolean {
0 commit comments