UNPKG

ifc-expressions

Version:

Parsing and evaluation of IFC expressions

38 lines (37 loc) 2.07 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.TYPE = void 0; const Func_js_1 = require("../Func.js"); const ExprEvalResult_js_1 = require("../../ExprEvalResult.js"); const ObjectAccessorValue_js_1 = require("../../../value/ObjectAccessorValue.js"); const ExprKind_js_1 = require("../../ExprKind.js"); const FuncArgObjectAccessor_js_1 = require("../arg/FuncArgObjectAccessor.js"); const IfcExpressionUtils_js_1 = require("../../../util/IfcExpressionUtils.js"); const Types_js_1 = require("../../../type/Types.js"); class TYPE extends Func_js_1.Func { constructor() { super("TYPE", [ new FuncArgObjectAccessor_js_1.FuncArgObjectAccessor(true, TYPE.KEY_OBJECT_REF, Types_js_1.Type.IFC_ELEMENT_REF), ]); } getReturnType(argumentTypes) { return Types_js_1.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 ((0, IfcExpressionUtils_js_1.isNullish)(resultingObjectAccessor)) { return new ExprEvalResult_js_1.ExprEvalFunctionEvaluationObjectNotFoundErrorObj(ExprKind_js_1.ExprKind.FUNCTION, ExprEvalResult_js_1.ExprEvalStatus.IFC_TYPE_OBJECT_NOT_FOUND, `No type object found`, this.getName(), "[Type of IFC element]", callingExpr.getTextSpan()); } else { return new ExprEvalResult_js_1.ExprEvalSuccessObj(ObjectAccessorValue_js_1.ObjectAccessorValue.of(resultingObjectAccessor)); } } return new ExprEvalResult_js_1.ExprEvalTypeErrorObj(ExprKind_js_1.ExprKind.FUNCTION_ARGUMENTS, `Cannot evaluate function ${this.getName()} on the specified object`, objectRef, callingExpr.getTextSpan()); } } exports.TYPE = TYPE; TYPE.KEY_OBJECT_REF = "objectRef"; //# sourceMappingURL=TYPE.js.map