UNPKG

@abaplint/transpiler

Version:
51 lines 2.38 kB
"use strict"; 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