ifc-expressions
Version:
Parsing and evaluation of IFC expressions
49 lines (48 loc) • 1.68 kB
JavaScript
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