typescript-to-lua
Version:
A generic TypeScript to Lua transpiler. Write your code in TypeScript and publish Lua!
42 lines • 2.16 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.transformContinueStatement = exports.transformBreakStatement = void 0;
const CompilerOptions_1 = require("../../CompilerOptions");
const lua = require("../../LuaAST");
const scope_1 = require("../utils/scope");
const transformBreakStatement = (breakStatement, context) => {
void context;
return lua.createBreakStatement(breakStatement);
};
exports.transformBreakStatement = transformBreakStatement;
const transformContinueStatement = (statement, context) => {
var _a;
const scope = (0, scope_1.findScope)(context, scope_1.ScopeType.Loop);
const continuedWith = {
[CompilerOptions_1.LuaTarget.Universal]: scope_1.LoopContinued.WithRepeatBreak,
[CompilerOptions_1.LuaTarget.Lua50]: scope_1.LoopContinued.WithRepeatBreak,
[CompilerOptions_1.LuaTarget.Lua51]: scope_1.LoopContinued.WithRepeatBreak,
[CompilerOptions_1.LuaTarget.Lua52]: scope_1.LoopContinued.WithGoto,
[CompilerOptions_1.LuaTarget.Lua53]: scope_1.LoopContinued.WithGoto,
[CompilerOptions_1.LuaTarget.Lua54]: scope_1.LoopContinued.WithGoto,
[CompilerOptions_1.LuaTarget.LuaJIT]: scope_1.LoopContinued.WithGoto,
[CompilerOptions_1.LuaTarget.Luau]: scope_1.LoopContinued.WithContinue,
}[context.luaTarget];
if (scope) {
scope.loopContinued = continuedWith;
}
const label = `__continue${(_a = scope === null || scope === void 0 ? void 0 : scope.id) !== null && _a !== void 0 ? _a : ""}`;
switch (continuedWith) {
case scope_1.LoopContinued.WithGoto:
return lua.createGotoStatement(label, statement);
case scope_1.LoopContinued.WithContinue:
return lua.createContinueStatement(statement);
case scope_1.LoopContinued.WithRepeatBreak:
return [
lua.createAssignmentStatement(lua.createIdentifier(label), lua.createBooleanLiteral(true), statement),
lua.createBreakStatement(statement),
];
}
};
exports.transformContinueStatement = transformContinueStatement;
//# sourceMappingURL=break-continue.js.map