ifc-expressions
Version:
Parsing and evaluation of IFC expressions
36 lines (35 loc) • 1.56 kB
JavaScript
import { Func } from "../Func.js";
import { ExprEvalFunctionEvaluationErrorObj, ExprEvalStatus, ExprEvalSuccessObj, isExprEvalError, } from "../../ExprEvalResult.js";
import { Type } from "../../../type/Types.js";
import { LogicalValue } from "../../../value/LogicalValue.js";
import { FuncArgBoolean } from "../arg/FuncArgBoolean.js";
export class TOLOGICAL extends Func {
constructor() {
super("TOLOGICAL", [new FuncArgBoolean(true, "object")]);
}
transformArguments(callingExpr, evaluatedArguments) {
const val = evaluatedArguments.get(TOLOGICAL.KEY_OBJECT);
if (isExprEvalError(val)) {
if (val.status === ExprEvalStatus.IFC_PROPERTY_NOT_FOUND) {
evaluatedArguments.set(TOLOGICAL.KEY_OBJECT, new ExprEvalSuccessObj(LogicalValue.unknown()));
}
}
else {
evaluatedArguments.set(TOLOGICAL.KEY_OBJECT, new ExprEvalSuccessObj(LogicalValue.of(val.result.getValue())));
}
}
calculateResult(callingExpr, evaluatedArguments) {
const val = evaluatedArguments.get(TOLOGICAL.KEY_OBJECT);
try {
return new ExprEvalSuccessObj(val);
}
catch (e) {
return new ExprEvalFunctionEvaluationErrorObj(callingExpr.getKind(), ExprEvalStatus.ERROR, `Cannot convert ${val.getValue()} to boolean: ${e.message}`, this.name, callingExpr.getTextSpan());
}
}
getReturnType(argumentTypes) {
return Type.LOGICAL;
}
}
TOLOGICAL.KEY_OBJECT = "object";
//# sourceMappingURL=TOLOGICAL.js.map