UNPKG

roblox-ts

Version:

A TypeScript-to-Luau Compiler for Roblox

83 lines 6.11 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.transformStatement = transformStatement; const luau_ast_1 = __importDefault(require("@roblox-ts/luau-ast")); const diagnostics_1 = require("../../../Shared/diagnostics"); const assert_1 = require("../../../Shared/util/assert"); const DiagnosticService_1 = require("../../classes/DiagnosticService"); const transformBlock_1 = require("./transformBlock"); const transformBreakStatement_1 = require("./transformBreakStatement"); const transformClassDeclaration_1 = require("./transformClassDeclaration"); const transformContinueStatement_1 = require("./transformContinueStatement"); const transformDoStatement_1 = require("./transformDoStatement"); const transformEnumDeclaration_1 = require("./transformEnumDeclaration"); const transformExportAssignment_1 = require("./transformExportAssignment"); const transformExportDeclaration_1 = require("./transformExportDeclaration"); const transformExpressionStatement_1 = require("./transformExpressionStatement"); const transformForOfStatement_1 = require("./transformForOfStatement"); const transformForStatement_1 = require("./transformForStatement"); const transformFunctionDeclaration_1 = require("./transformFunctionDeclaration"); const transformIfStatement_1 = require("./transformIfStatement"); const transformImportDeclaration_1 = require("./transformImportDeclaration"); const transformImportEqualsDeclaration_1 = require("./transformImportEqualsDeclaration"); const transformModuleDeclaration_1 = require("./transformModuleDeclaration"); const transformReturnStatement_1 = require("./transformReturnStatement"); const transformSwitchStatement_1 = require("./transformSwitchStatement"); const transformThrowStatement_1 = require("./transformThrowStatement"); const transformTryStatement_1 = require("./transformTryStatement"); const transformVariableStatement_1 = require("./transformVariableStatement"); const transformWhileStatement_1 = require("./transformWhileStatement"); const getKindName_1 = require("../../util/getKindName"); const typescript_1 = __importDefault(require("typescript")); const NO_EMIT = () => luau_ast_1.default.list.make(); const DIAGNOSTIC = (factory) => (state, node) => { DiagnosticService_1.DiagnosticService.addDiagnostic(factory(node)); return NO_EMIT(); }; function createTransformerMap(values) { return new Map(values); } const TRANSFORMER_BY_KIND = createTransformerMap([ [typescript_1.default.SyntaxKind.InterfaceDeclaration, NO_EMIT], [typescript_1.default.SyntaxKind.TypeAliasDeclaration, NO_EMIT], [typescript_1.default.SyntaxKind.EmptyStatement, NO_EMIT], [typescript_1.default.SyntaxKind.ForInStatement, DIAGNOSTIC(diagnostics_1.errors.noForInStatement)], [typescript_1.default.SyntaxKind.LabeledStatement, DIAGNOSTIC(diagnostics_1.errors.noLabeledStatement)], [typescript_1.default.SyntaxKind.DebuggerStatement, DIAGNOSTIC(diagnostics_1.errors.noDebuggerStatement)], [typescript_1.default.SyntaxKind.Block, transformBlock_1.transformBlock], [typescript_1.default.SyntaxKind.BreakStatement, transformBreakStatement_1.transformBreakStatement], [typescript_1.default.SyntaxKind.ClassDeclaration, transformClassDeclaration_1.transformClassDeclaration], [typescript_1.default.SyntaxKind.ContinueStatement, transformContinueStatement_1.transformContinueStatement], [typescript_1.default.SyntaxKind.DoStatement, transformDoStatement_1.transformDoStatement], [typescript_1.default.SyntaxKind.EnumDeclaration, transformEnumDeclaration_1.transformEnumDeclaration], [typescript_1.default.SyntaxKind.ExportAssignment, transformExportAssignment_1.transformExportAssignment], [typescript_1.default.SyntaxKind.ExportDeclaration, transformExportDeclaration_1.transformExportDeclaration], [typescript_1.default.SyntaxKind.ExpressionStatement, transformExpressionStatement_1.transformExpressionStatement], [typescript_1.default.SyntaxKind.ForOfStatement, transformForOfStatement_1.transformForOfStatement], [typescript_1.default.SyntaxKind.ForStatement, transformForStatement_1.transformForStatement], [typescript_1.default.SyntaxKind.FunctionDeclaration, transformFunctionDeclaration_1.transformFunctionDeclaration], [typescript_1.default.SyntaxKind.IfStatement, transformIfStatement_1.transformIfStatement], [typescript_1.default.SyntaxKind.ImportDeclaration, transformImportDeclaration_1.transformImportDeclaration], [typescript_1.default.SyntaxKind.ImportEqualsDeclaration, transformImportEqualsDeclaration_1.transformImportEqualsDeclaration], [typescript_1.default.SyntaxKind.ModuleDeclaration, transformModuleDeclaration_1.transformModuleDeclaration], [typescript_1.default.SyntaxKind.ReturnStatement, transformReturnStatement_1.transformReturnStatement], [typescript_1.default.SyntaxKind.SwitchStatement, transformSwitchStatement_1.transformSwitchStatement], [typescript_1.default.SyntaxKind.ThrowStatement, transformThrowStatement_1.transformThrowStatement], [typescript_1.default.SyntaxKind.TryStatement, transformTryStatement_1.transformTryStatement], [typescript_1.default.SyntaxKind.VariableStatement, transformVariableStatement_1.transformVariableStatement], [typescript_1.default.SyntaxKind.WhileStatement, transformWhileStatement_1.transformWhileStatement], ]); function transformStatement(state, node) { const modifiers = typescript_1.default.canHaveModifiers(node) ? typescript_1.default.getModifiers(node) : undefined; if (modifiers === null || modifiers === void 0 ? void 0 : modifiers.some(v => v.kind === typescript_1.default.SyntaxKind.DeclareKeyword)) return NO_EMIT(); const transformer = TRANSFORMER_BY_KIND.get(node.kind); if (transformer) { return transformer(state, node); } (0, assert_1.assert)(false, `Unknown statement: ${(0, getKindName_1.getKindName)(node.kind)}`); } //# sourceMappingURL=transformStatement.js.map