Project

General

Profile

« Previous | Next » 

Revision f71bd747

Added by mame (Yusuke Endoh) over 4 years ago

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