From 545bffb5895c3e021cbdc0a603f4a76fca111b50 Mon Sep 17 00:00:00 2001 From: ark120202 Date: Sat, 2 Mar 2019 20:19:21 +0500 Subject: [PATCH 1/2] Fix call expression transform with undefined signature --- src/LuaTransformer.ts | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/LuaTransformer.ts b/src/LuaTransformer.ts index e83f98f7b..d73fe0ce6 100644 --- a/src/LuaTransformer.ts +++ b/src/LuaTransformer.ts @@ -3100,10 +3100,10 @@ export class LuaTransformer { } const callPath = this.transformExpression(node.expression); - const signatureDeclaration = signature.getDeclaration(); - if (signatureDeclaration + if (signature + && signature.getDeclaration() && !ts.isPropertyAccessExpression(node.expression) - && tsHelper.getDeclarationContextType(signatureDeclaration, this.checker) === ContextType.NonVoid + && tsHelper.getDeclarationContextType(signature.getDeclaration(), this.checker) === ContextType.NonVoid && !ts.isElementAccessExpression(node.expression)) { const context = this.isStrict ? ts.createNull() : ts.createIdentifier("_G"); @@ -3201,10 +3201,10 @@ export class LuaTransformer { } else { const parameters = this.transformArguments(node.arguments, signature); const table = this.transformExpression(node.expression.expression); - const signatureDeclaration = signature.getDeclaration(); - if (!signatureDeclaration - || tsHelper.getDeclarationContextType(signatureDeclaration, this.checker) !== ContextType.Void) - { + if (!signature + || !signature.getDeclaration() + || tsHelper.getDeclarationContextType(signature.getDeclaration(), this.checker) !== ContextType.Void + ) { // table:name() return tstl.createMethodCallExpression( table, @@ -3229,9 +3229,9 @@ export class LuaTransformer { const signature = this.checker.getResolvedSignature(node); let parameters = this.transformArguments(node.arguments, signature); - const signatureDeclaration = signature.getDeclaration(); - if (!signatureDeclaration - || tsHelper.getDeclarationContextType(signatureDeclaration, this.checker) !== ContextType.Void) { + if (!signature + || !signature.getDeclaration() + || tsHelper.getDeclarationContextType(signature.getDeclaration(), this.checker) !== ContextType.Void) { // Pass left-side as context const context = this.transformExpression(node.expression.expression); From 57bcef0276a678eadae812be93e95c6b204924aa Mon Sep 17 00:00:00 2001 From: ark120202 Date: Sat, 2 Mar 2019 20:46:09 +0500 Subject: [PATCH 2/2] Use variable for signatureDeclaration --- src/LuaTransformer.ts | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/LuaTransformer.ts b/src/LuaTransformer.ts index d73fe0ce6..f0c946812 100644 --- a/src/LuaTransformer.ts +++ b/src/LuaTransformer.ts @@ -3100,10 +3100,10 @@ export class LuaTransformer { } const callPath = this.transformExpression(node.expression); - if (signature - && signature.getDeclaration() + const signatureDeclaration = signature && signature.getDeclaration(); + if (signatureDeclaration && !ts.isPropertyAccessExpression(node.expression) - && tsHelper.getDeclarationContextType(signature.getDeclaration(), this.checker) === ContextType.NonVoid + && tsHelper.getDeclarationContextType(signatureDeclaration, this.checker) === ContextType.NonVoid && !ts.isElementAccessExpression(node.expression)) { const context = this.isStrict ? ts.createNull() : ts.createIdentifier("_G"); @@ -3201,10 +3201,10 @@ export class LuaTransformer { } else { const parameters = this.transformArguments(node.arguments, signature); const table = this.transformExpression(node.expression.expression); - if (!signature - || !signature.getDeclaration() - || tsHelper.getDeclarationContextType(signature.getDeclaration(), this.checker) !== ContextType.Void - ) { + const signatureDeclaration = signature && signature.getDeclaration(); + if (!signatureDeclaration + || tsHelper.getDeclarationContextType(signatureDeclaration, this.checker) !== ContextType.Void) + { // table:name() return tstl.createMethodCallExpression( table, @@ -3229,9 +3229,9 @@ export class LuaTransformer { const signature = this.checker.getResolvedSignature(node); let parameters = this.transformArguments(node.arguments, signature); - if (!signature - || !signature.getDeclaration() - || tsHelper.getDeclarationContextType(signature.getDeclaration(), this.checker) !== ContextType.Void) { + const signatureDeclaration = signature && signature.getDeclaration(); + if (!signatureDeclaration + || tsHelper.getDeclarationContextType(signatureDeclaration, this.checker) !== ContextType.Void) { // Pass left-side as context const context = this.transformExpression(node.expression.expression);