UNPKG

@abaplint/runtime

Version:
62 lines 2.93 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.add = add; const types_1 = require("../types"); const string_1 = require("../types/string"); const _parse_1 = require("./_parse"); function isIntegerCharacter(value) { return value.get().trim().length > 0 && Number.isInteger(Number(value.get())); } function add(left, right) { if (left instanceof types_1.Integer && right instanceof types_1.Integer) { return new types_1.Integer().set(left.get() + right.get()); } else if (typeof left === "number" && typeof right === "number" && Number.isInteger(left) && Number.isInteger(right)) { return new types_1.Integer().set(left + right); } else if (typeof left === "number" && Number.isInteger(left) && right instanceof types_1.Integer) { return new types_1.Integer().set(left + right.get()); } else if (typeof right === "number" && Number.isInteger(right) && left instanceof types_1.Integer) { return new types_1.Integer().set(left.get() + right); } else if ((left instanceof string_1.String || left instanceof types_1.Character) && isIntegerCharacter(left) && right instanceof types_1.Integer) { return new types_1.Integer().set(Number.parseInt(left.get(), 10) + right.get()); } else if ((right instanceof string_1.String || right instanceof types_1.Character) && isIntegerCharacter(right) && left instanceof types_1.Integer) { return new types_1.Integer().set(left.get() + Number.parseInt(right.get(), 10)); } else if ((left instanceof string_1.String || left instanceof types_1.Character) && (right instanceof string_1.String || right instanceof types_1.Character) && isIntegerCharacter(left) && isIntegerCharacter(right)) { return new types_1.Integer().set(Number.parseInt(left.get(), 10) + Number.parseInt(right.get(), 10)); } else if (left instanceof types_1.Integer8) { if (right instanceof types_1.Integer8) { return new types_1.Integer8().set(left.get() + right.get()); } else { return new types_1.Integer8().set(left.get() + BigInt((0, _parse_1.parse)(right))); } } else if (right instanceof types_1.Integer8) { return new types_1.Integer8().set(BigInt((0, _parse_1.parse)(left)) + right.get()); } if (left instanceof types_1.FieldSymbol) { if (left.getPointer() === undefined) { throw new Error("GETWA_NOT_ASSIGNED"); } return add(left.getPointer(), right); } if (right instanceof types_1.FieldSymbol) { if (right.getPointer() === undefined) { throw new Error("GETWA_NOT_ASSIGNED"); } return add(left, right.getPointer()); } const ret = new types_1.Float().set((0, _parse_1.parse)(left) + (0, _parse_1.parse)(right)); return ret; } //# sourceMappingURL=add.js.map