UNPKG

ifc-expressions

Version:

Parsing and evaluation of IFC expressions

34 lines (33 loc) 1.78 kB
import { Func } from "../Func.js"; import { ExprEvalFunctionEvaluationObjectNotFoundErrorObj, ExprEvalStatus, ExprEvalSuccessObj, ExprEvalTypeErrorObj, } from "../../ExprEvalResult.js"; import { ObjectAccessorValue } from "../../../value/ObjectAccessorValue.js"; import { ExprKind } from "../../ExprKind.js"; import { FuncArgObjectAccessor } from "../arg/FuncArgObjectAccessor.js"; import { isNullish } from "../../../util/IfcExpressionUtils.js"; import { Type } from "../../../type/Types.js"; export class TYPE extends Func { constructor() { super("TYPE", [ new FuncArgObjectAccessor(true, TYPE.KEY_OBJECT_REF, Type.IFC_ELEMENT_REF), ]); } getReturnType(argumentTypes) { return Type.IFC_TYPE_OBJECT_REF; } calculateResult(callingExpr, evaluatedArguments) { const objectRef = evaluatedArguments.get(TYPE.KEY_OBJECT_REF).getValue(); const accessorFun = objectRef["getIfcTypeObjectAccessor"]; if (typeof accessorFun === "function") { const resultingObjectAccessor = accessorFun.call(objectRef); if (isNullish(resultingObjectAccessor)) { return new ExprEvalFunctionEvaluationObjectNotFoundErrorObj(ExprKind.FUNCTION, ExprEvalStatus.IFC_TYPE_OBJECT_NOT_FOUND, `No type object found`, this.getName(), "[Type of IFC element]", callingExpr.getTextSpan()); } else { return new ExprEvalSuccessObj(ObjectAccessorValue.of(resultingObjectAccessor)); } } return new ExprEvalTypeErrorObj(ExprKind.FUNCTION_ARGUMENTS, `Cannot evaluate function ${this.getName()} on the specified object`, objectRef, callingExpr.getTextSpan()); } } TYPE.KEY_OBJECT_REF = "objectRef"; //# sourceMappingURL=TYPE.js.map