UNPKG

@abaplint/transpiler

Version:
76 lines 3.71 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CreateDataTranspiler = void 0; const abaplint = require("@abaplint/core"); const chunk_1 = require("../chunk"); const expressions_1 = require("../expressions"); const transpile_types_1 = require("../transpile_types"); class CreateDataTranspiler { transpile(node, traversal) { const targetNode = node.findDirectExpression(abaplint.Expressions.Target); const target = traversal.traverse(targetNode); const concat = node.concatTokens().toUpperCase(); const options = []; let dynamic = node.findDirectExpression(abaplint.Expressions.Dynamic)?.findFirstExpression(abaplint.Expressions.ConstantString); if (dynamic) { options.push(`"name": ` + dynamic.getFirstToken().getStr()); } else { dynamic = node.findDirectExpression(abaplint.Expressions.Dynamic)?.findFirstExpression(abaplint.Expressions.FieldChain); if (dynamic) { options.push(`"name": ` + new expressions_1.FieldChainTranspiler(true).transpile(dynamic, traversal).getCode()); } } const typeNameNode = node.findDirectExpression(abaplint.Expressions.TypeName); if (typeNameNode) { const id = traversal.findCurrentScopeByToken(typeNameNode.getFirstToken())?.findType(typeNameNode.concatTokens()); if (id) { options.push(`"type": ` + new transpile_types_1.TranspileTypes().toType(id.getType())); } else { options.push(`"typeName": "${typeNameNode.concatTokens().toUpperCase()}"`); } } if (node.findDirectTokenByText("TABLE")) { options.push(`"table": true`); } if (concat.includes(" LIKE LINE OF ")) { const so = traversal.traverse(node.findDirectExpression(abaplint.Expressions.Source)); options.push(`"likeLineOf": ` + so.getCode()); } else if (concat.includes(" LIKE ")) { const so = traversal.traverse(node.findDirectExpression(abaplint.Expressions.Source)); options.push(`"like": ` + so.getCode()); } if (concat.includes(" TYPE LINE OF ")) { options.push(`"typeLineOf": true`); } if (concat.includes(" REF TO ")) { options.push(`"refTo": true`); } const handle = node.findExpressionAfterToken("HANDLE"); if (handle) { const so = traversal.traverse(node.findDirectExpression(abaplint.Expressions.Source)); const lookup = traversal.lookupClassOrInterface("KERNEL_CREATE_DATA_HANDLE", node.getFirstToken()); const call = `await ${lookup}.call({handle: ${so.getCode()}, dref: ${target.getCode()}});`; return new chunk_1.Chunk().append(`if (${lookup} === undefined) throw new Error("CreateData, kernel class missing");\n${call}`, node, traversal); } const length = node.findExpressionAfterToken("LENGTH"); if (length) { const so = traversal.traverse(length); options.push(`"length": ` + so.getCode()); } const decimals = node.findExpressionAfterToken("DECIMALS"); if (decimals) { const so = traversal.traverse(decimals); options.push(`"decimals": ` + so.getCode()); } let add = ""; if (options.length > 0) { add = ",{" + options.join(",") + "}"; } return new chunk_1.Chunk("abap.statements.createData(" + target.getCode() + add + ");"); } } exports.CreateDataTranspiler = CreateDataTranspiler; //# sourceMappingURL=create_data.js.map