Skip to content

Commit b548a73

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

File tree

6 files changed

+30
-37
lines changed

6 files changed

+30
-37
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: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,14 @@ import * as lua from "../../../LuaAST";
33
import { cast, castEach } from "../../../utils";
44
import { FunctionVisitor, TransformationContext } from "../../context";
55
import { AnnotationKind, getTypeAnnotations, isForRangeType, isLuaIteratorType } from "../../utils/annotations";
6-
import {
7-
InvalidForRangeCall,
8-
MissingForOfVariables,
9-
UnsupportedNonDestructuringLuaIterator,
10-
UnsupportedObjectDestructuringInForOf,
11-
} from "../../utils/errors";
6+
import { InvalidForRangeCall, MissingForOfVariables, UnsupportedNonDestructuringLuaIterator, UnsupportedObjectDestructuringInForOf } from "../../utils/errors";
127
import { createUnpackCall } from "../../utils/lua-ast";
138
import { LuaLibFeature, transformLuaLibFunction } from "../../utils/lualib";
149
import { isArrayType, isNumberType } from "../../utils/typescript";
1510
import { transformArguments } from "../call";
1611
import { transformIdentifier } from "../identifier";
1712
import { transformArrayBindingElement, transformVariableDeclaration } from "../variable-declaration";
18-
import { transformLoopBody } from "./body";
19-
import { getVariableDeclarationBinding } from "./utils";
13+
import { getVariableDeclarationBinding, transformLoopBody } from "./utils";
2014

2115
function transformForOfInitializer(
2216
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: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,31 @@
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+
9+
export function transformLoopBody(
10+
context: TransformationContext,
11+
loop: ts.WhileStatement | ts.DoStatement | ts.ForStatement | ts.ForOfStatement | ts.ForInOrOfStatement
12+
): lua.Statement[] {
13+
pushScope(context, ScopeType.Loop);
14+
const body = performHoisting(context, transformBlockOrStatement(context, loop.statement));
15+
const scope = popScope(context);
16+
const scopeId = scope.id;
17+
18+
if (!scope.loopContinued) {
19+
return body;
20+
}
21+
22+
const baseResult: lua.Statement[] = [lua.createDoStatement(body)];
23+
const continueLabel = lua.createLabelStatement(`__continue${scopeId}`);
24+
baseResult.push(continueLabel);
25+
26+
return baseResult;
27+
}
28+
429
export function getVariableDeclarationBinding(node: ts.VariableDeclarationList): ts.BindingName {
530
checkVariableDeclarationList(node);
631

0 commit comments

Comments
 (0)