do_classes_and_modules

in lib/rdoc/parser/c.rb [290:385]


  def do_classes_and_modules
    do_boot_defclass if @file_name == "class.c"

    @content.scan(
      %r(
        (?<var_name>[\w\.]+)\s* =
        \s*rb_(?:
          define_(?:
            class(?: 
              \s*\(
                \s*"(?<class_name_1>\w+)",
                \s*(?<parent_name_1>\w+)\s*
              \)
            |
              _under\s*\( 
                \s* (?<class_under>\w+),
                \s* "(?<class_name_2>\w+)",
                \s*
                (?:
                  (?<parent_name_2>[\w\*\s\(\)\.\->]+) |
                  rb_path2class\("(?<path>[\w:]+)"\)
                )
              \s*\)
            )
          |
            module(?: 
              \s*\(
                \s*"(?<module_name_1>\w+)"\s*
              \)
            |
              _under\s*\( 
                \s*(?<module_under>\w+),
                \s*"(?<module_name_2>\w+)"
              \s*\)
            )
          )
      |
        struct_define_without_accessor\s*\( 
          \s*"(?<class_name_3>\w+)",
          \s*(?<parent_name_3>\w+),
          \s*\w+,        
          (?:\s*"\w+",)* 
          \s*NULL
        \)
      |
        singleton_class\s*\( 
          \s*(?<target_class_name>\w+)
        \)
        )
      )mx
    ) do
      class_name = $~[:class_name_1]
      type = :class
      if class_name
        
        parent_name = $~[:parent_name_1]
        
      else
        class_name = $~[:class_name_2]
        if class_name
          
          parent_name = $~[:parent_name_2] || $~[:path]
          under = $~[:class_under]
        else
          class_name = $~[:class_name_3]
          if class_name
            
            parent_name = $~[:parent_name_3]
            
          else
            type = :module
            class_name = $~[:module_name_1]
            
            if class_name
              
              
            else
              class_name = $~[:module_name_2]
              if class_name
                
                under = $~[:module_under]
              else
                
                target_class_name = $~[:target_class_name]
                handle_singleton $~[:var_name], target_class_name
                next
              end
            end
          end
        end
      end

      handle_class_module($~[:var_name], type, class_name, parent_name, under)
    end
  end