diff --git a/lib/rbs/prototype/runtime.rb b/lib/rbs/prototype/runtime.rb index 288902458..46075a89b 100644 --- a/lib/rbs/prototype/runtime.rb +++ b/lib/rbs/prototype/runtime.rb @@ -14,7 +14,7 @@ class Runtime def initialize(patterns:, env:, merge:, owners_included: []) @patterns = patterns @decls = nil - @modules = [] + @modules = {} @env = env @merge = merge @owners_included = owners_included.map do |name| @@ -47,8 +47,11 @@ def parse(file) def decls unless @decls @decls = [] - @modules = ObjectSpace.each_object(Module).to_a - @modules.select {|mod| target?(mod) }.sort_by{|mod| const_name!(mod) }.each do |mod| + @modules = ObjectSpace.each_object(Module) + .map { |mod| [const_name(mod), mod] } + .select { |name, _| name } + .to_h + @modules.select { |name, mod| target?(mod) }.sort_by { |name, _| name }.each do |_, mod| case mod when Class generate_class mod @@ -518,7 +521,7 @@ def ensure_outer_module_declarations(mod) outer_module_names&.each_with_index do |outer_module_name, i| current_name = outer_module_names.take(i+1).join('::') - outer_module = @modules.detect { |x| const_name(x) == current_name } + outer_module = @modules[current_name] outer_decl = destination.detect do |decl| case outer_module when Class diff --git a/sig/prototype/runtime.rbs b/sig/prototype/runtime.rbs index 37656dd58..95d637838 100644 --- a/sig/prototype/runtime.rbs +++ b/sig/prototype/runtime.rbs @@ -3,7 +3,7 @@ module RBS class Runtime @decls: Array[AST::Declarations::t]? - @modules: Array[Module] + @modules: Hash[String, Module] @builder: DefinitionBuilder