@@ -3148,6 +3148,10 @@ export class LuaTransformer {
31483148 return this . transformObjectCallExpression ( node ) ;
31493149 }
31503150
3151+ if ( ownerType . symbol && ownerType . symbol . escapedName === "Console" ) {
3152+ return this . transformConsoleCallExpression ( node ) ;
3153+ }
3154+
31513155 if ( ownerType . symbol && ownerType . symbol . escapedName === "SymbolConstructor" ) {
31523156 return this . transformSymbolCallExpression ( node ) ;
31533157 }
@@ -3676,6 +3680,97 @@ export class LuaTransformer {
36763680 }
36773681 }
36783682
3683+ public transformConsoleCallExpression ( expression : ts . CallExpression ) : ExpressionVisitResult {
3684+ const method = expression . expression as ts . PropertyAccessExpression ;
3685+ const methodName = method . name . escapedText ;
3686+
3687+ switch ( methodName ) {
3688+ case "log" :
3689+ if ( expression . arguments . length > 0
3690+ && this . isStringFormatTemplate ( expression . arguments [ 0 ] ) ) {
3691+ // print(string.format([arguments]))
3692+ const stringFormatCall = tstl . createCallExpression (
3693+ tstl . createTableIndexExpression (
3694+ tstl . createIdentifier ( "string" ) ,
3695+ tstl . createStringLiteral ( "format" ) ) ,
3696+ this . transformArguments ( expression . arguments )
3697+ ) ;
3698+ return tstl . createCallExpression (
3699+ tstl . createIdentifier ( "print" ) ,
3700+ [ stringFormatCall ]
3701+ ) ;
3702+ }
3703+ // print([arguments])
3704+ return tstl . createCallExpression (
3705+ tstl . createIdentifier ( "print" ) ,
3706+ this . transformArguments ( expression . arguments )
3707+ ) ;
3708+ case "assert" :
3709+ const args = this . transformArguments ( expression . arguments ) ;
3710+ if ( expression . arguments . length > 1
3711+ && this . isStringFormatTemplate ( expression . arguments [ 1 ] ) ) {
3712+ // assert([condition], string.format([arguments]))
3713+ const stringFormatCall = tstl . createCallExpression (
3714+ tstl . createTableIndexExpression (
3715+ tstl . createIdentifier ( "string" ) ,
3716+ tstl . createStringLiteral ( "format" ) ) ,
3717+ args . slice ( 1 )
3718+ ) ;
3719+ return tstl . createCallExpression (
3720+ tstl . createIdentifier ( "assert" ) ,
3721+ [ args [ 0 ] , stringFormatCall ]
3722+ ) ;
3723+ }
3724+ // assert()
3725+ return tstl . createCallExpression (
3726+ tstl . createIdentifier ( "assert" ) ,
3727+ args
3728+ ) ;
3729+ case "trace" :
3730+ if ( expression . arguments . length > 0
3731+ && this . isStringFormatTemplate ( expression . arguments [ 0 ] ) ) {
3732+ // print(debug.traceback(string.format([arguments])))
3733+ const stringFormatCall = tstl . createCallExpression (
3734+ tstl . createTableIndexExpression (
3735+ tstl . createIdentifier ( "string" ) ,
3736+ tstl . createStringLiteral ( "format" ) ) ,
3737+ this . transformArguments ( expression . arguments )
3738+ ) ;
3739+ const debugTracebackCall = tstl . createCallExpression (
3740+ tstl . createTableIndexExpression (
3741+ tstl . createIdentifier ( "debug" ) ,
3742+ tstl . createStringLiteral ( "traceback" ) ) ,
3743+ [ stringFormatCall ]
3744+ ) ;
3745+ return tstl . createCallExpression (
3746+ tstl . createIdentifier ( "print" ) ,
3747+ [ debugTracebackCall ]
3748+ ) ;
3749+ }
3750+ // print(debug.traceback([arguments])))
3751+ const debugTracebackCall = tstl . createCallExpression (
3752+ tstl . createTableIndexExpression (
3753+ tstl . createIdentifier ( "debug" ) ,
3754+ tstl . createStringLiteral ( "traceback" ) ) ,
3755+ this . transformArguments ( expression . arguments )
3756+ ) ;
3757+ return tstl . createCallExpression (
3758+ tstl . createIdentifier ( "print" ) ,
3759+ [ debugTracebackCall ]
3760+ ) ;
3761+ default :
3762+ throw TSTLErrors . UnsupportedForTarget (
3763+ `console property ${ methodName } ` ,
3764+ this . options . luaTarget ,
3765+ expression
3766+ ) ;
3767+ }
3768+ }
3769+
3770+ private isStringFormatTemplate ( expression : ts . Expression ) : boolean {
3771+ return ts . isStringLiteral ( expression ) && expression . text . match ( / \% / g) !== null ;
3772+ }
3773+
36793774 // Transpile a Symbol._ property
36803775 public transformSymbolCallExpression ( expression : ts . CallExpression ) : tstl . CallExpression {
36813776 const method = expression . expression as ts . PropertyAccessExpression ;
0 commit comments