roblox-ts
Version:
<div align="center"><img width=25% src="https://i.imgur.com/yCjHmng.png"></div> <h1 align="center"><a href="https://roblox-ts.github.io/">roblox-ts</a></h1> <div align="center">A TypeScript-to-Lua Compiler for Roblox</div> <br> <div align="center"> <a hr
51 lines • 2.2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const _1 = require(".");
const CompilerError_1 = require("../errors/CompilerError");
const typeUtilities_1 = require("../typeUtilities");
const utility_1 = require("../utility");
function compileEnumDeclaration(state, node) {
let result = "";
if (node.isConstEnum()) {
return result;
}
const name = node.getName();
const nameNode = node.getNameNode();
_1.checkReserved(name, nameNode, true);
state.pushExport(name, node);
if (typeUtilities_1.shouldHoist(node, nameNode)) {
state.pushHoistStack(name);
}
result += state.indent + `${name} = ${name} or {};\n`;
result += state.indent + `do\n`;
state.pushIndent();
for (const member of node.getMembers()) {
const memberName = member.getName();
_1.checkReserved(memberName, member.getNameNode());
const memberValue = member.getValue();
const safeIndex = utility_1.safeLuaIndex(name, memberName);
if (typeof memberValue === "string") {
result += state.indent + `${safeIndex} = "${memberValue}";\n`;
}
else if (typeof memberValue === "number") {
result += state.indent + `${safeIndex} = ${memberValue};\n`;
result += state.indent + `${name}[${memberValue}] = "${memberName}";\n`;
}
else if (member.hasInitializer()) {
const initializer = utility_1.skipNodesDownwards(member.getInitializer());
state.enterPrecedingStatementContext();
const expStr = _1.getReadableExpressionName(state, initializer);
result += state.exitPrecedingStatementContextAndJoin();
result += state.indent + `${safeIndex} = ${expStr};\n`;
result += state.indent + `${name}[${expStr}] = "${memberName}";\n`;
}
else {
throw new CompilerError_1.CompilerError("Unexpected enum structure.", node, CompilerError_1.CompilerErrorType.BadEnum, true);
}
}
state.popIndent();
result += state.indent + `end;\n`;
return result;
}
exports.compileEnumDeclaration = compileEnumDeclaration;
//# sourceMappingURL=enum.js.map