Skip to content

Commit c8e59a3

Browse files
committed
Move transformLoopBody to the new utils file
1 parent a834c82 commit c8e59a3

File tree

6 files changed

+28
-31
lines changed

6 files changed

+28
-31
lines changed

src/transformation/visitors/loops/body.ts

Lines changed: 0 additions & 25 deletions
This file was deleted.

src/transformation/visitors/loops/do-while.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import * as ts from "typescript";
22
import * as lua from "../../../LuaAST";
33
import { FunctionVisitor } from "../../context";
4-
import { transformLoopBody } from "./body";
4+
import { transformLoopBody } from "./utils";
55

66
export const transformWhileStatement: FunctionVisitor<ts.WhileStatement> = (statement, context) => {
77
return lua.createWhileStatement(

src/transformation/visitors/loops/for-in.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@ import { FunctionVisitor } from "../../context";
44
import { ForbiddenForIn, UnsupportedForInVariable } from "../../utils/errors";
55
import { isArrayType } from "../../utils/typescript";
66
import { transformIdentifier } from "../identifier";
7-
import { transformLoopBody } from "./body";
8-
import { getVariableDeclarationBinding } from "./utils";
7+
import { getVariableDeclarationBinding, transformLoopBody } from "./utils";
98

109
export const transformForInStatement: FunctionVisitor<ts.ForInStatement> = (statement, context) => {
1110
if (isArrayType(context, context.checker.getTypeAtLocation(statement.expression))) {

src/transformation/visitors/loops/for-of.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,7 @@ import { isArrayType, isNumberType } from "../../utils/typescript";
1515
import { transformArguments } from "../call";
1616
import { transformIdentifier } from "../identifier";
1717
import { transformArrayBindingElement, transformVariableDeclaration } from "../variable-declaration";
18-
import { transformLoopBody } from "./body";
19-
import { getVariableDeclarationBinding } from "./utils";
18+
import { getVariableDeclarationBinding, transformLoopBody } from "./utils";
2019

2120
function transformForOfInitializer(
2221
context: TransformationContext,

src/transformation/visitors/loops/for.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import * as lua from "../../../LuaAST";
33
import { flatMap } from "../../../utils";
44
import { FunctionVisitor } from "../../context";
55
import { checkVariableDeclarationList, transformVariableDeclaration } from "../variable-declaration";
6-
import { transformLoopBody } from "./body";
6+
import { transformLoopBody } from "./utils";
77

88
export const transformForStatement: FunctionVisitor<ts.ForStatement> = (statement, context) => {
99
const result: lua.Statement[] = [];

src/transformation/visitors/loops/utils.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,30 @@
11
import * as ts from "typescript";
2+
import * as lua from "../../../LuaAST";
3+
import { TransformationContext } from "../../context";
4+
import { performHoisting, popScope, pushScope, ScopeType } from "../../utils/scope";
5+
import { transformBlockOrStatement } from "../block";
26
import { checkVariableDeclarationList } from "../variable-declaration";
37

8+
export function transformLoopBody(
9+
context: TransformationContext,
10+
loop: ts.WhileStatement | ts.DoStatement | ts.ForStatement | ts.ForOfStatement | ts.ForInOrOfStatement
11+
): lua.Statement[] {
12+
pushScope(context, ScopeType.Loop);
13+
const body = performHoisting(context, transformBlockOrStatement(context, loop.statement));
14+
const scope = popScope(context);
15+
const scopeId = scope.id;
16+
17+
if (!scope.loopContinued) {
18+
return body;
19+
}
20+
21+
const baseResult: lua.Statement[] = [lua.createDoStatement(body)];
22+
const continueLabel = lua.createLabelStatement(`__continue${scopeId}`);
23+
baseResult.push(continueLabel);
24+
25+
return baseResult;
26+
}
27+
428
export function getVariableDeclarationBinding(node: ts.VariableDeclarationList): ts.BindingName {
529
checkVariableDeclarationList(node);
630

0 commit comments

Comments
 (0)