UNPKG

ifc-expressions

Version:

Parsing and evaluation of IFC expressions

36 lines (35 loc) 1.56 kB
import { Func } from "../Func.js"; import { ExprEvalFunctionEvaluationErrorObj, ExprEvalStatus, ExprEvalSuccessObj, isExprEvalError, } from "../../ExprEvalResult.js"; import { Type } from "../../../type/Types.js"; import { LogicalValue } from "../../../value/LogicalValue.js"; import { FuncArgBoolean } from "../arg/FuncArgBoolean.js"; export class TOLOGICAL extends Func { constructor() { super("TOLOGICAL", [new FuncArgBoolean(true, "object")]); } transformArguments(callingExpr, evaluatedArguments) { const val = evaluatedArguments.get(TOLOGICAL.KEY_OBJECT); if (isExprEvalError(val)) { if (val.status === ExprEvalStatus.IFC_PROPERTY_NOT_FOUND) { evaluatedArguments.set(TOLOGICAL.KEY_OBJECT, new ExprEvalSuccessObj(LogicalValue.unknown())); } } else { evaluatedArguments.set(TOLOGICAL.KEY_OBJECT, new ExprEvalSuccessObj(LogicalValue.of(val.result.getValue()))); } } calculateResult(callingExpr, evaluatedArguments) { const val = evaluatedArguments.get(TOLOGICAL.KEY_OBJECT); try { return new ExprEvalSuccessObj(val); } catch (e) { return new ExprEvalFunctionEvaluationErrorObj(callingExpr.getKind(), ExprEvalStatus.ERROR, `Cannot convert ${val.getValue()} to boolean: ${e.message}`, this.name, callingExpr.getTextSpan()); } } getReturnType(argumentTypes) { return Type.LOGICAL; } } TOLOGICAL.KEY_OBJECT = "object"; //# sourceMappingURL=TOLOGICAL.js.map