UNPKG

@abaplint/transpiler

Version:
54 lines 3.25 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ComponentCompareTranspiler = void 0; const core_1 = require("@abaplint/core"); const chunk_1 = require("../chunk"); const component_chain_simple_1 = require("./component_chain_simple"); class ComponentCompareTranspiler { transpile(node, traversal) { const concat = node.concatTokens().toUpperCase(); const pre = concat.startsWith("NOT") ? "!" : ""; const componentExpression = node.findDirectExpression(core_1.Expressions.ComponentChainSimple); if (componentExpression === undefined) { throw new Error("unexpected, ComponentCompareTranspiler"); } const component = new component_chain_simple_1.ComponentChainSimpleTranspiler("I.").transpile(componentExpression, traversal).getCode(); if (node.findDirectExpression(core_1.Expressions.CompareOperator)) { const compare = traversal.traverse(node.findDirectExpression(core_1.Expressions.CompareOperator)).getCode(); const source = traversal.traverse(node.findDirectExpression(core_1.Expressions.Source)).getCode(); return new chunk_1.Chunk(`(I) => {return ${pre}abap.compare.${compare}(${component}, ${source});}`); } if ((concat.startsWith("NOT") && concat.endsWith("IS INITIAL")) || concat.endsWith("IS NOT INITIAL")) { return new chunk_1.Chunk(`(I) => {return abap.compare.initial(${component}) === false;}`); } else if (concat.endsWith("IS INITIAL")) { return new chunk_1.Chunk(`(I) => {return abap.compare.initial(${component});}`); } if (concat.startsWith(componentExpression?.concatTokens().toUpperCase() + " IN ")) { const source = traversal.traverse(node.findDirectExpression(core_1.Expressions.Source)).getCode(); return new chunk_1.Chunk(`(I) => {return ${pre}abap.compare.in(${component}, ${source});}`); } else if (concat.startsWith(componentExpression?.concatTokens().toUpperCase() + " NOT IN ")) { const source = traversal.traverse(node.findDirectExpression(core_1.Expressions.Source)).getCode(); return new chunk_1.Chunk(`(I) => {return !abap.compare.in(${component}, ${source});}`); } if ((concat.startsWith("NOT") && concat.endsWith("IS BOUND")) || concat.endsWith("IS NOT BOUND")) { return new chunk_1.Chunk(`(I) => {return abap.compare.initial(${component});}`); } else if (concat.endsWith("IS BOUND")) { return new chunk_1.Chunk(`(I) => {return abap.compare.initial(${component}) === false;}`); } if ((concat.startsWith("NOT") && concat.endsWith("IS ASSIGNED")) || concat.endsWith("IS NOT ASSIGNED")) { return new chunk_1.Chunk(`(I) => {return abap.compare.assigned(${component}) === false;}`); } else if (concat.endsWith("IS ASSIGNED")) { return new chunk_1.Chunk(`(I) => {return abap.compare.assigned(${component});}`); } return new chunk_1.Chunk("ComponentCompareTodo"); } } exports.ComponentCompareTranspiler = ComponentCompareTranspiler; //# sourceMappingURL=component_compare.js.map