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|
constant = constant_of_module(name, entry)
unless name.namespace.empty?
parent = name.namespace.to_type_name
table = children_table[parent] or raise "#{parent} not found by #{name}"
else
table = toplevel
end
table[name.name] = constant
constants_table[name] = constant
end
environment.class_alias_decls.each do |name, entry|
normalized_entry = environment.module_class_entry(name, normalized: true) or next
constant = constant_of_module(name, normalized_entry)
unless name.namespace.empty?
normalized_parent = environment.normalize_module_name?(name.namespace.to_type_name) or raise
table = children_table[normalized_parent] or raise
table[name.name] = constant
else
toplevel[name.name] = constant
end
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