UNPKG

ifc-expressions

Version:

Parsing and evaluation of IFC expressions

36 lines (35 loc) 1.61 kB
import { Func } from "../Func.js"; import { FuncArgAny } from "../arg/FuncArgAny.js"; import { ExprEvalSuccessObj, ExprEvalTypeErrorObj, } from "../../ExprEvalResult.js"; import { isComparable } from "../../../value/Comparable.js"; import { ExprKind } from "../../ExprKind.js"; import { BooleanValue } from "../../../value/BooleanValue.js"; import { Type } from "../../../type/Types.js"; export class CompareMagnitudes extends Func { constructor(name, cmp) { super(name, [ new FuncArgAny(true, CompareMagnitudes.KEY_LEFT), new 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 (!isComparable(left)) { return new ExprEvalTypeErrorObj(ExprKind.FUNCTION, "Cannot compare: left value is not comparable", left, callingExpr.getTextSpan()); } if (!isComparable(right)) { return new ExprEvalTypeErrorObj(ExprKind.FUNCTION, "Cannot compare: right value is not comparable", right, callingExpr.getTextSpan()); } // @ts-ignore const cmpValue = this.comparisonFunction(left.compareTo(right)); return new ExprEvalSuccessObj(BooleanValue.of(cmpValue)); } getReturnType(argumentTypes) { return Type.BOOLEAN; } } CompareMagnitudes.KEY_LEFT = "left"; CompareMagnitudes.KEY_RIGHT = "right"; //# sourceMappingURL=CompareMagnitudes.js.map