@@ -4,6 +4,7 @@ import { TransformationContext } from "../context";
44import { unsupportedProperty } from "../utils/diagnostics" ;
55import { LuaLibFeature , transformLuaLibFunction } from "../utils/lualib" ;
66import { PropertyCallExpression , transformArguments } from "../visitors/call" ;
7+ import { isStringType , isNumberType } from "../utils/typescript" ;
78
89export function transformArrayPrototypeCall (
910 context : TransformationContext ,
@@ -61,19 +62,25 @@ export function transformArrayPrototypeCall(
6162 case "splice" :
6263 return transformLuaLibFunction ( context , LuaLibFeature . ArraySplice , node , caller , ...params ) ;
6364 case "join" :
64- const defaultSeparatorLiteral = lua . createStringLiteral ( "," ) ;
65- const parameters = [
66- caller ,
67- node . arguments . length === 0
68- ? defaultSeparatorLiteral
69- : lua . createBinaryExpression ( params [ 0 ] , defaultSeparatorLiteral , lua . SyntaxKind . OrOperator ) ,
70- ] ;
65+ const callerType = context . checker . getTypeAtLocation ( expression . expression ) ;
66+ const elementType = context . checker . getElementTypeOfArrayType ( callerType ) ;
67+ if ( elementType && ( isStringType ( context , elementType ) || isNumberType ( context , elementType ) ) ) {
68+ const defaultSeparatorLiteral = lua . createStringLiteral ( "," ) ;
69+ const parameters = [
70+ caller ,
71+ node . arguments . length === 0
72+ ? defaultSeparatorLiteral
73+ : lua . createBinaryExpression ( params [ 0 ] , defaultSeparatorLiteral , lua . SyntaxKind . OrOperator ) ,
74+ ] ;
7175
72- return lua . createCallExpression (
73- lua . createTableIndexExpression ( lua . createIdentifier ( "table" ) , lua . createStringLiteral ( "concat" ) ) ,
74- parameters ,
75- node
76- ) ;
76+ return lua . createCallExpression (
77+ lua . createTableIndexExpression ( lua . createIdentifier ( "table" ) , lua . createStringLiteral ( "concat" ) ) ,
78+ parameters ,
79+ node
80+ ) ;
81+ }
82+
83+ return transformLuaLibFunction ( context , LuaLibFeature . ArrayJoin , node , caller , ...params ) ;
7784 case "flat" :
7885 return transformLuaLibFunction ( context , LuaLibFeature . ArrayFlat , node , caller , ...params ) ;
7986 case "flatMap" :
0 commit comments