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 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
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