ifc-expressions
Version:
Parsing and evaluation of IFC expressions
40 lines (39 loc) • 1.98 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.CompareMagnitudes = void 0;
const Func_js_1 = require("../Func.js");
const FuncArgAny_js_1 = require("../arg/FuncArgAny.js");
const ExprEvalResult_js_1 = require("../../ExprEvalResult.js");
const Comparable_js_1 = require("../../../value/Comparable.js");
const ExprKind_js_1 = require("../../ExprKind.js");
const BooleanValue_js_1 = require("../../../value/BooleanValue.js");
const Types_js_1 = require("../../../type/Types.js");
class CompareMagnitudes extends Func_js_1.Func {
constructor(name, cmp) {
super(name, [
new FuncArgAny_js_1.FuncArgAny(true, CompareMagnitudes.KEY_LEFT),
new FuncArgAny_js_1.FuncArgAny(true, CompareMagnitudes.KEY_RIGHT),
]);
this.comparisonFunction = cmp;
}
calculateResult(callingExpr, evaluatedArguments) {
const left = evaluatedArguments.get(CompareMagnitudes.KEY_LEFT);
const right = evaluatedArguments.get(CompareMagnitudes.KEY_RIGHT);
if (!(0, Comparable_js_1.isComparable)(left)) {
return new ExprEvalResult_js_1.ExprEvalTypeErrorObj(ExprKind_js_1.ExprKind.FUNCTION, "Cannot compare: left value is not comparable", left, callingExpr.getTextSpan());
}
if (!(0, Comparable_js_1.isComparable)(right)) {
return new ExprEvalResult_js_1.ExprEvalTypeErrorObj(ExprKind_js_1.ExprKind.FUNCTION, "Cannot compare: right value is not comparable", right, callingExpr.getTextSpan());
}
// @ts-ignore
const cmpValue = this.comparisonFunction(left.compareTo(right));
return new ExprEvalResult_js_1.ExprEvalSuccessObj(BooleanValue_js_1.BooleanValue.of(cmpValue));
}
getReturnType(argumentTypes) {
return Types_js_1.Type.BOOLEAN;
}
}
exports.CompareMagnitudes = CompareMagnitudes;
CompareMagnitudes.KEY_LEFT = "left";
CompareMagnitudes.KEY_RIGHT = "right";
//# sourceMappingURL=CompareMagnitudes.js.map