UNPKG

@abaplint/transpiler

Version:
56 lines 2.77 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.TableExpressionTranspiler = void 0; const core_1 = require("@abaplint/core"); const chunk_1 = require("../chunk"); const component_chain_simple_1 = require("./component_chain_simple"); class TableExpressionTranspiler { transpile(node, traversal, source) { if (source === undefined) { throw new Error("TableExpressionTranspiler: Source chunk is undefined"); } const ret = new chunk_1.Chunk(); const extra = []; let field = ""; let usesTableLine = false; const withKey = []; if (node.getChildren().length === 3 && node.findDirectExpression(core_1.Expressions.Source)) { extra.push(`index: ${traversal.traverse(node.findDirectExpression(core_1.Expressions.Source)).getCode()}`); } else if (node.findDirectTokenByText("INDEX")) { throw new Error("TableExpressionTranspiler: todo, other INDEX"); } else if (node.findDirectExpression(core_1.Expressions.SimpleName)) { throw new Error("TableExpressionTranspiler: todo, SimpleName"); } else if (node.findDirectExpression(core_1.Expressions.Dynamic)) { throw new Error("TableExpressionTranspiler: todo, Dynamic"); } else { // conditions for (const c of node.getChildren()) { if (c instanceof core_1.Nodes.ExpressionNode && c.get() instanceof core_1.Expressions.ComponentChainSimple) { field = new component_chain_simple_1.ComponentChainSimpleTranspiler("i.").transpile(c, traversal).getCode(); if (field === "i.table_line") { usesTableLine = true; } } else if (c instanceof core_1.Nodes.ExpressionNode && c.get() instanceof core_1.Expressions.Source) { withKey.push("abap.compare.eq(" + field + ", " + traversal.traverse(c).getCode() + ")"); } else if (c.concatTokens() === "=" || c.concatTokens() === "[" || c.concatTokens() === "]") { continue; } else { throw new Error("TableExpressionTranspiler: todo, other, " + c.concatTokens()); } } extra.push("withKey: async (i) => {return " + withKey.join(" && ") + ";}"); extra.push("usesTableLine: " + usesTableLine); } ret.appendString(`(await abap.operators.tableExpression(${source.getCode()}, {${extra.join(", ")} }))`); return ret; } } exports.TableExpressionTranspiler = TableExpressionTranspiler; //# sourceMappingURL=table_expression.js.map