@sudoo/marked
Version:
JavaScript & TypeScript code runner in JavaScript, safe with marked territory, asynchronous
46 lines (45 loc) • 2.29 kB
JavaScript
;
/**
* @author WMXPY
* @namespace Operation_BinaryExpression
* @description Perform
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.performBinaryExpressionOnNumber = exports.createPerformBinaryExpressionOnNumber = exports.performBinaryExpressionOnNumberOrString = exports.createPerformBinaryExpressionOnNumberOrString = void 0;
const error_code_1 = require("../../declare/error-code");
const error_1 = require("../../util/error/error");
const bigint_1 = require("../../variable/sand-literal/bigint");
const createPerformBinaryExpressionOnNumberOrString = (action) => {
return (left, right) => {
return (0, exports.performBinaryExpressionOnNumberOrString)(left, right, action);
};
};
exports.createPerformBinaryExpressionOnNumberOrString = createPerformBinaryExpressionOnNumberOrString;
const performBinaryExpressionOnNumberOrString = (left, right, action) => {
if (left instanceof bigint_1.SandLiteralBigInt
|| right instanceof bigint_1.SandLiteralBigInt) {
const result = action(bigint_1.SandLiteralBigInt.resolve(left), bigint_1.SandLiteralBigInt.resolve(right));
return bigint_1.SandLiteralBigInt.create(result.toString());
}
return action(left, right);
};
exports.performBinaryExpressionOnNumberOrString = performBinaryExpressionOnNumberOrString;
const createPerformBinaryExpressionOnNumber = (action) => {
return (left, right) => {
return (0, exports.performBinaryExpressionOnNumber)(left, right, action);
};
};
exports.createPerformBinaryExpressionOnNumber = createPerformBinaryExpressionOnNumber;
const performBinaryExpressionOnNumber = (left, right, action) => {
if (left instanceof bigint_1.SandLiteralBigInt
|| right instanceof bigint_1.SandLiteralBigInt) {
const result = action(bigint_1.SandLiteralBigInt.resolve(left), bigint_1.SandLiteralBigInt.resolve(right));
return bigint_1.SandLiteralBigInt.create(result.toString());
}
if (typeof left !== "number"
|| typeof right !== "number") {
throw (0, error_1.error)(error_code_1.ERROR_CODE.CANNOT_PERFORM_ACTION_ON_NON_NUMBER, `${left} & ${right}`);
}
return action(left, right);
};
exports.performBinaryExpressionOnNumber = performBinaryExpressionOnNumber;