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