UNPKG

@abaplint/transpiler

Version:
55 lines 2.53 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CaseTypeTranspiler = void 0; const abaplint = require("@abaplint/core"); const unique_identifier_1 = require("../unique_identifier"); const chunk_1 = require("../chunk"); class CaseTypeTranspiler { transpile(node, traversal) { // does not use switch(), as it break;'s EXITs const s = node.findDirectStatement(abaplint.Statements.CaseType)?.findDirectExpression(abaplint.Expressions.Source); if (s === undefined) { throw new Error("CASE TYPE, 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.WhenType)) { for (const c of w.getChildren()) { if (c instanceof abaplint.Nodes.StatementNode && c.get() instanceof abaplint.Statements.WhenType) { if (first === true) { first = false; ret.appendString("if ("); } else { ret.appendString("} else if ("); } const cname = c.findDirectExpression(abaplint.Expressions.ClassName); const lookup = traversal.lookupClassOrInterface(cname?.concatTokens(), cname?.getFirstToken()); ret.appendString(u + ".get() instanceof " + lookup); ret.appendString(") {\n"); ret.appendString(traversal.traverse(c.findDirectExpression(abaplint.Expressions.Target)).getCode() + ".set(" + u + ")\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.CaseTypeTranspiler = CaseTypeTranspiler; //# sourceMappingURL=case_type.js.map