@@ -571,17 +571,8 @@ export class LuaPrinter {
571571
572572 chunks . push ( "{" ) ;
573573
574- if ( expression . fields && expression . fields . length > 0 ) {
575- if ( expression . fields . length === 1 ) {
576- // Inline tables with only one entry
577- chunks . push ( this . printTableFieldExpression ( expression . fields [ 0 ] ) ) ;
578- } else {
579- chunks . push ( "\n" ) ;
580- this . pushIndent ( ) ;
581- expression . fields . forEach ( f => chunks . push ( this . indent ( ) , this . printTableFieldExpression ( f ) , ",\n" ) ) ;
582- this . popIndent ( ) ;
583- chunks . push ( this . indent ( ) ) ;
584- }
574+ if ( expression . fields ) {
575+ chunks . push ( ...this . printExpressionList ( expression . fields ) ) ;
585576 }
586577
587578 chunks . push ( "}" ) ;
@@ -632,30 +623,33 @@ export class LuaPrinter {
632623 public printCallExpression ( expression : tstl . CallExpression ) : SourceNode {
633624 const chunks = [ ] ;
634625
635- const parameterChunks =
636- expression . params !== undefined ? expression . params . map ( e => this . printExpression ( e ) ) : [ ] ;
626+ chunks . push ( this . printExpression ( expression . expression ) , "(" ) ;
637627
638- chunks . push ( this . printExpression ( expression . expression ) , "(" , ...this . joinChunks ( ", " , parameterChunks ) , ")" ) ;
628+ if ( expression . params ) {
629+ chunks . push ( ...this . printExpressionList ( expression . params ) ) ;
630+ }
631+
632+ chunks . push ( ")" ) ;
639633
640634 return this . createSourceNode ( expression , chunks ) ;
641635 }
642636
643637 public printMethodCallExpression ( expression : tstl . MethodCallExpression ) : SourceNode {
644- const prefix = this . printExpression ( expression . prefixExpression ) ;
638+ const chunks = [ ] ;
645639
646- const parameterChunks =
647- expression . params !== undefined ? expression . params . map ( e => this . printExpression ( e ) ) : [ ] ;
640+ const prefix = this . printExpression ( expression . prefixExpression ) ;
648641
649642 const name = this . printIdentifier ( expression . name ) ;
650643
651- return this . createSourceNode ( expression , [
652- prefix ,
653- ":" ,
654- name ,
655- "(" ,
656- ...this . joinChunks ( ", " , parameterChunks ) ,
657- ")" ,
658- ] ) ;
644+ chunks . push ( prefix , ":" , name , "(" ) ;
645+
646+ if ( expression . params ) {
647+ chunks . push ( ...this . printExpressionList ( expression . params ) ) ;
648+ }
649+
650+ chunks . push ( ")" ) ;
651+
652+ return this . createSourceNode ( expression , chunks ) ;
659653 }
660654
661655 public printIdentifier ( expression : tstl . Identifier ) : SourceNode {
@@ -715,6 +709,25 @@ export class LuaPrinter {
715709 return result ;
716710 }
717711
712+ protected printExpressionList ( expressions : tstl . Expression [ ] ) : SourceChunk [ ] {
713+ const chunks : SourceChunk [ ] = [ ] ;
714+
715+ if ( expressions . every ( e => tsHelper . isSimpleExpression ( e ) ) ) {
716+ chunks . push ( ...this . joinChunks ( ", " , expressions . map ( e => this . printExpression ( e ) ) ) ) ;
717+ } else {
718+ chunks . push ( "\n" ) ;
719+ this . pushIndent ( ) ;
720+ expressions . forEach ( ( p , i ) => {
721+ const tail = i < expressions . length - 1 ? ",\n" : "\n" ;
722+ chunks . push ( this . indent ( ) , this . printExpression ( p ) , tail ) ;
723+ } ) ;
724+ this . popIndent ( ) ;
725+ chunks . push ( this . indent ( ) ) ;
726+ }
727+
728+ return chunks ;
729+ }
730+
718731 // The key difference between this and SourceNode.toStringWithSourceMap() is that SourceNodes with null line/column
719732 // will not generate 'empty' mappings in the source map that point to nothing in the original TS.
720733 private buildSourceMap ( sourceFile : string , sourceRoot : string , rootSourceNode : SourceNode ) : SourceMapGenerator {
0 commit comments