diff --git a/src/LuaTransformer.ts b/src/LuaTransformer.ts index 43111e5d1..4c51a1649 100644 --- a/src/LuaTransformer.ts +++ b/src/LuaTransformer.ts @@ -5132,8 +5132,11 @@ export class LuaTransformer { case "splice": return this.transformLuaLibFunction(LuaLibFeature.ArraySplice, node, caller, ...params); case "join": + const commaLiteral = tstl.createStringLiteral(","); const parameters = - node.arguments.length === 0 ? [caller, tstl.createStringLiteral(",")] : [caller].concat(params); + node.arguments.length === 0 + ? [caller, commaLiteral] + : [caller, tstl.createBinaryExpression(params[0], commaLiteral, tstl.SyntaxKind.OrOperator)]; return tstl.createCallExpression( tstl.createTableIndexExpression(tstl.createIdentifier("table"), tstl.createStringLiteral("concat")), diff --git a/test/unit/builtins/array.spec.ts b/test/unit/builtins/array.spec.ts index edac44090..e1791e214 100644 --- a/test/unit/builtins/array.spec.ts +++ b/test/unit/builtins/array.spec.ts @@ -337,7 +337,9 @@ test.each([ ])("array.splice (%p)", ({ array, start, deleteCount, newElements = [] }) => { util.testFunction` const array = ${util.valueToString(array)}; - array.splice(${util.valuesToString([start, deleteCount, ...newElements])}); + array.splice(${util.valuesToString( + deleteCount ? [start, deleteCount, ...newElements] : [start, ...newElements] + )}); return array; `.expectToMatchJsResult(); }); diff --git a/test/util.ts b/test/util.ts index 8abc0dbc6..cae7809d7 100644 --- a/test/util.ts +++ b/test/util.ts @@ -49,10 +49,17 @@ export function expectToBeDefined(subject: T | null | undefined): subject is return true; // If this was false the expect would have thrown an error } -export const valueToString = (value: unknown) => - (typeof value === "number" && (!Number.isFinite(value) || Number.isNaN(value))) || typeof value === "function" - ? String(value) - : JSON.stringify(value); +export function valueToString(value: unknown): string { + if ( + (typeof value === "number" && (!Number.isFinite(value) || Number.isNaN(value))) || + typeof value === "function" || + value === undefined + ) { + return String(value); + } else { + return JSON.stringify(value); + } +} export const valuesToString = (values: unknown[]) => values.map(valueToString).join(", ");