From 4709254ffd74b43ca45e2f18f88e549a271f4e7f Mon Sep 17 00:00:00 2001 From: "andreiteodor.radu@gameloft.com" Date: Thu, 23 Aug 2018 13:08:38 +0300 Subject: [PATCH 1/4] -added fail case --- test/unit/class.spec.ts | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/test/unit/class.spec.ts b/test/unit/class.spec.ts index 23baa991c..bb3b9221f 100644 --- a/test/unit/class.spec.ts +++ b/test/unit/class.spec.ts @@ -182,6 +182,33 @@ export class ClassTests { Expect(result).toBe(4); } + @Test("CastClassMethodCall") + public extraParanthesisAssignment() { + // Transpile + const lua = util.transpileString( + `interface result + { + val : number; + } + class a { + public method(out: result) { + out.val += 2; + } + } + let inst:any = new a(); + let result = {val : 0}; + (inst as a).method(result); + (inst as a).method(result); + return result.val;` + ); + + // Execute + const result = util.executeLua(lua); + + // Assert + Expect(result).toBe(4); + } + @Test("ClassInheritedMethodCall") public classInheritedMethodCall() { // Transpile From 0db3e157b4af0b322c526c03abebe542f3b7cd42 Mon Sep 17 00:00:00 2001 From: "andreiteodor.radu@gameloft.com" Date: Thu, 23 Aug 2018 13:09:32 +0300 Subject: [PATCH 2/4] -added ; at the end of statements to avoid ambyguous lua syntax --- src/Transpiler.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Transpiler.ts b/src/Transpiler.ts index 5108276de..32dc0deae 100644 --- a/src/Transpiler.ts +++ b/src/Transpiler.ts @@ -264,7 +264,7 @@ export abstract class LuaTranspiler { case ts.SyntaxKind.VariableStatement: return this.indent + this.transpileVariableStatement(node as ts.VariableStatement) + "\n"; case ts.SyntaxKind.ExpressionStatement: - return this.indent + this.transpileExpression((node as ts.ExpressionStatement).expression) + "\n"; + return this.indent + this.transpileExpression((node as ts.ExpressionStatement).expression) + ";\n"; case ts.SyntaxKind.ReturnStatement: return this.indent + this.transpileReturn(node as ts.ReturnStatement) + "\n"; case ts.SyntaxKind.IfStatement: @@ -1421,9 +1421,9 @@ export abstract class LuaTranspiler { const identifierName = this.transpileIdentifier(node.name); if (node.initializer) { const value = this.transpileExpression(node.initializer); - return `local ${identifierName} = ${value}\n`; + return `local ${identifierName} = ${value};\n`; } else { - return `local ${identifierName} = nil\n`; + return `local ${identifierName} = nil;\n`; } } else if (ts.isArrayBindingPattern(node.name)) { // Destructuring type @@ -1437,9 +1437,9 @@ export abstract class LuaTranspiler { // Don't unpack TupleReturn decorated functions if (tsHelper.isTupleReturnCall(node.initializer, this.checker)) { - return `local ${vars}=${this.transpileExpression(node.initializer)}\n`; + return `local ${vars}=${this.transpileExpression(node.initializer)};\n`; } else { - return `local ${vars}=${this.transpileDestructingAssignmentValue(node.initializer)}\n`; + return `local ${vars}=${this.transpileDestructingAssignmentValue(node.initializer)};\n`; } } else { throw new TranspileError( From a8c5c993701e7d67ac4c146e536db278e2b6eb2b Mon Sep 17 00:00:00 2001 From: "andreiteodor.radu@gameloft.com" Date: Thu, 23 Aug 2018 13:10:15 +0300 Subject: [PATCH 3/4] -updated tests --- test/translation/lua/callNamespace.lua | 2 +- .../lua/characterEscapeSequence.lua | 18 +-- test/translation/lua/continue.lua | 2 +- test/translation/lua/continueConcurrent.lua | 2 +- test/translation/lua/continueNested.lua | 4 +- .../lua/continueNestedConcurrent.lua | 4 +- test/translation/lua/do.lua | 4 +- .../translation/lua/dotColonFunctionCalls.lua | 12 +- test/translation/lua/enumMembersOnly.lua | 2 +- test/translation/lua/for.lua | 2 +- test/translation/lua/getSetAccessors.lua | 10 +- test/translation/lua/interfaceIndex.lua | 4 +- .../lua/modulesChangedVariableExport.lua | 4 +- .../translation/lua/modulesVariableExport.lua | 2 +- .../lua/modulesVariableNoExport.lua | 2 +- test/translation/lua/tryCatch.lua | 4 +- test/translation/lua/tryCatchFinally.lua | 6 +- test/translation/lua/tryFinally.lua | 4 +- test/translation/lua/typeAssert.lua | 4 +- test/translation/lua/while.lua | 4 +- test/unit/assignmentDestructuring.spec.ts | 4 +- test/unit/assignments.spec.ts | 16 +-- test/unit/curry.spec.ts | 2 +- test/unit/expressions.spec.ts | 104 +++++++++--------- test/unit/math.spec.ts | 8 +- test/unit/objectLiteral.spec.ts | 10 +- 26 files changed, 120 insertions(+), 120 deletions(-) diff --git a/test/translation/lua/callNamespace.lua b/test/translation/lua/callNamespace.lua index 01c06904d..6d3add272 100644 --- a/test/translation/lua/callNamespace.lua +++ b/test/translation/lua/callNamespace.lua @@ -1 +1 @@ -Namespace.myFunction() \ No newline at end of file +Namespace.myFunction(); \ No newline at end of file diff --git a/test/translation/lua/characterEscapeSequence.lua b/test/translation/lua/characterEscapeSequence.lua index ddb2fa547..a07dddd80 100644 --- a/test/translation/lua/characterEscapeSequence.lua +++ b/test/translation/lua/characterEscapeSequence.lua @@ -1,18 +1,18 @@ -local quoteInDoubleQuotes = "\' \' \'" +local quoteInDoubleQuotes = "\' \' \'"; -local quoteInTemplateString = "\' \' \'" +local quoteInTemplateString = "\' \' \'"; -local doubleQuoteInQuotes = "\" \" \"" +local doubleQuoteInQuotes = "\" \" \""; -local doubleQuoteInDoubleQuotes = "\" \" \"" +local doubleQuoteInDoubleQuotes = "\" \" \""; -local doubleQuoteInTemplateString = "\" \" \"" +local doubleQuoteInTemplateString = "\" \" \""; -local escapedCharsInQuotes = "\\ \0 \b \t \n \v \f \" \' \`" +local escapedCharsInQuotes = "\\ \0 \b \t \n \v \f \" \' \`"; -local escapedCharsInDoubleQUotes = "\\ \0 \b \t \n \v \f \" \' \`" +local escapedCharsInDoubleQUotes = "\\ \0 \b \t \n \v \f \" \' \`"; -local escapedCharsInTemplateString = "\\ \0 \b \t \n \v \f \" \' \`" +local escapedCharsInTemplateString = "\\ \0 \b \t \n \v \f \" \' \`"; -local nonEmptyTemplateString = "Level 0: \n\t "..tostring("Level 1: \n\t\t "..tostring("Level 3: \n\t\t\t "..tostring("Last level \n --").." \n --").." \n --").." \n --" +local nonEmptyTemplateString = "Level 0: \n\t "..tostring("Level 1: \n\t\t "..tostring("Level 3: \n\t\t\t "..tostring("Last level \n --").." \n --").." \n --").." \n --"; diff --git a/test/translation/lua/continue.lua b/test/translation/lua/continue.lua index afb99a436..a2f89fa20 100644 --- a/test/translation/lua/continue.lua +++ b/test/translation/lua/continue.lua @@ -1,4 +1,4 @@ -local i = 0 +local i = 0; while(i<10) do do if i<5 then diff --git a/test/translation/lua/continueConcurrent.lua b/test/translation/lua/continueConcurrent.lua index 89196ef3b..ded1b89fb 100644 --- a/test/translation/lua/continueConcurrent.lua +++ b/test/translation/lua/continueConcurrent.lua @@ -1,4 +1,4 @@ -local i = 0 +local i = 0; while(i<10) do do if i<5 then diff --git a/test/translation/lua/continueNested.lua b/test/translation/lua/continueNested.lua index 0b4924745..bb5cde760 100644 --- a/test/translation/lua/continueNested.lua +++ b/test/translation/lua/continueNested.lua @@ -1,10 +1,10 @@ -local i = 0 +local i = 0; while(i<5) do do if (i%2)==0 then goto __continue0 end - local j = 0 + local j = 0; while(j<2) do do if j==1 then diff --git a/test/translation/lua/continueNestedConcurrent.lua b/test/translation/lua/continueNestedConcurrent.lua index 4f162668b..c2f960118 100644 --- a/test/translation/lua/continueNestedConcurrent.lua +++ b/test/translation/lua/continueNestedConcurrent.lua @@ -1,10 +1,10 @@ -local i = 0 +local i = 0; while(i<5) do do if (i%2)==0 then goto __continue0 end - local j = 0 + local j = 0; while(j<2) do do if j==1 then diff --git a/test/translation/lua/do.lua b/test/translation/lua/do.lua index 2f867a7e6..ac07a7aaa 100644 --- a/test/translation/lua/do.lua +++ b/test/translation/lua/do.lua @@ -1,8 +1,8 @@ -local e = 10 +local e = 10; repeat do - e = (e-1) + e = (e-1); end ::__continue0:: until not (e>0) diff --git a/test/translation/lua/dotColonFunctionCalls.lua b/test/translation/lua/dotColonFunctionCalls.lua index a70d2d0f2..8ffa06577 100644 --- a/test/translation/lua/dotColonFunctionCalls.lua +++ b/test/translation/lua/dotColonFunctionCalls.lua @@ -1,6 +1,6 @@ -classInstance:colonMethod() -classInstance.dotMethod() -interfaceInstance:colonMethod() -interfaceInstance.dotMethod() -TestNameSpace.dotMethod() -TestNameSpace.dotMethod2() +classInstance:colonMethod(); +classInstance.dotMethod(); +interfaceInstance:colonMethod(); +interfaceInstance.dotMethod(); +TestNameSpace.dotMethod(); +TestNameSpace.dotMethod2(); diff --git a/test/translation/lua/enumMembersOnly.lua b/test/translation/lua/enumMembersOnly.lua index e257d15f3..f83e2bfc1 100644 --- a/test/translation/lua/enumMembersOnly.lua +++ b/test/translation/lua/enumMembersOnly.lua @@ -2,4 +2,4 @@ val1=0 val2=2 val3=3 val4="bye" -local a = val1 \ No newline at end of file +local a = val1; \ No newline at end of file diff --git a/test/translation/lua/for.lua b/test/translation/lua/for.lua index 86a2c18ec..521b692ea 100644 --- a/test/translation/lua/for.lua +++ b/test/translation/lua/for.lua @@ -1,4 +1,4 @@ -local i = 1 +local i = 1; while(i<=100) do do end diff --git a/test/translation/lua/getSetAccessors.lua b/test/translation/lua/getSetAccessors.lua index 082998267..ce6debfe1 100644 --- a/test/translation/lua/getSetAccessors.lua +++ b/test/translation/lua/getSetAccessors.lua @@ -11,11 +11,11 @@ function MyClass.get__field(self) return self._field+4 end function MyClass.set__field(self,v) - self._field = (v*2) + self._field = (v*2); end -local instance = MyClass.new(true) +local instance = MyClass.new(true); -instance:set__field(4) -local b = instance:get__field() +instance:set__field(4); +local b = instance:get__field(); -local c = (4+instance:get__field())*3 +local c = (4+instance:get__field())*3; diff --git a/test/translation/lua/interfaceIndex.lua b/test/translation/lua/interfaceIndex.lua index 6ad0e98ae..d1d23be0c 100644 --- a/test/translation/lua/interfaceIndex.lua +++ b/test/translation/lua/interfaceIndex.lua @@ -1,3 +1,3 @@ -local a = {} +local a = {}; -a["abc"] = "def" +a["abc"] = "def"; diff --git a/test/translation/lua/modulesChangedVariableExport.lua b/test/translation/lua/modulesChangedVariableExport.lua index 04cbb6371..065923b04 100644 --- a/test/translation/lua/modulesChangedVariableExport.lua +++ b/test/translation/lua/modulesChangedVariableExport.lua @@ -1,6 +1,6 @@ local exports = exports or {} -local test = nil +local test = nil; -test = 1 +test = 1; exports.test = test return exports \ No newline at end of file diff --git a/test/translation/lua/modulesVariableExport.lua b/test/translation/lua/modulesVariableExport.lua index c453b7d3f..fa48b6fa7 100644 --- a/test/translation/lua/modulesVariableExport.lua +++ b/test/translation/lua/modulesVariableExport.lua @@ -1,5 +1,5 @@ local exports = exports or {} -local test = "test" +local test = "test"; exports.test = test return exports diff --git a/test/translation/lua/modulesVariableNoExport.lua b/test/translation/lua/modulesVariableNoExport.lua index 7aa9c4047..f20c4efeb 100644 --- a/test/translation/lua/modulesVariableNoExport.lua +++ b/test/translation/lua/modulesVariableNoExport.lua @@ -1 +1 @@ -local test = "test" +local test = "test"; diff --git a/test/translation/lua/tryCatch.lua b/test/translation/lua/tryCatch.lua index 39edd63c4..89d6e3170 100644 --- a/test/translation/lua/tryCatch.lua +++ b/test/translation/lua/tryCatch.lua @@ -1,8 +1,8 @@ xpcall(function() - local a = 42 + local a = 42; end, function(er) - local b = "fail" + local b = "fail"; end) diff --git a/test/translation/lua/tryCatchFinally.lua b/test/translation/lua/tryCatchFinally.lua index 8069a1d99..0278c647f 100644 --- a/test/translation/lua/tryCatchFinally.lua +++ b/test/translation/lua/tryCatchFinally.lua @@ -1,9 +1,9 @@ xpcall(function() - local a = 42 + local a = 42; end, function(er) - local b = "fail" + local b = "fail"; end) -local c = "finally" +local c = "finally"; diff --git a/test/translation/lua/tryFinally.lua b/test/translation/lua/tryFinally.lua index 078920e80..81cd9f3e5 100644 --- a/test/translation/lua/tryFinally.lua +++ b/test/translation/lua/tryFinally.lua @@ -1,7 +1,7 @@ xpcall(function() - local a = 42 + local a = 42; end, function(e) end) -local b = "finally" +local b = "finally"; diff --git a/test/translation/lua/typeAssert.lua b/test/translation/lua/typeAssert.lua index 09dc9e405..35501d1e3 100644 --- a/test/translation/lua/typeAssert.lua +++ b/test/translation/lua/typeAssert.lua @@ -1,3 +1,3 @@ -local test1 = 10 +local test1 = 10; -local test2 = 10 +local test2 = 10; diff --git a/test/translation/lua/while.lua b/test/translation/lua/while.lua index 5b258106e..672e6eafa 100644 --- a/test/translation/lua/while.lua +++ b/test/translation/lua/while.lua @@ -1,8 +1,8 @@ -local d = 10 +local d = 10; while d>0 do do - d = (d-1) + d = (d-1); end ::__continue0:: end diff --git a/test/unit/assignmentDestructuring.spec.ts b/test/unit/assignmentDestructuring.spec.ts index f2d373632..650e13024 100644 --- a/test/unit/assignmentDestructuring.spec.ts +++ b/test/unit/assignmentDestructuring.spec.ts @@ -15,7 +15,7 @@ export class AssignmentDestructuringTests { this.assignmentDestruturingTs, {luaTarget: LuaTarget.Lua51, luaLibImport: "none"} ); // Assert - Expect(lua).toBe(`local a,b=unpack(myFunc())`); + Expect(lua).toBe(`local a,b=unpack(myFunc());`); } @Test("Assignment destructuring [5.2]") @@ -25,6 +25,6 @@ export class AssignmentDestructuringTests { this.assignmentDestruturingTs, {luaTarget: LuaTarget.Lua52, luaLibImport: "none"} ); // Assert - Expect(lua).toBe(`local a,b=table.unpack(myFunc())`); + Expect(lua).toBe(`local a,b=table.unpack(myFunc());`); } } diff --git a/test/unit/assignments.spec.ts b/test/unit/assignments.spec.ts index bc8e57c4f..d4fb2d34d 100644 --- a/test/unit/assignments.spec.ts +++ b/test/unit/assignments.spec.ts @@ -15,7 +15,7 @@ export class AssignmentTests { @Test("Const assignment") public constAssignment(inp: string, out: string) { const lua = util.transpileString(`const myvar = ${inp};`); - Expect(lua).toBe(`local myvar = ${out}`); + Expect(lua).toBe(`local myvar = ${out};`); } @TestCase(`"abc"`, `"abc"`) @@ -27,7 +27,7 @@ export class AssignmentTests { @Test("Const assignment") public letAssignment(inp: string, out: string) { const lua = util.transpileString(`let myvar = ${inp};`); - Expect(lua).toBe(`local myvar = ${out}`); + Expect(lua).toBe(`local myvar = ${out};`); } @TestCase(`"abc"`, `"abc"`) @@ -39,7 +39,7 @@ export class AssignmentTests { @Test("Const assignment") public varAssignment(inp: string, out: string) { const lua = util.transpileString(`var myvar = ${inp};`); - Expect(lua).toBe(`local myvar = ${out}`); + Expect(lua).toBe(`local myvar = ${out};`); } @TestCase("var myvar;") @@ -81,7 +81,7 @@ export class AssignmentTests { + `let [a,b] = abc();`; const lua = util.transpileString(code); - Expect(lua).toBe("local a,b=abc()"); + Expect(lua).toBe("local a,b=abc();"); } @Test("TupleReturn Single assignment") @@ -92,7 +92,7 @@ export class AssignmentTests { + `a = abc();`; const lua = util.transpileString(code); - Expect(lua).toBe("local a = ({ abc() })\n\na = ({ abc() })"); + Expect(lua).toBe("local a = ({ abc() });\n\na = ({ abc() });"); } @Test("TupleReturn interface assignment") @@ -104,7 +104,7 @@ export class AssignmentTests { + `let [a,b] = jkl.abc();`; const lua = util.transpileString(code); - Expect(lua).toBe("local a,b=jkl:abc()"); + Expect(lua).toBe("local a,b=jkl:abc();"); } @Test("TupleReturn namespace assignment") @@ -116,7 +116,7 @@ export class AssignmentTests { + `let [a,b] = def.abc();`; const lua = util.transpileString(code); - Expect(lua).toBe("local a,b=def.abc()"); + Expect(lua).toBe("local a,b=def.abc();"); } @Test("TupleReturn method assignment") @@ -128,7 +128,7 @@ export class AssignmentTests { + `let [a,b] = jkl.abc();`; const lua = util.transpileString(code); - Expect(lua).toBe("local jkl = def.new(true)\n\nlocal a,b=jkl:abc()"); + Expect(lua).toBe("local jkl = def.new(true);\n\nlocal a,b=jkl:abc();"); } @Test("TupleReturn functional") diff --git a/test/unit/curry.spec.ts b/test/unit/curry.spec.ts index 99d927ff6..23cd4577f 100644 --- a/test/unit/curry.spec.ts +++ b/test/unit/curry.spec.ts @@ -10,7 +10,7 @@ export class LuaCurryTests { `(x: number) => (y: number) => x + y;` ); // Assert - Expect(lua).toBe(`function(x) return function(y) return x+y end end`); + Expect(lua).toBe(`function(x) return function(y) return x+y end end;`); } @Test("curryingAdd") diff --git a/test/unit/expressions.spec.ts b/test/unit/expressions.spec.ts index 27bf24e16..9a50c8354 100644 --- a/test/unit/expressions.spec.ts +++ b/test/unit/expressions.spec.ts @@ -6,14 +6,14 @@ import * as util from "../src/util"; export class ExpressionTests { - @TestCase("i++", "i = (i+1)") - @TestCase("++i", "i = (i+1)") - @TestCase("i--", "i = (i-1)") - @TestCase("--i", "i = (i-1)") - @TestCase("!a", "(not a)") - @TestCase("-a", "-a") - @TestCase("delete tbl['test']", "tbl[\"test\"]=nil") - @TestCase("delete tbl.test", "tbl.test=nil") + @TestCase("i++", "i = (i+1);") + @TestCase("++i", "i = (i+1);") + @TestCase("i--", "i = (i-1);") + @TestCase("--i", "i = (i-1);") + @TestCase("!a", "(not a);") + @TestCase("-a", "-a;") + @TestCase("delete tbl['test']", "tbl[\"test\"]=nil;") + @TestCase("delete tbl.test", "tbl.test=nil;") @Test("Unary expressions basic") public unaryBasic(input: string, lua: string): void { Expect(util.transpileString(input)).toBe(lua); @@ -111,53 +111,53 @@ export class ExpressionTests { .toThrow(); } - @TestCase("~a", "bit.bnot(a)") - @TestCase("a&b", "bit.band(a,b)") - @TestCase("a&=b", "a = (bit.band(a,b))") - @TestCase("a|b", "bit.bor(a,b)") - @TestCase("a|=b", "a = (bit.bor(a,b))") - @TestCase("a^b", "bit.bxor(a,b)") - @TestCase("a^=b", "a = (bit.bxor(a,b))") - @TestCase("a<>b", "bit.rshift(a,b)") - @TestCase("a>>=b", "a = (bit.rshift(a,b))") - @TestCase("a>>>b", "bit.arshift(a,b)") - @TestCase("a>>>=b", "a = (bit.arshift(a,b))") + @TestCase("~a", "bit.bnot(a);") + @TestCase("a&b", "bit.band(a,b);") + @TestCase("a&=b", "a = (bit.band(a,b));") + @TestCase("a|b", "bit.bor(a,b);") + @TestCase("a|=b", "a = (bit.bor(a,b));") + @TestCase("a^b", "bit.bxor(a,b);") + @TestCase("a^=b", "a = (bit.bxor(a,b));") + @TestCase("a<>b", "bit.rshift(a,b);") + @TestCase("a>>=b", "a = (bit.rshift(a,b));") + @TestCase("a>>>b", "bit.arshift(a,b);") + @TestCase("a>>>=b", "a = (bit.arshift(a,b));") @Test("Bitop [JIT]") public bitOperatorOverrideJIT(input: string, lua: string): void { Expect(util.transpileString(input, { luaTarget: LuaTarget.LuaJIT, luaLibImport: "none" })).toBe(lua); } - @TestCase("~a", "bit32.bnot(a)") - @TestCase("a&b", "bit32.band(a,b)") - @TestCase("a&=b", "a = (bit32.band(a,b))") - @TestCase("a|b", "bit32.bor(a,b)") - @TestCase("a|=b", "a = (bit32.bor(a,b))") - @TestCase("a^b", "bit32.bxor(a,b)") - @TestCase("a^=b", "a = (bit32.bxor(a,b))") - @TestCase("a<>b", "bit32.rshift(a,b)") - @TestCase("a>>=b", "a = (bit32.rshift(a,b))") - @TestCase("a>>>b", "bit32.arshift(a,b)") - @TestCase("a>>>=b", "a = (bit32.arshift(a,b))") + @TestCase("~a", "bit32.bnot(a);") + @TestCase("a&b", "bit32.band(a,b);") + @TestCase("a&=b", "a = (bit32.band(a,b));") + @TestCase("a|b", "bit32.bor(a,b);") + @TestCase("a|=b", "a = (bit32.bor(a,b));") + @TestCase("a^b", "bit32.bxor(a,b);") + @TestCase("a^=b", "a = (bit32.bxor(a,b));") + @TestCase("a<>b", "bit32.rshift(a,b);") + @TestCase("a>>=b", "a = (bit32.rshift(a,b));") + @TestCase("a>>>b", "bit32.arshift(a,b);") + @TestCase("a>>>=b", "a = (bit32.arshift(a,b));") @Test("Bitop [5.2]") public bitOperatorOverride52(input: string, lua: string): void { Expect(util.transpileString(input, { luaTarget: LuaTarget.Lua52, luaLibImport: "none" })).toBe(lua); } - @TestCase("~a", "~a") - @TestCase("a&b", "a & b") - @TestCase("a&=b", "a = (a & b)") - @TestCase("a|b", "a | b") - @TestCase("a|=b", "a = (a | b)") - @TestCase("a^b", "a ~ b") - @TestCase("a^=b", "a = (a ~ b)") - @TestCase("a<>b", "a >> b") - @TestCase("a>>=b", "a = (a >> b)") + @TestCase("~a", "~a;") + @TestCase("a&b", "a & b;") + @TestCase("a&=b", "a = (a & b);") + @TestCase("a|b", "a | b;") + @TestCase("a|=b", "a = (a | b);") + @TestCase("a^b", "a ~ b;") + @TestCase("a^=b", "a = (a ~ b);") + @TestCase("a<>b", "a >> b;") + @TestCase("a>>=b", "a = (a >> b);") @Test("Bitop [5.3]") public bitOperatorOverride53(input: string, lua: string): void { Expect(util.transpileString(input, { luaTarget: LuaTarget.Lua53, luaLibImport: "none" })).toBe(lua); @@ -171,11 +171,11 @@ export class ExpressionTests { .toThrowError(Error, "Bitwise operator >>> not supported in Lua 5.3"); } - @TestCase("1+1", "1+1") - @TestCase("-1+1", "-1+1") - @TestCase("1*30+4", "(1*30)+4") - @TestCase("1*(3+4)", "1*(3+4)") - @TestCase("1*(3+4*2)", "1*(3+(4*2))") + @TestCase("1+1", "1+1;") + @TestCase("-1+1", "-1+1;") + @TestCase("1*30+4", "(1*30)+4;") + @TestCase("1*(3+4)", "1*(3+4);") + @TestCase("1*(3+4*2)", "1*(3+(4*2));") @Test("Binary expressions ordering parentheses") public binaryParentheses(input: string, lua: string): void { Expect(util.transpileString(input)).toBe(lua); @@ -183,12 +183,12 @@ export class ExpressionTests { @Test("Null Expression") public nullExpression(): void { - Expect(util.transpileString("null")).toBe("nil"); + Expect(util.transpileString("null")).toBe("nil;"); } @Test("Undefined Expression") public undefinedExpression(): void { - Expect(util.transpileString("undefined")).toBe("nil"); + Expect(util.transpileString("undefined")).toBe("nil;"); } @TestCase("inst.field", 8) diff --git a/test/unit/math.spec.ts b/test/unit/math.spec.ts index cdab19b27..7e93f7f5b 100644 --- a/test/unit/math.spec.ts +++ b/test/unit/math.spec.ts @@ -5,10 +5,10 @@ export class MathTests { // Dont test all and dont do functional test // because math implementations may differ between js and lua - @TestCase("Math.cos()", "math.cos()") - @TestCase("Math.sin()", "math.sin()") - @TestCase("Math.min()", "math.min()") - @TestCase("Math.PI", "math.pi") + @TestCase("Math.cos()", "math.cos();") + @TestCase("Math.sin()", "math.sin();") + @TestCase("Math.min()", "math.min();") + @TestCase("Math.PI", "math.pi;") @Test("Math") public math(inp: string, expected: string) { // Transpile diff --git a/test/unit/objectLiteral.spec.ts b/test/unit/objectLiteral.spec.ts index bad44c6d3..1be363562 100644 --- a/test/unit/objectLiteral.spec.ts +++ b/test/unit/objectLiteral.spec.ts @@ -5,11 +5,11 @@ const fs = require("fs"); export class ObjectLiteralTests { - @TestCase(`{a:3,b:"4"}`, `{a = 3,b = "4"}`) - @TestCase(`{"a":3,b:"4"}`, `{["a"] = 3,b = "4"}`) - @TestCase(`{["a"]:3,b:"4"}`, `{["a"] = 3,b = "4"}`) - @TestCase(`{["a"+123]:3,b:"4"}`, `{["a" .. 123] = 3,b = "4"}`) - @TestCase(`{[myFunc()]:3,b:"4"}`, `{[myFunc()] = 3,b = "4"}`) + @TestCase(`{a:3,b:"4"}`, `{a = 3,b = "4"};`) + @TestCase(`{"a":3,b:"4"}`, `{["a"] = 3,b = "4"};`) + @TestCase(`{["a"]:3,b:"4"}`, `{["a"] = 3,b = "4"};`) + @TestCase(`{["a"+123]:3,b:"4"}`, `{["a" .. 123] = 3,b = "4"};`) + @TestCase(`{[myFunc()]:3,b:"4"}`, `{[myFunc()] = 3,b = "4"};`) @Test("Object Literal") public objectLiteral(inp: string, out: string) { var lua = util.transpileString(`const myvar = ${inp};`) From 805f23d35f30d686ac28e27899d19e055c1d527f Mon Sep 17 00:00:00 2001 From: "andreiteodor.radu@gameloft.com" Date: Tue, 4 Sep 2018 16:44:07 +0300 Subject: [PATCH 4/4] -removed extra newline from assingments --- src/Transpiler.ts | 12 ++++++------ test/translation/lua/characterEscapeSequence.lua | 9 --------- test/translation/lua/continue.lua | 2 +- test/translation/lua/continueConcurrent.lua | 2 +- test/translation/lua/continueNested.lua | 4 ++-- test/translation/lua/continueNestedConcurrent.lua | 4 ++-- test/translation/lua/do.lua | 1 - test/translation/lua/for.lua | 2 +- test/translation/lua/getSetAccessors.lua | 2 -- test/translation/lua/interfaceIndex.lua | 1 - .../translation/lua/modulesChangedVariableExport.lua | 1 - test/translation/lua/modulesVariableExport.lua | 1 - test/translation/lua/tryCatch.lua | 2 -- test/translation/lua/tryCatchFinally.lua | 2 -- test/translation/lua/tryFinally.lua | 1 - test/translation/lua/typeAssert.lua | 1 - test/translation/lua/while.lua | 1 - test/unit/assignments.spec.ts | 4 ++-- 18 files changed, 15 insertions(+), 37 deletions(-) diff --git a/src/Transpiler.ts b/src/Transpiler.ts index 32dc0deae..cf97355b5 100644 --- a/src/Transpiler.ts +++ b/src/Transpiler.ts @@ -262,7 +262,7 @@ export abstract class LuaTranspiler { case ts.SyntaxKind.FunctionDeclaration: return this.transpileFunctionDeclaration(node as ts.FunctionDeclaration); case ts.SyntaxKind.VariableStatement: - return this.indent + this.transpileVariableStatement(node as ts.VariableStatement) + "\n"; + return this.indent + this.transpileVariableStatement(node as ts.VariableStatement) + ";\n"; case ts.SyntaxKind.ExpressionStatement: return this.indent + this.transpileExpression((node as ts.ExpressionStatement).expression) + ";\n"; case ts.SyntaxKind.ReturnStatement: @@ -497,7 +497,7 @@ export abstract class LuaTranspiler { // Add header let result = ""; for (const variableDeclaration of (node.initializer as ts.VariableDeclarationList).declarations) { - result += this.indent + this.transpileVariableDeclaration(variableDeclaration); + result += this.indent + this.transpileVariableDeclaration(variableDeclaration) + "\n"; } result += this.indent + `while(${this.transpileExpression(node.condition)}) do\n`; @@ -1421,9 +1421,9 @@ export abstract class LuaTranspiler { const identifierName = this.transpileIdentifier(node.name); if (node.initializer) { const value = this.transpileExpression(node.initializer); - return `local ${identifierName} = ${value};\n`; + return `local ${identifierName} = ${value}`; } else { - return `local ${identifierName} = nil;\n`; + return `local ${identifierName} = nil`; } } else if (ts.isArrayBindingPattern(node.name)) { // Destructuring type @@ -1437,9 +1437,9 @@ export abstract class LuaTranspiler { // Don't unpack TupleReturn decorated functions if (tsHelper.isTupleReturnCall(node.initializer, this.checker)) { - return `local ${vars}=${this.transpileExpression(node.initializer)};\n`; + return `local ${vars}=${this.transpileExpression(node.initializer)}`; } else { - return `local ${vars}=${this.transpileDestructingAssignmentValue(node.initializer)};\n`; + return `local ${vars}=${this.transpileDestructingAssignmentValue(node.initializer)}`; } } else { throw new TranspileError( diff --git a/test/translation/lua/characterEscapeSequence.lua b/test/translation/lua/characterEscapeSequence.lua index a07dddd80..239d2b9a5 100644 --- a/test/translation/lua/characterEscapeSequence.lua +++ b/test/translation/lua/characterEscapeSequence.lua @@ -1,18 +1,9 @@ local quoteInDoubleQuotes = "\' \' \'"; - local quoteInTemplateString = "\' \' \'"; - local doubleQuoteInQuotes = "\" \" \""; - local doubleQuoteInDoubleQuotes = "\" \" \""; - local doubleQuoteInTemplateString = "\" \" \""; - local escapedCharsInQuotes = "\\ \0 \b \t \n \v \f \" \' \`"; - local escapedCharsInDoubleQUotes = "\\ \0 \b \t \n \v \f \" \' \`"; - local escapedCharsInTemplateString = "\\ \0 \b \t \n \v \f \" \' \`"; - local nonEmptyTemplateString = "Level 0: \n\t "..tostring("Level 1: \n\t\t "..tostring("Level 3: \n\t\t\t "..tostring("Last level \n --").." \n --").." \n --").." \n --"; - diff --git a/test/translation/lua/continue.lua b/test/translation/lua/continue.lua index a2f89fa20..afb99a436 100644 --- a/test/translation/lua/continue.lua +++ b/test/translation/lua/continue.lua @@ -1,4 +1,4 @@ -local i = 0; +local i = 0 while(i<10) do do if i<5 then diff --git a/test/translation/lua/continueConcurrent.lua b/test/translation/lua/continueConcurrent.lua index ded1b89fb..89196ef3b 100644 --- a/test/translation/lua/continueConcurrent.lua +++ b/test/translation/lua/continueConcurrent.lua @@ -1,4 +1,4 @@ -local i = 0; +local i = 0 while(i<10) do do if i<5 then diff --git a/test/translation/lua/continueNested.lua b/test/translation/lua/continueNested.lua index bb5cde760..0b4924745 100644 --- a/test/translation/lua/continueNested.lua +++ b/test/translation/lua/continueNested.lua @@ -1,10 +1,10 @@ -local i = 0; +local i = 0 while(i<5) do do if (i%2)==0 then goto __continue0 end - local j = 0; + local j = 0 while(j<2) do do if j==1 then diff --git a/test/translation/lua/continueNestedConcurrent.lua b/test/translation/lua/continueNestedConcurrent.lua index c2f960118..4f162668b 100644 --- a/test/translation/lua/continueNestedConcurrent.lua +++ b/test/translation/lua/continueNestedConcurrent.lua @@ -1,10 +1,10 @@ -local i = 0; +local i = 0 while(i<5) do do if (i%2)==0 then goto __continue0 end - local j = 0; + local j = 0 while(j<2) do do if j==1 then diff --git a/test/translation/lua/do.lua b/test/translation/lua/do.lua index ac07a7aaa..33816ff7a 100644 --- a/test/translation/lua/do.lua +++ b/test/translation/lua/do.lua @@ -1,5 +1,4 @@ local e = 10; - repeat do e = (e-1); diff --git a/test/translation/lua/for.lua b/test/translation/lua/for.lua index 521b692ea..86a2c18ec 100644 --- a/test/translation/lua/for.lua +++ b/test/translation/lua/for.lua @@ -1,4 +1,4 @@ -local i = 1; +local i = 1 while(i<=100) do do end diff --git a/test/translation/lua/getSetAccessors.lua b/test/translation/lua/getSetAccessors.lua index ce6debfe1..975feb1d2 100644 --- a/test/translation/lua/getSetAccessors.lua +++ b/test/translation/lua/getSetAccessors.lua @@ -14,8 +14,6 @@ function MyClass.set__field(self,v) self._field = (v*2); end local instance = MyClass.new(true); - instance:set__field(4); local b = instance:get__field(); - local c = (4+instance:get__field())*3; diff --git a/test/translation/lua/interfaceIndex.lua b/test/translation/lua/interfaceIndex.lua index d1d23be0c..5b329c5ac 100644 --- a/test/translation/lua/interfaceIndex.lua +++ b/test/translation/lua/interfaceIndex.lua @@ -1,3 +1,2 @@ local a = {}; - a["abc"] = "def"; diff --git a/test/translation/lua/modulesChangedVariableExport.lua b/test/translation/lua/modulesChangedVariableExport.lua index 065923b04..0c5c579bf 100644 --- a/test/translation/lua/modulesChangedVariableExport.lua +++ b/test/translation/lua/modulesChangedVariableExport.lua @@ -1,6 +1,5 @@ local exports = exports or {} local test = nil; - test = 1; exports.test = test return exports \ No newline at end of file diff --git a/test/translation/lua/modulesVariableExport.lua b/test/translation/lua/modulesVariableExport.lua index fa48b6fa7..3ecfdc4c3 100644 --- a/test/translation/lua/modulesVariableExport.lua +++ b/test/translation/lua/modulesVariableExport.lua @@ -1,5 +1,4 @@ local exports = exports or {} local test = "test"; - exports.test = test return exports diff --git a/test/translation/lua/tryCatch.lua b/test/translation/lua/tryCatch.lua index 89d6e3170..082aafc57 100644 --- a/test/translation/lua/tryCatch.lua +++ b/test/translation/lua/tryCatch.lua @@ -1,8 +1,6 @@ xpcall(function() local a = 42; - end, function(er) local b = "fail"; - end) diff --git a/test/translation/lua/tryCatchFinally.lua b/test/translation/lua/tryCatchFinally.lua index 0278c647f..c08fa2bc4 100644 --- a/test/translation/lua/tryCatchFinally.lua +++ b/test/translation/lua/tryCatchFinally.lua @@ -1,9 +1,7 @@ xpcall(function() local a = 42; - end, function(er) local b = "fail"; - end) local c = "finally"; diff --git a/test/translation/lua/tryFinally.lua b/test/translation/lua/tryFinally.lua index 81cd9f3e5..4eb2f1c34 100644 --- a/test/translation/lua/tryFinally.lua +++ b/test/translation/lua/tryFinally.lua @@ -1,6 +1,5 @@ xpcall(function() local a = 42; - end, function(e) end) diff --git a/test/translation/lua/typeAssert.lua b/test/translation/lua/typeAssert.lua index 35501d1e3..1c7069d36 100644 --- a/test/translation/lua/typeAssert.lua +++ b/test/translation/lua/typeAssert.lua @@ -1,3 +1,2 @@ local test1 = 10; - local test2 = 10; diff --git a/test/translation/lua/while.lua b/test/translation/lua/while.lua index 672e6eafa..4b5a20056 100644 --- a/test/translation/lua/while.lua +++ b/test/translation/lua/while.lua @@ -1,5 +1,4 @@ local d = 10; - while d>0 do do d = (d-1); diff --git a/test/unit/assignments.spec.ts b/test/unit/assignments.spec.ts index d4fb2d34d..c21d04bcb 100644 --- a/test/unit/assignments.spec.ts +++ b/test/unit/assignments.spec.ts @@ -92,7 +92,7 @@ export class AssignmentTests { + `a = abc();`; const lua = util.transpileString(code); - Expect(lua).toBe("local a = ({ abc() });\n\na = ({ abc() });"); + Expect(lua).toBe("local a = ({ abc() });\na = ({ abc() });"); } @Test("TupleReturn interface assignment") @@ -128,7 +128,7 @@ export class AssignmentTests { + `let [a,b] = jkl.abc();`; const lua = util.transpileString(code); - Expect(lua).toBe("local jkl = def.new(true);\n\nlocal a,b=jkl:abc();"); + Expect(lua).toBe("local jkl = def.new(true);\nlocal a,b=jkl:abc();"); } @Test("TupleReturn functional")