ifc-expressions
Version:
Parsing and evaluation of IFC expressions
40 lines (39 loc) • 1.51 kB
JavaScript
import { Func } from "../Func.js";
import { ExprEvalStatus, ExprEvalSuccessObj, isExprEvalError, } from "../../ExprEvalResult.js";
import { Type } from "../../../type/Types.js";
import { BooleanValue } from "../../../value/BooleanValue.js";
import { FuncArgObjectAccessor } from "../arg/FuncArgObjectAccessor.js";
export class EXISTS extends Func {
constructor() {
super("EXISTS", [
new FuncArgObjectAccessor(true, EXISTS.KEY_OBJECT, Type.IFC_OBJECT_REF),
]);
}
getReturnType(argumentTypes) {
return Type.BOOLEAN;
}
calculateResult(callingExpr, evaluatedArguments) {
return undefined; // does not get called
}
evaluate(callingExpr, funcArgs) {
const args = this.getArgumentValues(callingExpr, funcArgs);
if (isExprEvalError(args)) {
return args;
}
const arg = args.get(EXISTS.KEY_OBJECT);
if (isExprEvalError(arg)) {
if (arg.status === ExprEvalStatus.NOT_FOUND ||
arg.status === ExprEvalStatus.IFC_PROPERTY_NOT_FOUND ||
arg.status === ExprEvalStatus.IFC_TYPE_OBJECT_NOT_FOUND ||
arg.status === ExprEvalStatus.IFC_PROPERTY_SET_NOT_FOUND) {
return new ExprEvalSuccessObj(BooleanValue.of(false));
}
else {
return arg;
}
}
return new ExprEvalSuccessObj(BooleanValue.of(true));
}
}
EXISTS.KEY_OBJECT = "object";
//# sourceMappingURL=EXISTS.js.map