docs: public static Expression ternary(
        final Expression condition, final Expression trueBranch, final Expression falseBranch) {
      checkArgument(condition.resultType().equals(Type.BOOLEAN_TYPE));
      checkArgument(trueBranch.resultType().getSort() == falseBranch.resultType().getSort());
      Features features = Features.of();
      if (Expression.areAllCheap(condition, trueBranch, falseBranch)) {
        features = features.plus(Feature.CHEAP);
      }
      if (trueBranch.isNonNullable() && falseBranch.isNonNullable()) {
        features = features.plus(Feature.NON_NULLABLE);
      }
      return new Expression(trueBranch.resultType(), features) {
        @Override
        protected void doGen(CodeBuilder mv) {
          condition.gen(mv);
          Label ifFalse = new Label();
          Label end = new Label();
          mv.visitJumpInsn(Opcodes.IFEQ, ifFalse); // if 0 goto ifFalse
          trueBranch.gen(mv); // eval true branch
          mv.visitJumpInsn(Opcodes.GOTO, end); // jump to the end
          mv.visitLabel(ifFalse);
          falseBranch.gen(mv); // eval false branch
          mv.visitLabel(end);
        }
      };
    }