@abaplint/runtime
Version:
Transpiler - Runtime
92 lines • 2.53 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.DataReference = void 0;
const string_1 = require("./string");
const _parse_1 = require("../operators/_parse");
const field_symbol_1 = require("./field_symbol");
class DataReference {
constructor(type) {
this.pointer = undefined;
this.type = type;
}
clone() {
const n = new DataReference(this.type);
n.pointer = this.pointer;
return n;
}
getType() {
return this.type;
}
assign(pointer) {
this.pointer = pointer;
}
unassign() {
this.pointer = undefined;
}
getPointer() {
return this.pointer;
}
dereference() {
return this.pointer;
}
///////////////
clear() {
this.unassign();
// return this.pointer?.clear();
}
get() {
if (this.pointer === this) {
throw "Cyclic data reference";
}
// @ts-ignore
return this.pointer?.get();
}
array() {
// @ts-ignore
return this.pointer?.array();
}
getArrayLength() {
// @ts-ignore
return this.pointer?.getArrayLength();
}
set(value) {
if (value instanceof DataReference) {
this.pointer = value.getPointer();
return this;
}
else if (value instanceof field_symbol_1.FieldSymbol) {
if (value.getPointer() === undefined) {
throw new Error("GETWA_NOT_ASSIGNED");
}
else if (value.getPointer() instanceof DataReference) {
this.pointer = value.getPointer().getPointer();
return this;
}
else {
throw new Error("OBJECTS_MOVE_NOT_SUPPORTED");
}
}
return this.pointer?.set(value);
}
getOffset(input) {
if (input?.offset) {
input.offset = (0, _parse_1.parse)(input.offset);
}
if (input?.length) {
input.length = (0, _parse_1.parse)(input.length);
}
// Assuming we're interested in Strings here, for now...
let ret = this.get();
if (input?.offset) {
ret = ret.substr(input.offset);
}
if (input?.length !== undefined) {
ret = ret.substr(0, input.length);
}
const r = new string_1.String();
r.set(ret);
return r;
}
}
exports.DataReference = DataReference;
//# sourceMappingURL=data_reference.js.map