@abaplint/runtime
Version:
Transpiler - Runtime
53 lines • 2.46 kB
JavaScript
;
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 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) && Number.isInteger(Number(left.get())) && 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) && Number.isInteger(Number(right)) && left instanceof types_1.Integer) {
return new types_1.Integer().set(left.get() + 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