UNPKG

@abaplint/runtime

Version:
155 lines • 5.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.assign = assign; const types_1 = require("../types"); function assign(input) { // console.dir(input); if (input.dynamicName) { if (input.dynamicSource instanceof types_1.FieldSymbol) { input.dynamicSource = input.dynamicSource.getPointer(); } input.dynamicName = input.dynamicName.trimEnd(); if (input.dynamicName.includes("->")) { if (input.dynamicSource instanceof types_1.ABAPObject || input.dynamicSource instanceof types_1.DataReference) { const split = input.dynamicName.split(/->|-/); split.shift(); for (const s of split) { if (s === "*") { // @ts-ignore input.dynamicSource = input.dynamicSource.dereference(); } else { // @ts-ignore const source = input.dynamicSource.get(); if (source === undefined) { // @ts-ignore abap.builtin.sy.get().subrc.set(4); return; } input.dynamicSource = source[s.toLowerCase().replace(/[~\\/]/g, "$")]; } } } else { // @ts-ignore abap.builtin.sy.get().subrc.set(4); return; } } else if (input.dynamicName.includes("=>")) { const split = input.dynamicName.split("=>"); // @ts-ignore const clas = abap.Classes[split[0].toUpperCase()]; if (clas === undefined) { // @ts-ignore abap.builtin.sy.get().subrc.set(4); return; } if (clas[split[1].toLowerCase()] !== undefined) { input.target.assign(clas[split[1].toLowerCase()]); // @ts-ignore abap.builtin.sy.get().subrc.set(0); return; } else if (clas[split[0].toLowerCase() + "$" + split[1].toLowerCase()] !== undefined) { input.target.assign(clas[split[0].toLowerCase() + "$" + split[1].toLowerCase()]); // @ts-ignore abap.builtin.sy.get().subrc.set(0); return; } } if (input.dynamicSource) { input.target.assign(input.dynamicSource); // @ts-ignore abap.builtin.sy.get().subrc.set(0); } else { // @ts-ignore abap.builtin.sy.get().subrc.set(4); } } else if (input.component) { if (input.source instanceof types_1.FieldSymbol || input.source instanceof types_1.DataReference) { input.source = input.source.getPointer(); assign(input); return; } else if (!(input.source instanceof types_1.Structure) && !(input.source instanceof types_1.Table)) { // @ts-ignore abap.builtin.sy.get().subrc.set(4); return; } let component = input.component; if (typeof component !== "string") { component = component.get(); } if (input.source instanceof types_1.Table) { if (input.source.getOptions()?.withHeader === true) { input.source = input.source.getHeader(); } else { // result is the table itself, no change of input.source } } let result = undefined; if (typeof component === "number") { if (component === 0) { result = input.source; } else if (input.source instanceof types_1.Structure) { const structure_as_object = input.source.get(); const keys = Object.keys(structure_as_object); const component_name = keys[component - 1]; result = structure_as_object[component_name]; } } else if (!(input.source instanceof types_1.Table)) { const split = component.toLowerCase().trimEnd().split("-"); result = input.source; for (const s of split) { result = result.get()[s]; } } if (result === undefined) { // not a field in the structure // @ts-ignore abap.builtin.sy.get().subrc.set(4); } else { input.target.assign(result); // @ts-ignore abap.builtin.sy.get().subrc.set(0); } } else { // console.dir(input); if (input.source instanceof types_1.FieldSymbol) { const pnt = input.source.getPointer(); if (pnt === undefined) { throw new Error("GETWA_NOT_ASSIGNED"); } input.target.assign(pnt); // @ts-ignore abap.builtin.sy.get().subrc.set(0); } else if (input.source === undefined) { // @ts-ignore abap.builtin.sy.get().subrc.set(4); } else { if (input.source instanceof types_1.Table && input.source.getOptions()?.withHeader === true) { input.target.assign(input.source.getHeader()); } else { if (input.casting) { input.target.setCasting(); } input.target.assign(input.source); } // @ts-ignore abap.builtin.sy.get().subrc.set(0); } } } //# sourceMappingURL=assign.js.map