ifc-expressions
Version:
Parsing and evaluation of IFC expressions
52 lines (51 loc) • 2.58 kB
JavaScript
"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