class RBS::EnvironmentWalker
def tsort_each_child(node, &block)
def tsort_each_child(node, &block) name = node.type_name unless name.namespace.empty? yield SingletonNode.new(type_name: name.namespace.to_type_name) end case node when TypeNameNode case when name.interface? definition = builder.build_interface(name) unless only_ancestors? definition.each_type do |type| each_type_node type, &block end end when name.alias? each_type_node builder.expand_alias1(name), &block else raise "Unexpected TypeNameNode with type_name=#{name}" end when InstanceNode, SingletonNode definition = if node.is_a?(InstanceNode) builder.build_instance(name) else builder.build_singleton(name) end if ancestors = definition.ancestors ancestors.ancestors.each do |ancestor| case ancestor when Definition::Ancestor::Instance yield InstanceNode.new(type_name: ancestor.name) unless only_ancestors? ancestor.args.each do |type| each_type_node type, &block end end when Definition::Ancestor::Singleton yield SingletonNode.new(type_name: ancestor.name) end end end unless only_ancestors? definition.each_type do |type| each_type_node type, &block end end end end