ifc-expressions
Version:
Parsing and evaluation of IFC expressions
34 lines (33 loc) • 1.78 kB
JavaScript
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