UNPKG

@abaplint/transpiler

Version:
89 lines 4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.MoveTranspiler = void 0; const abaplint = require("@abaplint/core"); const chunk_1 = require("../chunk"); class MoveTranspiler { transpile(node, traversal) { const sourceExpression = node.findDirectExpression(abaplint.Expressions.Source); const targets = []; const targetExpressions = node.findDirectExpressions(abaplint.Expressions.Target); for (const t of targetExpressions) { targets.push(traversal.traverse(t)); } const ret = new chunk_1.Chunk(); if (targetExpressions.length === 1 && sourceExpression?.getChildren().length === 1 && sourceExpression.findDirectExpression(abaplint.Expressions.StringTemplate) && sourceExpression.concatTokens().toUpperCase().endsWith(" ALPHA = IN }|") && sourceExpression.concatTokens().toUpperCase().startsWith("|{")) { const target = targets[0].getCode(); const tSource = traversal.traverse(sourceExpression.findFirstExpression(abaplint.Expressions.StringTemplateSource)?.findDirectExpression(abaplint.Expressions.Source)); ret.appendString(target + `.set(abap.alphaIn(${tSource.getCode()}, ${target}, ${target}));`); return ret; } let source = traversal.traverse(sourceExpression); const second = node.getChildren()[1]?.concatTokens(); switch (second) { case "?=": ret.appendString("await abap.statements.cast(") .appendChunk(targets[0]) .appendString(", ") .appendChunk(source) .append(");", node.getLastToken(), traversal); break; case "+": ret.appendChunk(targets[0]) .appendString(".set(abap.operators.add(") .appendChunk(targets[0]) .appendString(", ") .appendChunk(source) .append("));", node.getLastToken(), traversal); break; case "-": ret.appendChunk(targets[0]) .appendString(".set(abap.operators.minus(") .appendChunk(targets[0]) .appendString(", ") .appendChunk(source) .append("));", node.getLastToken(), traversal); break; case "/=": ret.appendChunk(targets[0]) .appendString(".set(abap.operators.divide(") .appendChunk(targets[0]) .appendString(", ") .appendChunk(source) .append("));", node.getLastToken(), traversal); break; case "*=": ret.appendChunk(targets[0]) .appendString(".set(abap.operators.multiply(") .appendChunk(targets[0]) .appendString(", ") .appendChunk(source) .append("));", node.getLastToken(), traversal); break; case "&&=": ret.appendChunk(targets[0]) .appendString(".set(abap.operators.concat(") .appendChunk(targets[0]) .appendString(", ") .appendChunk(source) .append("));", node.getLastToken(), traversal); break; default: for (const target of targets.reverse()) { ret.appendChunk(target) .appendString(".set(") .appendChunk(source) .append(");", node.getLastToken(), traversal); source = target; } break; } return ret; } } exports.MoveTranspiler = MoveTranspiler; //# sourceMappingURL=move.js.map