UNPKG

ifc-expressions

Version:

Parsing and evaluation of IFC expressions

40 lines (39 loc) 1.51 kB
import { Func } from "../Func.js"; import { ExprEvalStatus, ExprEvalSuccessObj, isExprEvalError, } from "../../ExprEvalResult.js"; import { Type } from "../../../type/Types.js"; import { BooleanValue } from "../../../value/BooleanValue.js"; import { FuncArgObjectAccessor } from "../arg/FuncArgObjectAccessor.js"; export class EXISTS extends Func { constructor() { super("EXISTS", [ new FuncArgObjectAccessor(true, EXISTS.KEY_OBJECT, Type.IFC_OBJECT_REF), ]); } getReturnType(argumentTypes) { return Type.BOOLEAN; } calculateResult(callingExpr, evaluatedArguments) { return undefined; // does not get called } evaluate(callingExpr, funcArgs) { const args = this.getArgumentValues(callingExpr, funcArgs); if (isExprEvalError(args)) { return args; } const arg = args.get(EXISTS.KEY_OBJECT); if (isExprEvalError(arg)) { if (arg.status === ExprEvalStatus.NOT_FOUND || arg.status === ExprEvalStatus.IFC_PROPERTY_NOT_FOUND || arg.status === ExprEvalStatus.IFC_TYPE_OBJECT_NOT_FOUND || arg.status === ExprEvalStatus.IFC_PROPERTY_SET_NOT_FOUND) { return new ExprEvalSuccessObj(BooleanValue.of(false)); } else { return arg; } } return new ExprEvalSuccessObj(BooleanValue.of(true)); } } EXISTS.KEY_OBJECT = "object"; //# sourceMappingURL=EXISTS.js.map