Skip to content

Commit 9400a6d

Browse files
tomblindPerryvw
authored andcommitted
fixed issue where for loop variable would override local with same name (#413)
1 parent 0499cf9 commit 9400a6d

File tree

7 files changed

+78
-55
lines changed

7 files changed

+78
-55
lines changed

src/LuaTransformer.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1568,7 +1568,7 @@ export class LuaTransformer {
15681568
);
15691569
}
15701570

1571-
public transformForStatement(statement: ts.ForStatement): tstl.Statement[] {
1571+
public transformForStatement(statement: ts.ForStatement): tstl.DoStatement {
15721572
const result: tstl.Statement[] = [];
15731573

15741574
if (statement.initializer) {
@@ -1596,7 +1596,7 @@ export class LuaTransformer {
15961596
// while (condition) do ... end
15971597
result.push(tstl.createWhileStatement(tstl.createBlock(body), condition));
15981598

1599-
return result;
1599+
return tstl.createDoStatement(result, statement);
16001600
}
16011601

16021602
public transformForOfInitializer(initializer: ts.ForInitializer, expression: tstl.Expression): tstl.Statement {

test/translation/lua/continue.lua

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
1-
local i = 0;
2-
while i < 10 do
3-
do
4-
if i < 5 then
5-
goto __continue1;
1+
do
2+
local i = 0;
3+
while i < 10 do
4+
do
5+
if i < 5 then
6+
goto __continue1;
7+
end
68
end
9+
::__continue1::
10+
i = i + 1;
711
end
8-
::__continue1::
9-
i = i + 1;
1012
end
Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
1-
local i = 0;
2-
while i < 10 do
3-
do
4-
if i < 5 then
5-
goto __continue1;
6-
end
7-
if i == 7 then
8-
goto __continue1;
1+
do
2+
local i = 0;
3+
while i < 10 do
4+
do
5+
if i < 5 then
6+
goto __continue1;
7+
end
8+
if i == 7 then
9+
goto __continue1;
10+
end
911
end
12+
::__continue1::
13+
i = i + 1;
1014
end
11-
::__continue1::
12-
i = i + 1;
1315
end
Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,24 @@
1-
local i = 0;
2-
while i < 5 do
3-
do
4-
if (i % 2) == 0 then
5-
goto __continue1;
6-
end
7-
local j = 0;
8-
while j < 2 do
1+
do
2+
local i = 0;
3+
while i < 5 do
4+
do
5+
if (i % 2) == 0 then
6+
goto __continue1;
7+
end
98
do
10-
if j == 1 then
11-
goto __continue3;
9+
local j = 0;
10+
while j < 2 do
11+
do
12+
if j == 1 then
13+
goto __continue3;
14+
end
15+
end
16+
::__continue3::
17+
j = j + 1;
1218
end
1319
end
14-
::__continue3::
15-
j = j + 1;
1620
end
21+
::__continue1::
22+
i = i + 1;
1723
end
18-
::__continue1::
19-
i = i + 1;
2024
end
Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,27 @@
1-
local i = 0;
2-
while i < 5 do
3-
do
4-
if (i % 2) == 0 then
5-
goto __continue1;
6-
end
7-
local j = 0;
8-
while j < 2 do
1+
do
2+
local i = 0;
3+
while i < 5 do
4+
do
5+
if (i % 2) == 0 then
6+
goto __continue1;
7+
end
98
do
10-
if j == 1 then
11-
goto __continue3;
9+
local j = 0;
10+
while j < 2 do
11+
do
12+
if j == 1 then
13+
goto __continue3;
14+
end
15+
end
16+
::__continue3::
17+
j = j + 1;
1218
end
1319
end
14-
::__continue3::
15-
j = j + 1;
16-
end
17-
if i == 4 then
18-
goto __continue1;
20+
if i == 4 then
21+
goto __continue1;
22+
end
1923
end
24+
::__continue1::
25+
i = i + 1;
2026
end
21-
::__continue1::
22-
i = i + 1;
2327
end

test/translation/lua/for.lua

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1-
local i = 1;
2-
while i <= 100 do
3-
do
1+
do
2+
local i = 1;
3+
while i <= 100 do
4+
do
5+
end
6+
::__continue1::
7+
i = i + 1;
48
end
5-
::__continue1::
6-
i = i + 1;
79
end

test/unit/loops.spec.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,15 @@ export class LuaLoopTests
263263
Expect(result).toBe(JSON.stringify(expected));
264264
}
265265

266+
@TestCase("for scope")
267+
public forScope(): void {
268+
const code =
269+
`let i = 42;
270+
for (let i = 0; i < 10; ++i) {}
271+
return i;`;
272+
Expect(util.transpileAndExecute(code)).toBe(42);
273+
}
274+
266275
@TestCase({ ["test1"]: 0, ["test2"]: 1, ["test3"]: 2 }, { ["test1"]: 1, ["test2"]: 2, ["test3"]: 3 })
267276
@Test("forin[Object]")
268277
public forinObject(inp: any, expected: any): void

0 commit comments

Comments
 (0)