UNPKG

@abaplint/transpiler

Version:
72 lines 3.48 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.AppendTranspiler = void 0; const abaplint = require("@abaplint/core"); const chunk_1 = require("../chunk"); class AppendTranspiler { transpile(node, traversal) { const concat = node.concatTokens().toUpperCase(); const t = node.findDirectExpression(abaplint.Expressions.Target); let target = undefined; if (t) { target = traversal.traverse(t); } if (concat.includes("INITIAL LINE") && target) { const assigning = node.findExpressionAfterToken("ASSIGNING"); const into = node.findExpressionAfterToken("INTO"); if (assigning) { const found = assigning.findFirstExpression(abaplint.Expressions.FieldSymbol); const fs = traversal.traverse(found).getCode(); return new chunk_1.Chunk(fs + ".assign(" + target.getCode() + ".appendInitial());"); } else if (into) { const ref = traversal.traverse(into).getCode(); return new chunk_1.Chunk(ref + ".assign(" + target.getCode() + ".appendInitial());"); } else { return new chunk_1.Chunk(target.getCode() + ".appendInitial();"); } } else { const options = []; const s = node.findDirectExpression(abaplint.Expressions.SimpleSource4) || node.findDirectExpression(abaplint.Expressions.Source); if (s) { const option = new chunk_1.Chunk().appendString("source: "); option.appendChunk(traversal.traverse(s)); options.push(option); } const assigning = node.findExpressionAfterToken("ASSIGNING"); if (assigning) { const option = new chunk_1.Chunk().appendString("assigning: "); option.appendChunk(traversal.traverse(assigning.findFirstExpression(abaplint.Expressions.FieldSymbol))); options.push(option); } const referenceInto = node.findExpressionAfterToken("INTO"); if (referenceInto && referenceInto.get() instanceof abaplint.Expressions.Target) { options.push(new chunk_1.Chunk().appendString("referenceInto: " + traversal.traverse(referenceInto).getCode())); } const to = node.findExpressionAfterToken("TO"); if (to && to.get() instanceof abaplint.Expressions.Source) { options.push(new chunk_1.Chunk().appendString("to: " + traversal.traverse(to).getCode())); } const from = node.findExpressionAfterToken("FROM"); if (from) { options.push(new chunk_1.Chunk().appendString("from: " + traversal.traverse(from).getCode())); } if (concat.startsWith("APPEND LINES OF ")) { options.push(new chunk_1.Chunk().appendString("lines: true")); } if (target) { options.push(new chunk_1.Chunk().appendString("target: ").appendChunk(target)); } const ret = new chunk_1.Chunk(); ret.append("abap.statements.append({", node, traversal); ret.join(options); ret.append("});", node.getLastToken(), traversal); return ret; } } } exports.AppendTranspiler = AppendTranspiler; //# sourceMappingURL=append.js.map