UNPKG

ifc-expressions

Version:

Parsing and evaluation of IFC expressions

49 lines (48 loc) 1.68 kB
import { ExprEvalConsequentialError1Obj, ExprEvalSuccessObj, isExprEvalError, } from "./ExprEvalResult.js"; import { TextSpan } from "../util/TextSpan.js"; import { isNullish } from "../util/IfcExpressionUtils.js"; import { ExprStringBuilder } from "./ExprStringBuilder.js"; export class ExprBase { constructor(exprKind) { this.exprKind = exprKind; } setTextSpan(ctx) { this.textSpan = ctx; } getTextSpan() { return this.textSpan; } getKind() { return this.exprKind; } wrapInResultIfNecessary(result) { if (isExprEvalError(result)) { if (!this.hasTextSpan(result)) { return new ExprEvalConsequentialError1Obj(this.getKind(), result, undefined, this.getTextSpan()); } return result; } return new ExprEvalSuccessObj(result); } hasTextSpan(error) { if (!isNullish(error["textSpan"])) { return true; } const cause = error["cause"]; if (!isNullish(cause)) { return this.hasTextSpan(cause); } const leftCause = error["leftCause"]; const rightCause = error["rightCause"]; return ((isNullish(leftCause) ? false : this.hasTextSpan(leftCause)) || (isNullish(rightCause) ? false : this.hasTextSpan(rightCause))); } toExprString(builder = new ExprStringBuilder(0)) { this.buildExprString(builder); if (isNullish(this.getTextSpan())) { this.setTextSpan(TextSpan.of(1, builder.startPos + 1, 1, builder.endPos + 1)); } return builder.build(); } } //# sourceMappingURL=ExprBase.js.map