UNPKG

@abaplint/runtime

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