UNPKG

ifc-expressions

Version:

Parsing and evaluation of IFC expressions

52 lines (51 loc) 2.58 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Expr2LeftBeforeRight = void 0; const ExprBase_js_1 = require("./ExprBase.js"); const ExprEvalResult_js_1 = require("./ExprEvalResult.js"); const IfcExpressionUtils_js_1 = require("../util/IfcExpressionUtils.js"); class Expr2LeftBeforeRight extends ExprBase_js_1.ExprBase { constructor(exprKind, left, right) { super(exprKind); this.left = left; this.right = right; } getChildren() { return [this.left, this.right]; } evaluate(ctx, localCtx) { const leftResult = this.left.evaluate(ctx, localCtx); if ((0, IfcExpressionUtils_js_1.isNullish)(leftResult)) { return new ExprEvalResult_js_1.ExprEvalErrorUndefinedResult(this.left.getKind(), this.getTextSpan()); } this.handleLeftResult(leftResult); const rightResult = this.right.evaluate(ctx, localCtx); if ((0, IfcExpressionUtils_js_1.isNullish)(leftResult) || (0, IfcExpressionUtils_js_1.isNullish)(rightResult)) { return new ExprEvalResult_js_1.ExprEvalError2Obj(this.getKind(), (0, IfcExpressionUtils_js_1.isNullish)(leftResult) ? new ExprEvalResult_js_1.ExprEvalErrorUndefinedResult(this.left.getKind()) : leftResult, (0, IfcExpressionUtils_js_1.isNullish)(rightResult) ? new ExprEvalResult_js_1.ExprEvalErrorUndefinedResult(this.right.getKind()) : rightResult, ExprEvalResult_js_1.ExprEvalStatus.MISSING_OPERAND, undefined, this.getTextSpan()); } if ((0, ExprEvalResult_js_1.isExprEvalSuccess)(leftResult) && (0, ExprEvalResult_js_1.isExprEvalSuccess)(rightResult)) { try { const result = this.doEvaluate(ctx, leftResult.result, rightResult.result); return this.wrapInResultIfNecessary(result); } catch (error) { return this.handleError(error, leftResult, rightResult); } } else if ((0, ExprEvalResult_js_1.isExprEvalError)(leftResult)) { return leftResult; } else if ((0, ExprEvalResult_js_1.isExprEvalError)(rightResult)) { return rightResult; } } handleError(error, leftResult, rightResult) { return new ExprEvalResult_js_1.ExprEvalError2Obj(this.getKind(), leftResult, rightResult, ExprEvalResult_js_1.ExprEvalStatus.ERROR, error, this.getTextSpan()); } } exports.Expr2LeftBeforeRight = Expr2LeftBeforeRight; //# sourceMappingURL=Expr2LeftBeforeRight.js.map