@@ -2683,6 +2683,8 @@ export class LuaTransformer {
26832683 return this . transformArrayLiteral ( expression as ts . ArrayLiteralExpression ) ;
26842684 case ts . SyntaxKind . ObjectLiteralExpression :
26852685 return this . transformObjectLiteral ( expression as ts . ObjectLiteralExpression ) ;
2686+ case ts . SyntaxKind . OmittedExpression :
2687+ return this . transformOmittedExpression ( expression as ts . OmittedExpression ) ;
26862688 case ts . SyntaxKind . DeleteExpression :
26872689 return this . transformDeleteExpression ( expression as ts . DeleteExpression ) ;
26882690 case ts . SyntaxKind . FunctionExpression :
@@ -2909,7 +2911,7 @@ export class LuaTransformer {
29092911 // Destructuring assignment
29102912 const left =
29112913 expression . left . elements . length > 0
2912- ? expression . left . elements . map ( e => this . transformExpression ( e ) )
2914+ ? expression . left . elements . map ( e => this . transformArrayBindingExpression ( e ) )
29132915 : [ tstl . createAnonymousIdentifier ( expression . left ) ] ;
29142916 let right : tstl . Expression [ ] ;
29152917 if ( ts . isArrayLiteralExpression ( expression . right ) ) {
@@ -3466,6 +3468,11 @@ export class LuaTransformer {
34663468 return tstl . createTableExpression ( properties , expression ) ;
34673469 }
34683470
3471+ public transformOmittedExpression ( node : ts . OmittedExpression ) : ExpressionVisitResult {
3472+ const isWithinBindingAssignmentStatement = tsHelper . isWithinLiteralAssignmentStatement ( node ) ;
3473+ return isWithinBindingAssignmentStatement ? tstl . createAnonymousIdentifier ( ) : tstl . createNilLiteral ( node ) ;
3474+ }
3475+
34693476 public transformDeleteExpression ( expression : ts . DeleteExpression ) : ExpressionVisitResult {
34703477 const lhs = this . transformExpression ( expression . expression ) as tstl . AssignmentLeftHandSideExpression ;
34713478 const assignment = tstl . createAssignmentStatement ( lhs , tstl . createNilLiteral ( ) , expression ) ;
@@ -4577,14 +4584,18 @@ export class LuaTransformer {
45774584 }
45784585
45794586 public transformArrayBindingElement ( name : ts . ArrayBindingElement ) : ExpressionVisitResult {
4587+ return this . transformArrayBindingExpression ( name as ts . Expression ) ;
4588+ }
4589+
4590+ public transformArrayBindingExpression ( name : ts . Expression ) : ExpressionVisitResult {
45804591 if ( ts . isOmittedExpression ( name ) ) {
4581- return tstl . createIdentifier ( "__" , name ) ;
4592+ return this . transformOmittedExpression ( name ) ;
45824593 } else if ( ts . isIdentifier ( name ) ) {
45834594 return this . transformIdentifier ( name ) ;
45844595 } else if ( ts . isBindingElement ( name ) && ts . isIdentifier ( name . name ) ) {
45854596 return this . transformIdentifier ( name . name ) ;
45864597 } else {
4587- throw TSTLErrors . UnsupportedKind ( "array binding element " , name . kind , name ) ;
4598+ throw TSTLErrors . UnsupportedKind ( "array binding expression " , name . kind , name ) ;
45884599 }
45894600 }
45904601
0 commit comments