class Steep::TypeInference::TypeEnv
def [](name)
def [](name) case name when Symbol case when local_variable_name?(name) local_variable_types[name]&.[](0) when instance_variable_name?(name) instance_variable_types[name] when global_name?(name) global_types[name] else raise "Unexpected variable name: #{name}" end when Parser::AST::Node case name.type when :lvar self[name.children[0]] when :send if (call, type = pure_method_calls[name]) type || call.return_type end end end end