@@ -34,6 +34,10 @@ export class LuaPrinter {
3434
3535 private currentIndent : string ;
3636
37+ public print ( block : tstl . Block ) : string {
38+ return this . printBlock ( block ) ;
39+ }
40+
3741 private pushIndent ( ) : void {
3842 this . currentIndent = this . currentIndent + " " ;
3943 }
@@ -80,6 +84,7 @@ export class LuaPrinter {
8084 return this . printExpressionStatement ( statement as tstl . ExpressionStatement ) ;
8185 }
8286 }
87+
8388 private printDoStatement ( statement : tstl . DoStatement ) : string {
8489 let result = this . indent ( "do\n" ) ;
8590 this . pushIndent ( ) ;
@@ -89,14 +94,17 @@ export class LuaPrinter {
8994
9095 return result ;
9196 }
97+
9298 private printVariableDeclarationStatement ( statement : tstl . VariableDeclarationStatement ) : string {
9399 return this . indent ( `"local" ${ statement . left . map ( e => this . printExpression ( e ) ) . join ( ", " ) } =` +
94100 `${ statement . right . map ( e => this . printExpression ( e ) ) . join ( ", " ) } ;\n` ) ;
95101 }
102+
96103 private printVariableAssignmentStatement ( statement : tstl . VariableAssignmentStatement ) : string {
97104 return this . indent ( `${ statement . left . map ( e => this . printExpression ( e ) ) . join ( ", " ) } =` +
98105 `${ statement . right . map ( e => this . printExpression ( e ) ) . join ( ", " ) } ;\n` ) ;
99106 }
107+
100108 private printIfStatement ( statement : tstl . IfStatement ) : string {
101109 let result = this . indent ( `if ${ this . printExpression ( statement . condtion ) } then\n` ) ;
102110 this . pushIndent ( ) ;
@@ -116,6 +124,7 @@ export class LuaPrinter {
116124
117125 return result ;
118126 }
127+
119128 private printWhileStatement ( statement : tstl . WhileStatement ) : string {
120129 let result = this . indent ( `while ${ this . printExpression ( statement . condtion ) } do\n` ) ;
121130 this . pushIndent ( ) ;
@@ -125,6 +134,7 @@ export class LuaPrinter {
125134
126135 return result ;
127136 }
137+
128138 private printRepeatStatement ( statement : tstl . RepeatStatement ) : string {
129139 let result = this . indent ( `repeat\n` ) ;
130140 this . pushIndent ( ) ;
@@ -134,6 +144,7 @@ export class LuaPrinter {
134144
135145 return result ;
136146 }
147+
137148 private printForStatement ( statement : tstl . ForStatement ) : string {
138149 const ctrlVar = this . printExpression ( statement . controlVariable ) ;
139150 const ctrlVarInit = this . printExpression ( statement . controlVariableInitializer ) ;
@@ -153,6 +164,7 @@ export class LuaPrinter {
153164
154165 return result ;
155166 }
167+
156168 private printForInStatement ( statement : tstl . ForInStatement ) : string {
157169 const names = statement . names . map ( i => this . printIdentifier ( i ) ) . join ( ", " ) ;
158170 const expressions = statement . names . map ( e => this . printExpression ( e ) ) . join ( ", " ) ;
@@ -165,24 +177,30 @@ export class LuaPrinter {
165177
166178 return result ;
167179 }
180+
168181 private printGotoStatement ( statement : tstl . GotoStatement ) : string {
169182 return this . indent ( `goto ${ statement . label } ;\n` ) ;
170183 }
184+
171185 private printLabelStatement ( statement : tstl . LabelStatement ) : string {
172186 return this . indent ( `::${ statement . name } ::\n` ) ;
173187 }
188+
174189 private printReturnStatement ( statement : tstl . ReturnStatement ) : string {
175190 if ( ! statement . expressions ) {
176191 return this . indent ( `return;\n` ) ;
177192 }
178193 return this . indent ( `return ${ statement . expressions . map ( e => this . printExpression ( e ) ) . join ( ", " ) } ;\n` ) ;
179194 }
195+
180196 private printBreakStatement ( statement : tstl . BreakStatement ) : string {
181197 return this . indent ( "break;\n" ) ;
182198 }
199+
183200 private printExpressionStatement ( statement : tstl . ExpressionStatement ) : string {
184201 return this . indent ( `${ this . printExpression ( statement . expression ) } ;\n` ) ;
185202 }
203+
186204 // Expressions
187205 private printExpression ( expression : tstl . Expression ) : string {
188206 switch ( expression . kind ) {
@@ -219,25 +237,31 @@ export class LuaPrinter {
219237 return this . printTableIndexExpression ( expression as tstl . TableIndexExpression ) ;
220238 }
221239 }
240+
222241 private printStringLiteral ( expression : tstl . StringLiteral ) : string {
223242 return `"${ expression . value } "` ;
224243 }
244+
225245 private printNumericLiteral ( expression : tstl . NumericLiteral ) : string {
226246 return `${ expression . value } ` ;
227247 }
248+
228249 private printNilLiteral ( expression : tstl . NilLiteral ) : string {
229250 return "nil" ;
230251 }
252+
231253 private printDotsLiteral ( expression : tstl . DotsLiteral ) : string {
232254 return "..." ;
233255 }
256+
234257 private printBooleanLiteral ( expression : tstl . BooleanLiteral ) : string {
235258 if ( expression . kind === tstl . SyntaxKind . TrueKeyword ) {
236259 return "true" ;
237260 } else {
238261 return "false" ;
239262 }
240263 }
264+
241265 private printFunctionExpression ( expression : tstl . FunctionExpression ) : string {
242266 const paramterArr : string [ ] = expression . params . map ( i => this . printIdentifier ( i ) ) ;
243267 if ( expression . dots ) {
@@ -252,6 +276,7 @@ export class LuaPrinter {
252276
253277 return result ;
254278 }
279+
255280 private printTableFieldExpression ( expression : tstl . TableFieldExpression ) : string {
256281 const value = this . printExpression ( expression . value ) ;
257282
@@ -261,41 +286,50 @@ export class LuaPrinter {
261286 return value ;
262287 }
263288 }
289+
264290 private printTableExpression ( expression : tstl . TableExpression ) : string {
265291 return `{${ expression . fields . map ( f => this . printTableFieldExpression ( f ) ) . join ( ", " ) } }` ;
266292 }
293+
267294 private printUnaryExpression ( expression : tstl . UnaryExpression ) : string {
268295 return `${ this . printOperator ( expression . operator ) } ${ this . printExpression ( expression . operand ) } ` ;
269296 }
297+
270298 private printBinaryExpression ( expression : tstl . BinaryExpression ) : string {
271299 const left = this . printExpression ( expression . left ) ;
272300 const operator = this . printOperator ( expression . operator ) ;
273301 const right = this . printExpression ( expression . right ) ;
274302 return `${ left } ${ operator } ${ right } ` ;
275303 }
304+
276305 private printParenthesizedExpression ( expression : tstl . ParenthesizedExpression ) : string {
277306 return `(${ this . printExpression ( expression . innerEpxression ) } )` ;
278307 }
308+
279309 private printCallExpression ( expression : tstl . CallExpression ) : string {
280310 const params = expression . params . map ( e => this . printExpression ( e ) ) . join ( ", " ) ;
281311 return `${ this . printExpression ( expression . expression ) } (${ params } ))` ;
282312 }
313+
283314 private printMethodCallExpression ( expression : tstl . MethodCallExpression ) : string {
284315 const params = expression . params . map ( e => this . printExpression ( e ) ) . join ( ", " ) ;
285316 const prefix = this . printExpression ( expression . prefixExpression ) ;
286317 const name = this . printIdentifier ( expression . name ) ;
287318 return `${ prefix } :${ name } (${ params } ))` ;
288319 }
320+
289321 private printIdentifier ( expression : tstl . Identifier ) : string {
290322 return expression . text ;
291323 }
324+
292325 private printTableIndexExpression ( expression : tstl . TableIndexExpression ) : string {
293326 const table = this . printExpression ( expression . table ) ;
294327 if ( tstl . isIdentifier ( expression . index ) ) {
295328 return `${ table } .${ this . printIdentifier ( expression . index ) } ` ;
296329 }
297330 return `${ table } [${ this . printExpression ( expression . index ) } ]` ;
298331 }
332+
299333 private printOperator ( kind : tstl . Operator ) : string {
300334 return LuaPrinter . operatorMap [ kind ] ;
301335 }
0 commit comments