1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/lib/rdoc/parser
Yusuke Endoh f71bd7477e RDoc::Parser::C: Integrate do_classes and do_modules by one regexp match
The full scan of the C source code (`@content.scan`) is very slow.
The old code invokes the scan six times in `do_classes` and
`do_modules`.

This change integrates the six scans into one by merging the regexps.
The integrated regexp is a bit hard to maintain, but the speed up is
significant: approx. 30 sec -> 20 sec in Ruby's `make rdoc`.

In addition, this change omits `do_boot_defclass` unless the file name
is `class.c`.  `boot_defclass` is too specific to Ruby's source code, so
RDoc should handle it as a special case.

Before this change:

     TOTAL    (pct)     SAMPLES    (pct)     FRAME
       858  (13.6%)         858  (13.6%)     (garbage collection)
       292   (4.6%)         264   (4.2%)     RDoc::Parser::C#do_define_class
       263   (4.2%)         250   (3.9%)     RDoc::Parser::C#do_define_module
       275   (4.3%)         241   (3.8%)     RDoc::Parser::C#do_define_class_under
       248   (3.9%)         237   (3.7%)     RDoc::Parser::C#do_define_module_under
       234   (3.7%)         234   (3.7%)     RDoc::Parser::C#gen_body_table
       219   (3.5%)         219   (3.5%)     Ripper::Lexer#state_obj
       217   (3.4%)         216   (3.4%)     RDoc::Parser::C#do_struct_define_without_accessor
       205   (3.2%)         205   (3.2%)     RDoc::Parser::C#do_boot_defclass
       205   (3.2%)         205   (3.2%)     RDoc::Parser::C#do_singleton_class

The six methods take approx. 22.2%.
`do_define_class` (4.2%) + `do_define_class_under` (3.8%) +
`do_define_module` (3,9$) + `do_define_module_under` (3.7%) +
`do_struct_define_without_accessor` (3.4%) + `do_singleton_class` (3.2%)

After this change, the methods are integrated to `do_classes_and_modules`
which takes only 5.8%.

     TOTAL    (pct)     SAMPLES    (pct)     FRAME
       812  (16.7%)         812  (16.7%)     (garbage collection)
       355   (7.3%)         284   (5.8%)     RDoc::Parser::C#do_classes_and_modules
       225   (4.6%)         225   (4.6%)     RDoc::Parser::C#gen_body_table
       429   (8.8%)         210   (4.3%)     RDoc::Parser::RubyTools#get_tk
       208   (4.3%)         208   (4.3%)     RDoc::TokenStream#add_tokens
2019-08-16 06:07:11 +09:00
..
c.rb RDoc::Parser::C: Integrate do_classes and do_modules by one regexp match 2019-08-16 06:07:11 +09:00
changelog.rb Merge rdoc-6.0.0.beta4 from upstream. 2017-11-27 10:45:24 +00:00
markdown.rb Merge rdoc-6.0.0.beta4 from upstream. 2017-11-27 10:45:24 +00:00
rd.rb Merge rdoc-6.0.0.beta4 from upstream. 2017-11-27 10:45:24 +00:00
ripper_state_lex.rb ripper_state_lex.rb: chomp CR 2019-06-07 18:57:58 +09:00
ruby.rb [ruby/rdoc] Normalization of comment should check language 2019-07-26 17:20:58 +08:00
ruby_tools.rb Merge rdoc-6.1.0.beta2 2018-10-17 06:28:20 +00:00
simple.rb Merge rdoc-6.0.0.beta4 from upstream. 2017-11-27 10:45:24 +00:00
text.rb Merge rdoc-6.0.0.beta4 from upstream. 2017-11-27 10:45:24 +00:00