@abaplint/transpiler
Version:
51 lines • 2.38 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ComponentChainSimpleTranspiler = void 0;
const core_1 = require("@abaplint/core");
const chunk_1 = require("../chunk");
const traversal_1 = require("../traversal");
const field_length_1 = require("./field_length");
const field_offset_1 = require("./field_offset");
class ComponentChainSimpleTranspiler {
constructor(prefix = "") {
this.prefix = "";
this.prefix = prefix;
}
transpile(node, traversal) {
const offset = [];
let ret = new chunk_1.Chunk();
for (const c of node.getChildren()) {
const type = c.get();
if (type instanceof core_1.Expressions.ComponentName) {
let field = c.getFirstToken().getStr().toLowerCase();
const interfaceName = traversal.isInterfaceAttribute(c.getFirstToken());
if (interfaceName && field.startsWith(interfaceName) === false) {
field = interfaceName + "$" + field;
}
field = traversal_1.Traversal.escapeNamespace(field).replace("~", "$");
ret.append(this.prefix + field, c, traversal);
this.prefix = "";
}
else if (type instanceof core_1.Expressions.ArrowOrDash) {
ret.append(".get().", c, traversal);
}
else if (c instanceof core_1.Nodes.ExpressionNode && c.get() instanceof core_1.Expressions.FieldOffset) {
offset.push("offset: " + new field_offset_1.FieldOffsetTranspiler().transpile(c, traversal).getCode());
}
else if (c instanceof core_1.Nodes.ExpressionNode && c.get() instanceof core_1.Expressions.FieldLength) {
const len = new field_length_1.FieldLengthTranspiler().transpile(c, traversal).getCode();
if (len !== "*") {
offset.push("length: " + len);
}
}
}
if (offset.length > 0) {
const pre = "new abap.OffsetLength(";
const post = ", {" + offset.join(", ") + "})";
ret = new chunk_1.Chunk().appendString(pre).appendChunk(ret).appendString(post);
}
return ret;
}
}
exports.ComponentChainSimpleTranspiler = ComponentChainSimpleTranspiler;
//# sourceMappingURL=component_chain_simple.js.map