ifc-expressions
Version:
Parsing and evaluation of IFC expressions
36 lines (35 loc) • 1.14 kB
JavaScript
import { isExprEvalError } from "../ExprEvalResult.js";
import { ExprKind } from "../ExprKind.js";
import { Expr0 } from "../Expr0.js";
import { ArrayValue } from "../../value/ArrayValue.js";
import { Types } from "../../type/Types.js";
export class ArrayExpr extends Expr0 {
constructor(elements) {
super(ExprKind.ARRAY);
this.elements = elements;
}
getChildren() {
return [...this.elements];
}
doEvaluate(ctx, localCtx) {
const evaluatedResult = [];
for (let i = 0; i < this.elements.length; i++) {
const evalResult = this.elements[i].evaluate(ctx, localCtx);
if (isExprEvalError(evalResult)) {
return evalResult;
}
evaluatedResult.push(evalResult.result);
}
return new ArrayValue(evaluatedResult);
}
buildExprString(builder) {
builder
.appendString("[")
.appendExprArray(this.elements, ",")
.appendString("]");
}
getType() {
return Types.tuple(...this.elements.map((e) => e.getType()));
}
}
//# sourceMappingURL=ArrayExpr.js.map