UNPKG

roblox-ts

Version:

A TypeScript-to-Luau Compiler for Roblox

31 lines 1.97 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.transformDoStatement = transformDoStatement; const luau_ast_1 = __importDefault(require("@roblox-ts/luau-ast")); const transformExpression_1 = require("../expressions/transformExpression"); const transformStatementList_1 = require("../transformStatementList"); const createTruthinessChecks_1 = require("../../util/createTruthinessChecks"); const getStatements_1 = require("../../util/getStatements"); const typescript_1 = __importDefault(require("typescript")); function transformDoStatement(state, { expression, statement }) { const statements = (0, transformStatementList_1.transformStatementList)(state, statement, (0, getStatements_1.getStatements)(statement)); let conditionIsInvertedInLuau = true; if (typescript_1.default.isPrefixUnaryExpression(expression) && expression.operator === typescript_1.default.SyntaxKind.ExclamationToken) { expression = expression.operand; conditionIsInvertedInLuau = false; } const [condition, conditionPrereqs] = state.capture(() => (0, createTruthinessChecks_1.createTruthinessChecks)(state, (0, transformExpression_1.transformExpression)(state, expression), expression)); const repeatStatements = luau_ast_1.default.list.make(); luau_ast_1.default.list.push(repeatStatements, luau_ast_1.default.create(luau_ast_1.default.SyntaxKind.DoStatement, { statements, })); luau_ast_1.default.list.pushList(repeatStatements, conditionPrereqs); return luau_ast_1.default.list.make(luau_ast_1.default.create(luau_ast_1.default.SyntaxKind.RepeatStatement, { statements: repeatStatements, condition: conditionIsInvertedInLuau ? luau_ast_1.default.unary("not", condition) : condition, })); } //# sourceMappingURL=transformDoStatement.js.map