11import * as tstl from "./LuaAST" ;
22
3+ import { TSHelper as tsHelper } from "./TSHelper" ;
4+
35export class LuaPrinter {
46
57 /* tslint:disable:object-literal-sort-keys */
68 private static operatorMap : { [ key in tstl . Operator ] : string } = {
7- [ tstl . SyntaxKind . AssignmentOperator ] : "=" ,
89 [ tstl . SyntaxKind . AdditionOperator ] : "+" ,
910 [ tstl . SyntaxKind . SubractionOperator ] : "-" ,
1011 [ tstl . SyntaxKind . MultiplicationOperator ] : "*" ,
@@ -65,8 +66,8 @@ export class LuaPrinter {
6566 return this . printDoStatement ( statement as tstl . DoStatement ) ;
6667 case tstl . SyntaxKind . VariableDeclarationStatement :
6768 return this . printVariableDeclarationStatement ( statement as tstl . VariableDeclarationStatement ) ;
68- case tstl . SyntaxKind . VariableAssignmentStatement :
69- return this . printVariableAssignmentStatement ( statement as tstl . VariableAssignmentStatement ) ;
69+ case tstl . SyntaxKind . AssignmentStatement :
70+ return this . printVariableAssignmentStatement ( statement as tstl . AssignmentStatement ) ;
7071 case tstl . SyntaxKind . IfStatement :
7172 return this . printIfStatement ( statement as tstl . IfStatement ) ;
7273 case tstl . SyntaxKind . WhileStatement :
@@ -109,7 +110,7 @@ export class LuaPrinter {
109110 }
110111 }
111112
112- private printVariableAssignmentStatement ( statement : tstl . VariableAssignmentStatement ) : string {
113+ private printVariableAssignmentStatement ( statement : tstl . AssignmentStatement ) : string {
113114 return this . indent ( `${ statement . left . map ( e => this . printExpression ( e ) ) . join ( ", " ) } = ` +
114115 `${ statement . right . map ( e => this . printExpression ( e ) ) . join ( ", " ) } ;\n` ) ;
115116 }
@@ -272,7 +273,7 @@ export class LuaPrinter {
272273 }
273274
274275 private printFunctionExpression ( expression : tstl . FunctionExpression ) : string {
275- const paramterArr : string [ ] = expression . params . map ( i => this . printIdentifier ( i ) ) ;
276+ const paramterArr : string [ ] = expression . params ? expression . params . map ( i => this . printIdentifier ( i ) ) : [ ] ;
276277 if ( expression . dots ) {
277278 paramterArr . push ( this . printDotsLiteral ( expression . dots ) ) ;
278279 }
@@ -290,7 +291,11 @@ export class LuaPrinter {
290291 const value = this . printExpression ( expression . value ) ;
291292
292293 if ( expression . key ) {
293- return `[${ this . printExpression ( expression . key ) } ] = ${ value } ` ;
294+ if ( tstl . isIdentifier ( expression . key ) ) {
295+ return `${ this . printExpression ( expression . key ) } = ${ value } ` ;
296+ } else {
297+ return `[${ this . printExpression ( expression . key ) } ] = ${ value } ` ;
298+ }
294299 } else {
295300 return value ;
296301 }
@@ -320,7 +325,7 @@ export class LuaPrinter {
320325 }
321326
322327 private printCallExpression ( expression : tstl . CallExpression ) : string {
323- const params = expression . params . map ( e => this . printExpression ( e ) ) . join ( ", " ) ;
328+ const params = expression . params ? expression . params . map ( e => this . printExpression ( e ) ) . join ( ", " ) : "" ;
324329 return `${ this . printExpression ( expression . expression ) } (${ params } )` ;
325330 }
326331
@@ -337,8 +342,8 @@ export class LuaPrinter {
337342
338343 private printTableIndexExpression ( expression : tstl . TableIndexExpression ) : string {
339344 const table = this . printExpression ( expression . table ) ;
340- if ( tstl . isIdentifier ( expression . index ) ) {
341- return `${ table } .${ this . printIdentifier ( expression . index ) } ` ;
345+ if ( tstl . isStringLiteral ( expression . index ) && tsHelper . isValidLuaIdentifier ( expression . index . value ) ) {
346+ return `${ table } .${ expression . index . value } ` ;
342347 }
343348 return `${ table } [${ this . printExpression ( expression . index ) } ]` ;
344349 }
0 commit comments