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