process_lasgn (TypeChecker)

    # File lib/type_checker.rb, line 681
      def process_lasgn(exp)
        name = exp.shift
        arg_exp = nil
        arg_type = nil
        var_type = @env.lookup name rescue nil

        sub_exp = exp.shift
        sub_exp_type = sub_exp.first
        arg_exp = process sub_exp

       # if we've got an array in there, unify everything in it.
        if sub_exp_type == :array then
          arg_type = arg_exp.sexp_types
          arg_type = arg_type.inject(Type.unknown) do |t1, t2|
            t1.unify t2
          end
          arg_type = arg_type.dup # singleton type
          arg_type.list = true
        else
          arg_type = arg_exp.sexp_type
        end

        if var_type.nil? then
          @env.add name, arg_type
          var_type = arg_type
        else
          var_type.unify arg_type
        end

        return t(:lasgn, name, arg_exp, var_type)
      end