ifc-expressions
Version:
Parsing and evaluation of IFC expressions
38 lines (37 loc) • 2.07 kB
JavaScript
;
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