UNPKG

@abaplint/transpiler

Version:
53 lines 2.22 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CaseTranspiler = void 0; const abaplint = require("@abaplint/core"); const unique_identifier_1 = require("../unique_identifier"); const statements_1 = require("../statements"); const chunk_1 = require("../chunk"); class CaseTranspiler { transpile(node, traversal) { // does not use switch(), as it break;'s EXITs const s = node.findDirectStatement(abaplint.Statements.Case)?.findDirectExpression(abaplint.Expressions.Source); if (s === undefined) { throw new Error("CASE, no Source found"); } let first = true; const u = unique_identifier_1.UniqueIdentifier.get(); const ret = new chunk_1.Chunk(); // this determines and copies the value ret.append("let " + u + " = ", node, traversal); ret.appendChunk(traversal.traverse(s)); ret.append(";\n", node, traversal); for (const w of node.findDirectStructures(abaplint.Structures.When)) { for (const c of w.getChildren()) { if (c instanceof abaplint.Nodes.StatementNode && c.get() instanceof abaplint.Statements.When) { if (first === true) { first = false; ret.appendString("if ("); } else { ret.appendString("} else if ("); } ret.appendChunk(new statements_1.WhenTranspiler(u).transpile(c, traversal)); ret.appendString(") {\n"); } else if (c instanceof abaplint.Nodes.StatementNode && c.get() instanceof abaplint.Statements.WhenOthers) { if (first === true) { continue; } ret.appendString("} else {\n"); } else { ret.appendChunk(traversal.traverse(c)); // Normal } } } if (first === false) { ret.appendString("}\n"); } return ret; } } exports.CaseTranspiler = CaseTranspiler; //# sourceMappingURL=case.js.map