class Steep::TypeInference::LocalVariableTypeEnv
def join(*envs)
def join(*envs) if envs.empty? self else env = envs.inject do |env1, env2| assigned_types = {} declared_types = {} (env1.vars + env2.vars).each do |var| e1 = env1.entry(var) e2 = env2.entry(var) je = join_entry(e1, e2) if env1.declared_types.key?(var) || env2.declared_types.key?(var) declared_types[var] = je else assigned_types[var] = je end end LocalVariableTypeEnv.new( subtyping: subtyping, self_type: self_type, declared_types: declared_types, assigned_types: assigned_types ) end decls = env.declared_types.merge(declared_types) assignments = env.assigned_types.reject {|var, _| decls.key?(var) } update( declared_types: decls, assigned_types: assignments, ) end end