process_if (TypeChecker)

    # File lib/type_checker.rb, line 616
      def process_if(exp)
        cond_exp = process exp.shift
        then_exp = process exp.shift
        else_exp = process exp.shift rescue nil # might be empty

        cond_exp.sexp_type.unify Type.bool
        begin
          then_exp.sexp_type.unify else_exp.sexp_type unless then_exp.nil? or else_exp.nil?
        rescue TypeError => err
          puts "Error unifying #{then_exp.inspect} with #{else_exp.inspect}"
          raise
        end

        # FIX: at least document this
        type = then_exp.sexp_type unless then_exp.nil?
        type = else_exp.sexp_type unless else_exp.nil?

        return t(:if, cond_exp, then_exp, else_exp, type)
      end