diff --git a/src/LuaLib.ts b/src/LuaLib.ts index 52ecf550b..2c09e3c8e 100644 --- a/src/LuaLib.ts +++ b/src/LuaLib.ts @@ -31,9 +31,7 @@ export enum LuaLibFeature { Decorate = "Decorate", Descriptors = "Descriptors", Error = "Error", - FunctionApply = "FunctionApply", FunctionBind = "FunctionBind", - FunctionCall = "FunctionCall", Generator = "Generator", InstanceOf = "InstanceOf", InstanceOfObject = "InstanceOfObject", @@ -75,10 +73,8 @@ export enum LuaLibFeature { const luaLibDependencies: Partial> = { ArrayFlat: [LuaLibFeature.ArrayConcat], ArrayFlatMap: [LuaLibFeature.ArrayConcat], - Error: [LuaLibFeature.New, LuaLibFeature.Class, LuaLibFeature.FunctionCall], - FunctionApply: [LuaLibFeature.Unpack], + Error: [LuaLibFeature.New, LuaLibFeature.Class], FunctionBind: [LuaLibFeature.Unpack], - FunctionCall: [LuaLibFeature.Unpack], Generator: [LuaLibFeature.Symbol], InstanceOf: [LuaLibFeature.Symbol], Iterator: [LuaLibFeature.Symbol], diff --git a/src/lualib/FunctionApply.ts b/src/lualib/FunctionApply.ts deleted file mode 100644 index 2638a43a8..000000000 --- a/src/lualib/FunctionApply.ts +++ /dev/null @@ -1,7 +0,0 @@ -function __TS__FunctionApply(this: void, fn: (this: void, ...args: any[]) => any, thisArg: any, args?: any[]): any { - if (args) { - return fn(thisArg, ...args); - } else { - return fn(thisArg); - } -} diff --git a/src/lualib/FunctionCall.ts b/src/lualib/FunctionCall.ts deleted file mode 100644 index 8435e7239..000000000 --- a/src/lualib/FunctionCall.ts +++ /dev/null @@ -1,3 +0,0 @@ -function __TS__FunctionCall(this: void, fn: (this: void, ...args: any[]) => any, thisArg: any, ...args: any[]): any { - return fn(thisArg, ...args); -} diff --git a/src/transformation/builtins/function.ts b/src/transformation/builtins/function.ts index 3ba8c2aaa..0d84e48a8 100644 --- a/src/transformation/builtins/function.ts +++ b/src/transformation/builtins/function.ts @@ -2,6 +2,7 @@ import * as lua from "../../LuaAST"; import { TransformationContext } from "../context"; import { unsupportedProperty, unsupportedSelfFunctionConversion } from "../utils/diagnostics"; import { ContextType, getFunctionContextType } from "../utils/function-context"; +import { createUnpackCall } from "../utils/lua-ast"; import { LuaLibFeature, transformLuaLibFunction } from "../utils/lualib"; import { PropertyCallExpression, transformArguments } from "../visitors/call"; @@ -21,11 +22,15 @@ export function transformFunctionPrototypeCall( const expressionName = expression.name.text; switch (expressionName) { case "apply": - return transformLuaLibFunction(context, LuaLibFeature.FunctionApply, node, caller, ...params); + return lua.createCallExpression( + caller, + [params[0], createUnpackCall(context, params[1], node.arguments[1])], + node + ); case "bind": return transformLuaLibFunction(context, LuaLibFeature.FunctionBind, node, caller, ...params); case "call": - return transformLuaLibFunction(context, LuaLibFeature.FunctionCall, node, caller, ...params); + return lua.createCallExpression(caller, params, node); default: context.diagnostics.push(unsupportedProperty(expression.name, "function", expressionName)); } diff --git a/test/unit/annotations/__snapshots__/forRange.spec.ts.snap b/test/unit/annotations/__snapshots__/forRange.spec.ts.snap index 325c32be7..e752d0782 100644 --- a/test/unit/annotations/__snapshots__/forRange.spec.ts.snap +++ b/test/unit/annotations/__snapshots__/forRange.spec.ts.snap @@ -70,10 +70,7 @@ exports[`invalid usage reference ("let array = [0, luaRange, 1];"): code 1`] = ` exports[`invalid usage reference ("let array = [0, luaRange, 1];"): diagnostics 1`] = `"main.ts(6,29): error TSTL: Invalid @forRange call: can be used only as an iterable in a for...of loop."`; -exports[`invalid usage reference ("luaRange.call(null, 0, 0, 0);"): code 1`] = ` -"require(\\"lualib_bundle\\"); -__TS__FunctionCall(luaRange, nil, 0, 0, 0)" -`; +exports[`invalid usage reference ("luaRange.call(null, 0, 0, 0);"): code 1`] = `"luaRange(nil, 0, 0, 0)"`; exports[`invalid usage reference ("luaRange.call(null, 0, 0, 0);"): diagnostics 1`] = `"main.ts(6,13): error TSTL: Invalid @forRange call: can be used only as an iterable in a for...of loop."`; diff --git a/test/unit/builtins/array.spec.ts b/test/unit/builtins/array.spec.ts index 075de32e9..44fe1fa0e 100644 --- a/test/unit/builtins/array.spec.ts +++ b/test/unit/builtins/array.spec.ts @@ -430,11 +430,12 @@ test.each([ }); test('array.join (1, "2", {})', () => { - util.testExpression`[1, "2", {}].join()`.expectToEqual("1,2,table: 0x168"); + const result = util.testExpression`[1, "2", {}].join()`.getLuaExecutionResult(); + expect(result).toMatch(/^1,2,table: 0x\d+$/); }); test('array.join (1, "2", Symbol("foo"))', () => { - util.testExpression`[1, "2", Symbol("foo")].join()`.expectToEqual("1,2,Symbol(foo)"); + util.testExpression`[1, "2", Symbol("foo")].join(", ")`.expectToEqual("1, 2, Symbol(foo)"); }); test("array.join without separator argument", () => {