@abaplint/transpiler
Version:
53 lines • 2.22 kB
JavaScript
;
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