| Class | RDoc::TopLevel |
| In: |
code_objects.rb
parsers/parse_f95.rb doc-tmp/rdoc/code_objects.rb |
| Parent: | Context |
A TopLevel context is a source file
# File doc-tmp/rdoc/code_objects.rb, line 525
525: def self.all_classes_and_modules
526: @@all_classes.values + @@all_modules.values
527: end
# File code_objects.rb, line 525
525: def self.all_classes_and_modules
526: @@all_classes.values + @@all_modules.values
527: end
# File code_objects.rb, line 529
529: def self.find_class_named(name)
530: @@all_classes.each_value do |c|
531: res = c.find_class_named(name)
532: return res if res
533: end
534: nil
535: end
# File doc-tmp/rdoc/code_objects.rb, line 529
529: def self.find_class_named(name)
530: @@all_classes.each_value do |c|
531: res = c.find_class_named(name)
532: return res if res
533: end
534: nil
535: end
# File doc-tmp/rdoc/code_objects.rb, line 477
477: def initialize(file_name)
478: super()
479: @name = "TopLevel"
480: @file_relative_name = file_name
481: @file_absolute_name = file_name
482: @file_stat = File.stat(file_name)
483: @diagram = nil
484: end
# File code_objects.rb, line 477
477: def initialize(file_name)
478: super()
479: @name = "TopLevel"
480: @file_relative_name = file_name
481: @file_absolute_name = file_name
482: @file_stat = File.stat(file_name)
483: @diagram = nil
484: end
# File parsers/parse_f95.rb, line 748
748: def initialize(file_name)
749: super()
750: @name = "TopLevel"
751: @file_relative_name = file_name
752: @file_absolute_name = file_name
753: @file_stat = File.stat(file_name)
754: @diagram = nil
755: @@all_files[file_name] = self
756: end
# File doc-tmp/rdoc/code_objects.rb, line 472
472: def self.reset
473: @@all_classes = {}
474: @@all_modules = {}
475: end
# File parsers/parse_f95.rb, line 742
742: def TopLevel::reset
743: @@all_classes = {}
744: @@all_modules = {}
745: @@all_files = {}
746: end
# File code_objects.rb, line 472
472: def self.reset
473: @@all_classes = {}
474: @@all_modules = {}
475: 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 doc-tmp/rdoc/code_objects.rb, line 496
496: def add_class_or_module(collection, class_type, name, superclass)
497: cls = collection[name]
498:
499: if cls
500: puts "Reusing class/module #{name}" if $DEBUG_RDOC
501: else
502: if class_type == NormalModule
503: all = @@all_modules
504: else
505: all = @@all_classes
506: end
507:
508: cls = all[name]
509:
510: if !cls
511: cls = class_type.new(name, superclass)
512: all[name] = cls unless @done_documenting
513: end
514:
515: puts "Adding class/module #{name} to #{@name}" if $DEBUG_RDOC
516:
517: collection[name] = cls unless @done_documenting
518:
519: cls.parent = self
520: end
521:
522: cls
523: 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 code_objects.rb, line 496
496: def add_class_or_module(collection, class_type, name, superclass)
497: cls = collection[name]
498:
499: if cls
500: puts "Reusing class/module #{name}" if $DEBUG_RDOC
501: else
502: if class_type == NormalModule
503: all = @@all_modules
504: else
505: all = @@all_classes
506: end
507:
508: cls = all[name]
509:
510: if !cls
511: cls = class_type.new(name, superclass)
512: all[name] = cls unless @done_documenting
513: end
514:
515: puts "Adding class/module #{name} to #{@name}" if $DEBUG_RDOC
516:
517: collection[name] = cls unless @done_documenting
518:
519: cls.parent = self
520: end
521:
522: cls
523: end
# File doc-tmp/rdoc/code_objects.rb, line 541
541: def find_class_or_module_named(symbol)
542: @@all_classes.each_value {|c| return c if c.name == symbol}
543: @@all_modules.each_value {|m| return m if m.name == symbol}
544: nil
545: end
# File code_objects.rb, line 541
541: def find_class_or_module_named(symbol)
542: @@all_classes.each_value {|c| return c if c.name == symbol}
543: @@all_modules.each_value {|m| return m if m.name == symbol}
544: nil
545: end
# File parsers/parse_f95.rb, line 766
766: def find_class_or_module_named(symbol, ignore_case=nil)
767: if !ignore_case
768: @@all_classes.each_value {|c| return c if c.name == symbol}
769: @@all_modules.each_value {|m| return m if m.name == symbol}
770: else
771: @@all_classes.each_value {|c| return c if c.name.upcase == symbol.upcase}
772: @@all_modules.each_value {|m| return m if m.name.upcase == symbol.upcase}
773: end
774: nil
775: end
Find a named file
# File parsers/parse_f95.rb, line 783
783: def find_file_named(name, method=nil, ignore_case=nil)
784: return nil unless name
785: result = nil
786: @@all_files.each{|file_name, toplevel|
787: result = toplevel if file_name == name
788: }
789: dir = File.dirname(@file_relative_name)
790: @@all_files.each{|file_name, toplevel|
791: if /^#{dir}\/(.*)/ =~ file_name
792: result = toplevel if $1 == name
793: end
794: }
795: if result
796: if method
797: result_method = result.find_local_symbol(method, ignore_case)
798: return result_method
799: else
800: return result
801: end
802: else
803: return nil
804: end
805: end
# File code_objects.rb, line 537
537: def find_local_symbol(symbol)
538: find_class_or_module_named(symbol) || super
539: end
# File doc-tmp/rdoc/code_objects.rb, line 537
537: def find_local_symbol(symbol)
538: find_class_or_module_named(symbol) || super
539: end
# File parsers/parse_f95.rb, line 762
762: def find_local_symbol(symbol, ignore_case=nil)
763: find_class_or_module_named(symbol, ignore_case) || super
764: end
Find a named module
# File code_objects.rb, line 550
550: def find_module_named(name)
551: find_class_or_module_named(name) || find_enclosing_module_named(name)
552: end
Find a named module
# File doc-tmp/rdoc/code_objects.rb, line 550
550: def find_module_named(name)
551: find_class_or_module_named(name) || find_enclosing_module_named(name)
552: end
Find a named module
# File parsers/parse_f95.rb, line 778
778: def find_module_named(name, ignore_case=nil)
779: find_class_or_module_named(name, ignore_case) || find_enclosing_module_named(name, ignore_case)
780: end