@sudoo/marked
Version:
JavaScript & TypeScript code runner in JavaScript, safe with marked territory, asynchronous
54 lines (53 loc) • 1.95 kB
JavaScript
;
/**
* @author WMXPY
* @namespace Operation
* @description Unary
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.getUnaryOperation = void 0;
const error_code_1 = require("../declare/error-code");
const error_1 = require("../util/error/error");
const sand_class_1 = require("../variable/sand-class/sand-class");
const sand_class_instance_1 = require("../variable/sand-class/sand-class-instance");
const sand_function_1 = require("../variable/sand-function/sand-function");
const sand_list_1 = require("../variable/sand-list");
const sand_map_1 = require("../variable/sand-map");
const getUnaryOperation = (symbol) => {
switch (symbol) {
case "!": return (value) => !Boolean(value);
case "+": return null;
case "-": return (value) => {
if (typeof value === "number" && !isNaN(value)) {
return value * -1;
}
throw (0, error_1.error)(error_code_1.ERROR_CODE.NEGATIVE_UNARY_ONLY_AVAILABLE_FOR_VALID_NUMBER, symbol);
};
case "delete": return null;
case "typeof": return (value) => {
if (value === null) {
return "null";
}
if (value instanceof sand_class_1.SandClass) {
return "class";
}
if (value instanceof sand_class_instance_1.SandClassInstance) {
return "class-instance";
}
if (value instanceof sand_function_1.SandFunction) {
return "function";
}
if (value instanceof sand_list_1.SandList) {
return "array";
}
if (value instanceof sand_map_1.SandMap) {
return "object";
}
return typeof value;
};
case "void": return () => undefined;
case "~": return null;
}
return null;
};
exports.getUnaryOperation = getUnaryOperation;