roblox-ts
Version:
A TypeScript-to-Luau Compiler for Roblox
68 lines • 3.9 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.createBinaryFromOperator = createBinaryFromOperator;
const luau_ast_1 = __importDefault(require("@roblox-ts/luau-ast"));
const assert_1 = require("../../Shared/util/assert");
const getKindName_1 = require("./getKindName");
const types_1 = require("./types");
const wrapExpressionStatement_1 = require("./wrapExpressionStatement");
const typescript_1 = __importDefault(require("typescript"));
const OPERATOR_MAP = new Map([
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
]);
const BITWISE_OPERATOR_MAP = new Map([
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
]);
function createBinaryAdd(left, leftType, right, rightType) {
const leftIsString = (0, types_1.isDefinitelyType)(leftType, types_1.isStringType);
const rightIsString = (0, types_1.isDefinitelyType)(rightType, types_1.isStringType);
if (leftIsString || rightIsString) {
return luau_ast_1.default.binary(leftIsString ? left : luau_ast_1.default.call(luau_ast_1.default.globals.tostring, [left]), "..", rightIsString ? right : luau_ast_1.default.call(luau_ast_1.default.globals.tostring, [right]));
}
else {
return luau_ast_1.default.binary(left, "+", right);
}
}
function createBinaryFromOperator(state, node, left, leftType, operatorKind, right, rightType) {
const operator = OPERATOR_MAP.get(operatorKind);
if (operator !== undefined) {
return luau_ast_1.default.binary(left, operator, right);
}
if (operatorKind === typescript_1.default.SyntaxKind.PlusToken || operatorKind === typescript_1.default.SyntaxKind.PlusEqualsToken) {
return createBinaryAdd(left, leftType, right, rightType);
}
const bit32Name = BITWISE_OPERATOR_MAP.get(operatorKind);
if (bit32Name !== undefined) {
return luau_ast_1.default.call(luau_ast_1.default.property(luau_ast_1.default.globals.bit32, bit32Name), [left, right]);
}
if (operatorKind === typescript_1.default.SyntaxKind.CommaToken) {
state.prereqList((0, wrapExpressionStatement_1.wrapExpressionStatement)(left));
return right;
}
(0, assert_1.assert)(false, `createBinaryFromOperator unknown operator: ${(0, getKindName_1.getKindName)(operatorKind)}`);
}
//# sourceMappingURL=createBinaryFromOperator.js.map