class Steep::Subtyping::VariableOccurence
def self.from_method_type(method_type)
def self.from_method_type(method_type) self.new.tap do |occurence| occurence.add_method_type(method_type) end end
def add_method_type(method_type)
def add_method_type(method_type) method_type.params.each_type do |type| each_var(type) do |var| params << var end end each_var(method_type.return_type) do |var| returns << var end method_type.block&.yield_self do |block| block.type.params.each_type do |type| each_var(type) do |var| params << var end end each_var(block.type.return_type) do |var| returns << var end end end
def each_var(type, &block)
def each_var(type, &block) type.free_variables.each(&block) end
def initialize
def initialize @params = Set.new @returns = Set.new end
def strictly_return?(var)
def strictly_return?(var) !params.member?(var) && returns.member?(var) end