UNPKG

ifc-expressions

Version:

Parsing and evaluation of IFC expressions

61 lines (60 loc) 2.64 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Expr2 = 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 Expr2 extends ExprBase_js_1.ExprBase { constructor(exprKind, left, right) { super(exprKind); this.left = left; this.right = right; } getChildren() { return [this.left, this.right]; } onBeforeRecursion(ctx, localCtx) { // override if subclass needs to do something before recursing } onAfterLeftRecursion(ctx, localCtx, leftResult) { // override if subclass needs to do something with the left result, such as put it in the local context } evaluate(ctx, localCtx) { this.onBeforeRecursion(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.left.getTextSpan()); } if ((0, ExprEvalResult_js_1.isExprEvalError)(leftResult)) { return this.makeErrorForLeftSubExprError(ctx, localCtx, leftResult); } this.onAfterLeftRecursion(ctx, localCtx, leftResult.result); const rightResult = this.right.evaluate(ctx, localCtx); if ((0, IfcExpressionUtils_js_1.isNullish)(rightResult)) { return new ExprEvalResult_js_1.ExprEvalErrorUndefinedResult(this.right.getKind(), this.getTextSpan()); } if ((0, ExprEvalResult_js_1.isExprEvalSuccess)(rightResult)) { try { const result = this.calculateResult(ctx, localCtx, leftResult.result, rightResult.result); return this.wrapInResultIfNecessary(result); } catch (error) { return this.handleError(error, leftResult, rightResult); } } else { return this.makeResultForRightSubExprError(ctx, localCtx, leftResult, rightResult); } } makeResultForRightSubExprError(ctx, localCtx, leftResult, rightResult) { return rightResult; } makeErrorForLeftSubExprError(ctx, localCtx, leftResult) { return leftResult; } handleError(error, leftResult, rightResult) { return new ExprEvalResult_js_1.ExprEvalError2Obj(this.getKind(), leftResult, rightResult, ExprEvalResult_js_1.ExprEvalStatus.ERROR, error, this.getTextSpan()); } } exports.Expr2 = Expr2; //# sourceMappingURL=Expr2.js.map