A TopLevel context is a source file
# File rdoc/code_objects.rb, line 518 def TopLevel.all_classes_and_modules @@all_classes.values + @@all_modules.values end
# File rdoc/code_objects.rb, line 522 def TopLevel.find_class_named(name) @@all_classes.each_value do |c| res = c.find_class_named(name) return res if res end nil end
Adding a class or module to a TopLevel is special, as we only want one copy of a particular top-level class. For example, if both file A and file B implement class C, we only want one ClassModule object for C. This code arranges to share classes and modules between files.
# File rdoc/code_objects.rb, line 496 def add_class_or_module(collection, class_type, name, superclass) cls = collection[name] if cls puts "Reusing class/module #{name}" if $DEBUG else if class_type == NormalModule all = @@all_modules else all = @@all_classes end cls = all[name] if !cls cls = class_type.new(name, superclass) all[name] = cls unless @done_documenting end puts "Adding class/module #{name} to #@name" if $DEBUG collection[name] = cls unless @done_documenting cls.parent = self end cls end
# File rdoc/code_objects.rb, line 534 def find_class_or_module_named(symbol) @@all_classes.each_value {|c| return c if c.name == symbol} @@all_modules.each_value {|m| return m if m.name == symbol} nil end
# File rdoc/code_objects.rb, line 530 def find_local_symbol(symbol) find_class_or_module_named(symbol) || super end