Skip to content

Commit dee4e40

Browse files
ark120202Perryvw
authored andcommitted
Fix contextual function call transform cubic complexity (TypeScriptToLua#673)
1 parent b071a92 commit dee4e40

1 file changed

Lines changed: 7 additions & 6 deletions

File tree

src/LuaTransformer.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3971,10 +3971,6 @@ export class LuaTransformer {
39713971
);
39723972
} else {
39733973
const parameters = this.transformArguments(node.arguments, signature);
3974-
let table = this.transformExpression(node.expression.expression);
3975-
if (tstl.isTableExpression(table)) {
3976-
table = tstl.createParenthesizedExpression(table);
3977-
}
39783974
const signatureDeclaration = signature && signature.getDeclaration();
39793975
if (
39803976
!signatureDeclaration ||
@@ -3983,6 +3979,11 @@ export class LuaTransformer {
39833979
// table:name()
39843980
return this.transformContextualCallExpression(node, parameters);
39853981
} else {
3982+
let table = this.transformExpression(node.expression.expression);
3983+
if (tstl.isTableExpression(table)) {
3984+
table = tstl.createParenthesizedExpression(table);
3985+
}
3986+
39863987
// table.name()
39873988
const callPath = tstl.createTableIndexExpression(
39883989
table,
@@ -4024,7 +4025,6 @@ export class LuaTransformer {
40244025
transformedArguments: tstl.Expression[]
40254026
): ExpressionVisitResult {
40264027
const left = ts.isCallExpression(node) ? node.expression : node.tag;
4027-
const leftHandSideExpression = this.transformExpression(left);
40284028
if (
40294029
ts.isPropertyAccessExpression(left) &&
40304030
!luaKeywords.has(left.name.text) &&
@@ -4064,7 +4064,8 @@ export class LuaTransformer {
40644064
} else if (ts.isIdentifier(left)) {
40654065
const context = this.isStrict ? tstl.createNilLiteral() : tstl.createIdentifier("_G");
40664066
transformedArguments.unshift(context);
4067-
return tstl.createCallExpression(leftHandSideExpression, transformedArguments, node);
4067+
const expression = this.transformExpression(left);
4068+
return tstl.createCallExpression(expression, transformedArguments, node);
40684069
} else {
40694070
throw TSTLErrors.UnsupportedKind("Left Hand Side Call Expression", left.kind, left);
40704071
}

0 commit comments

Comments
 (0)