diff options
author | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2022-02-08 17:19:15 +0900 |
---|---|---|
committer | git <svn-admin@ruby-lang.org> | 2022-02-09 18:43:07 +0900 |
commit | dec96dd89744695d310b70a672b9ea044eeed89f (patch) | |
tree | bf9eb012f7ba515fefab3199070a4f719ac4fc22 /lib | |
parent | 7604933e03edf99800a082ce01dcaa5608462cd1 (diff) |
[ruby/rdoc] Support all struct definition functions
Currently only `rb_struct_define_without_accessor` is supported by
https://github.com/ruby/rdoc/pull/73. We should support other
three functions too.
https://github.com/ruby/rdoc/commit/d42288f06c
Diffstat (limited to 'lib')
-rw-r--r-- | lib/rdoc/parser/c.rb | 132 |
1 files changed, 61 insertions, 71 deletions
diff --git a/lib/rdoc/parser/c.rb b/lib/rdoc/parser/c.rb index b89aaa6dcc..df86d7f452 100644 --- a/lib/rdoc/parser/c.rb +++ b/lib/rdoc/parser/c.rb @@ -295,93 +295,83 @@ class RDoc::Parser::C < RDoc::Parser @content.scan( %r( + (?<open>\s*\(\s*) {0} + (?<close>\s*\)\s*) {0} + (?<name>\s*"(?<class_name>\w+)") {0} + (?<parent>\s*(?: + (?<parent_name>[\w\*\s\(\)\.\->]+) | + rb_path2class\s*\(\s*"(?<path>[\w:]+)"\s*\) + )) {0} + (?<under>\w+) {0} + (?<var_name>[\w\.]+)\s* = \s*rb_(?: define_(?: - class(?: # rb_define_class(class_name_1, parent_name_1) - \s*\( - \s*"(?<class_name_1>\w+)", - \s*(?<parent_name_1>\w+)\s* - \) - | - _under\s*\( # rb_define_class_under(class_under, class_name2, parent_name2...) - \s* (?<class_under>\w+), - \s* "(?<class_name_2>\w+)", - \s* - (?: - (?<parent_name_2>[\w\*\s\(\)\.\->]+) | - rb_path2class\("(?<path>[\w:]+)"\) - ) + class(?: # rb_define_class(name, parent_name) + \(\s* + \g<name>, + \g<parent> \s*\) + | + _under\g<open> # rb_define_class_under(under, name, parent_name...) + \g<under>, + \g<name>, + \g<parent> + \g<close> ) | - module(?: # rb_define_module(module_name_1) - \s*\( - \s*"(?<module_name_1>\w+)"\s* - \) + (?<module>) + module(?: # rb_define_module(name) + \g<open> + \g<name> + \g<close> | - _under\s*\( # rb_define_module_under(module_under, module_name_2) - \s*(?<module_under>\w+), - \s*"(?<module_name_2>\w+)" - \s*\) + _under\g<open> # rb_define_module_under(under, name) + \g<under>, + \g<name> + \g<close> ) ) | - struct_define_without_accessor\s*\( # rb_struct_define_without_accessor(class_name_3, parent_name_3, ...) - \s*"(?<class_name_3>\w+)", - \s*(?<parent_name_3>\w+), - \s*\w+, # Allocation function - (?:\s*"\w+",)* # Attributes - \s*NULL - \) + (?<attributes>(?:\s*"\w+",)*\s*NULL\s*) {0} + struct_define(?: + \g<open> # rb_struct_define(name, ...) + \g<name>, + | + _under\g<open> # rb_struct_define_under(under, name, ...) + \g<under>, + \g<name>, + | + _without_accessor(?: + \g<open> # rb_struct_define_without_accessor(name, parent_name, ...) + | + _under\g<open> # rb_struct_define_without_accessor_under(under, name, parent_name, ...) + \g<under>, + ) + \g<name>, + \g<parent>, + \s*\w+, # Allocation function + ) + \g<attributes> + \g<close> | - singleton_class\s*\( # rb_singleton_class(target_class_name) - \s*(?<target_class_name>\w+) - \) + singleton_class\g<open> # rb_singleton_class(target_class_name) + (?<target_class_name>\w+) + \g<close> ) )mx ) do - class_name = $~[:class_name_1] - type = :class - if class_name - # rb_define_class(class_name_1, parent_name_1) - parent_name = $~[:parent_name_1] - #under = nil - else - class_name = $~[:class_name_2] - if class_name - # rb_define_class_under(class_under, class_name2, parent_name2...) - parent_name = $~[:parent_name_2] || $~[:path] - under = $~[:class_under] - else - class_name = $~[:class_name_3] - if class_name - # rb_struct_define_without_accessor(class_name_3, parent_name_3, ...) - parent_name = $~[:parent_name_3] - #under = nil - else - type = :module - class_name = $~[:module_name_1] - #parent_name = nil - if class_name - # rb_define_module(module_name_1) - #under = nil - else - class_name = $~[:module_name_2] - if class_name - # rb_define_module_under(module_under, module_name_1) - under = $~[:module_under] - else - # rb_singleton_class(target_class_name) - target_class_name = $~[:target_class_name] - handle_singleton $~[:var_name], target_class_name - next - end - end - end - end + if target_class_name = $~[:target_class_name] + # rb_singleton_class(target_class_name) + handle_singleton $~[:var_name], target_class_name + next end + type = $~[:module] ? :module : :class + class_name = $~[:class_name] + parent_name = $~[:parent_name] || $~[:path] + under = $~[:under] + handle_class_module($~[:var_name], type, class_name, parent_name, under) end end |