class TypeProf::Core::StaticRead

Attributes

followers[R]
name[R]

Public Class Methods

new(name) click to toggle source
# File typeprof-0.30.1/lib/typeprof/core/env/static_read.rb, line 3
def initialize(name)
  @name = name
  @followers = Set[]
  @source_modules = Set[]
end

Public Instance Methods

destroy(genv) click to toggle source
# File typeprof-0.30.1/lib/typeprof/core/env/static_read.rb, line 26
def destroy(genv)
  @source_modules.each do |mod|
    mod.static_reads[@name].delete(self) || raise
  end
  @source_modules.clear
end
propagate(genv) click to toggle source
# File typeprof-0.30.1/lib/typeprof/core/env/static_read.rb, line 11
def propagate(genv)
  @followers.each do |follower|
    case follower
    when ModuleEntity
      genv.add_static_eval_queue(:parent_modules_changed, follower)
    when ScopedStaticRead
      follower.on_cbase_updated(genv)
    when Box, IsAFilter
      genv.add_run(follower)
    else
      raise follower.inspect
    end
  end
end
resolve(genv, cref, break_object) click to toggle source
# File typeprof-0.30.1/lib/typeprof/core/env/static_read.rb, line 33
def resolve(genv, cref, break_object)
  destroy(genv)

  first = true
  while cref
    scope = cref.cpath
    mod = genv.resolve_cpath(scope)
    genv.each_superclass(mod, false) do |mod, _singleton|
      break if mod == genv.mod_object && break_object

      unless @source_modules.include?(mod)
        @source_modules << mod
        (mod.static_reads[@name] ||= Set[]) << self
      end

      return if check_module(genv, mod)

      break unless first
    end
    first = false
    cref = cref.outer
  end
  resolution_failed(genv)
end