class RBS::Resolver::ConstantResolver::Table

Attributes

children_table[R]
constants_table[R]
toplevel[R]

Public Class Methods

new(environment) click to toggle source
# File rbs-2.8.2/lib/rbs/resolver/constant_resolver.rb, line 10
def initialize(environment)
  @children_table = {}
  @toplevel = {}

  @constants_table = {}

  environment.class_decls.each_key do |name|
    children_table[name] = {}
  end

  environment.class_decls.each do |name, entry|
    unless name.namespace.empty?
      parent = name.namespace.to_type_name

      table = children_table[parent] or raise
      constant = constant_of_module(name, entry)
    else
      table = toplevel
      constant = constant_of_module(name, entry)
    end

    table[name.name] = constant
    constants_table[name] = constant
  end

  environment.constant_decls.each do |name, entry|
    unless name.namespace.empty?
      parent = name.namespace.to_type_name

      table = children_table[parent] or raise
      constant = constant_of_constant(name, entry)
    else
      table = toplevel
      constant = constant_of_constant(name, entry)
    end

    table[name.name] = constant
  end
end

Public Instance Methods

children(name) click to toggle source
# File rbs-2.8.2/lib/rbs/resolver/constant_resolver.rb, line 50
def children(name)
  children_table[name]
end
constant(name) click to toggle source
# File rbs-2.8.2/lib/rbs/resolver/constant_resolver.rb, line 54
def constant(name)
  constants_table[name]
end
constant_of_constant(name, entry) click to toggle source
# File rbs-2.8.2/lib/rbs/resolver/constant_resolver.rb, line 67
def constant_of_constant(name, entry)
  Constant.new(name: name, type: entry.decl.type, entry: entry)
end
constant_of_module(name, entry) click to toggle source
# File rbs-2.8.2/lib/rbs/resolver/constant_resolver.rb, line 58
def constant_of_module(name, entry)
  type = Types::ClassSingleton.new(
    name: name,
    location: nil
  )

  Constant.new(name: name, type: type, entry: entry)
end