Method: RDoc::Parser::C#handle_class_module

Defined in:
lib/rdoc/parser/c.rb

#handle_class_module(var_name, type, class_name, parent, in_module) ⇒ Object

Creates a new RDoc::NormalClass or RDoc::NormalModule based on type named class_name in parent which was assigned to the C var_name.



872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
# File 'lib/rdoc/parser/c.rb', line 872

def handle_class_module(var_name, type, class_name, parent, in_module)
  parent_name = @known_classes[parent] || parent

  if in_module then
    enclosure = @classes[in_module] || @store.find_c_enclosure(in_module)

    if enclosure.nil? and enclosure = @known_classes[in_module] then
      enc_type = /^rb_m/ =~ in_module ? :module : :class
      handle_class_module in_module, enc_type, enclosure, nil, nil
      enclosure = @classes[in_module]
    end

    unless enclosure then
      @enclosure_dependencies[in_module] << var_name
      @missing_dependencies[var_name] =
        [var_name, type, class_name, parent, in_module]

      return
    end
  else
    enclosure = @top_level
  end

  if type == :class then
    full_name = if RDoc::ClassModule === enclosure then
                  enclosure.full_name + "::#{class_name}"
                else
                  class_name
                end

    if @content =~ %r%Document-class:\s+#{full_name}\s*<\s+([:,\w]+)% then
      parent_name = $1
    end

    cm = enclosure.add_class RDoc::NormalClass, class_name, parent_name
  else
    cm = enclosure.add_module RDoc::NormalModule, class_name
  end

  cm.record_location enclosure.top_level

  find_class_comment cm.full_name, cm

  case cm
  when RDoc::NormalClass
    @stats.add_class cm
  when RDoc::NormalModule
    @stats.add_module cm
  end

  @classes[var_name] = cm
  @known_classes[var_name] = cm.full_name
  @store.add_c_enclosure var_name, cm
end