@abaplint/transpiler
Version:
71 lines • 3.41 kB
JavaScript
;
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);
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