@abaplint/transpiler
Version:
76 lines • 3.71 kB
JavaScript
;
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