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