DfaValue (@NotNull DfaValueFactory factory, @NotNull DfaMemoryState state, @NotNull DfaValue @NotNull ... arguments) { if (myBinOp == null) return factory.getUnknown(); DfaValue left = arguments[0]; DfaValue right = arguments[1]; DfType leftType = state.getDfType(left); DfType rightType = state.getDfType(right); if (leftType instanceof DfIntegralType && rightType instanceof DfIntegralType) { DfIntegralType resultType = leftType instanceof DfLongType ? DfTypes.LONG : DfTypes.INT; return factory.getBinOpFactory().create(left, right, state, resultType, myBinOp); } if (leftType instanceof DfDoubleConstantType d1 && rightType instanceof DfDoubleConstantType d2) { return factory.fromDfType(eval(myBinOp, d1.getValue(), d2.getValue())); } if (leftType instanceof DfFloatConstantType f1 && rightType instanceof DfFloatConstantType f2) { return factory.fromDfType(eval(myBinOp, f1.getValue(), f2.getValue())); } return factory.getUnknown(); }