ruby-changes:71158
From: Yusuke <ko1@a...>
Date: Sat, 12 Feb 2022 15:12:51 +0900 (JST)
Subject: [ruby-changes:71158] 08137c5dd9 (master): [ruby/rdoc] Optimize RawLine by using a regexp instead of negative look-ahead rule
https://git.ruby-lang.org/ruby.git/commit/?id=08137c5dd9 From 08137c5dd99354225874abc95280188738030794 Mon Sep 17 00:00:00 2001 From: Yusuke Endoh <mame@r...> Date: Tue, 28 Dec 2021 11:49:09 +0900 Subject: [ruby/rdoc] Optimize RawLine by using a regexp instead of negative look-ahead rule This improves the performance in some cases. `rdoc .../gems/sinatra-2.1.0/README.md` takes 10.5 sec. before this change, and 7.1 sec. after this change. `make rdoc` of ruby/ruby takes 19.3 sec. before this change, 18.1 sec. after this change. https://github.com/ruby/rdoc/commit/7cf8281e3e --- lib/rdoc/markdown.rb | 45 ++++++++------------------------------------- 1 file changed, 8 insertions(+), 37 deletions(-) diff --git a/lib/rdoc/markdown.rb b/lib/rdoc/markdown.rb index 3442f76b1b..c10ad2fb14 100644 --- a/lib/rdoc/markdown.rb +++ b/lib/rdoc/markdown.rb @@ -14918,7 +14918,7 @@ class RDoc::Markdown https://github.com/ruby/ruby/blob/trunk/lib/rdoc/markdown.rb#L14918 return _tmp end - # RawLine = (< (!"\r" !"\n" .)* @Newline > | < .+ > @Eof) { text } + # RawLine = (< /[^\r\n]*/ @Newline > | < .+ > @Eof) { text } def _RawLine _save = self.pos @@ -14930,36 +14930,7 @@ class RDoc::Markdown https://github.com/ruby/ruby/blob/trunk/lib/rdoc/markdown.rb#L14930 _save2 = self.pos while true # sequence - while true - - _save4 = self.pos - while true # sequence - _save5 = self.pos - _tmp = match_string("\r") - _tmp = _tmp ? nil : true - self.pos = _save5 - unless _tmp - self.pos = _save4 - break - end - _save6 = self.pos - _tmp = match_string("\n") - _tmp = _tmp ? nil : true - self.pos = _save6 - unless _tmp - self.pos = _save4 - break - end - _tmp = get_byte - unless _tmp - self.pos = _save4 - end - break - end # end sequence - - break unless _tmp - end - _tmp = true + _tmp = scan(/\G(?-mix:[^\r\n]*)/) unless _tmp self.pos = _save2 break @@ -14977,10 +14948,10 @@ class RDoc::Markdown https://github.com/ruby/ruby/blob/trunk/lib/rdoc/markdown.rb#L14948 break if _tmp self.pos = _save1 - _save7 = self.pos + _save3 = self.pos while true # sequence _text_start = self.pos - _save8 = self.pos + _save4 = self.pos _tmp = get_byte if _tmp while true @@ -14989,18 +14960,18 @@ class RDoc::Markdown https://github.com/ruby/ruby/blob/trunk/lib/rdoc/markdown.rb#L14960 end _tmp = true else - self.pos = _save8 + self.pos = _save4 end if _tmp text = get_text(_text_start) end unless _tmp - self.pos = _save7 + self.pos = _save3 break end _tmp = _Eof() unless _tmp - self.pos = _save7 + self.pos = _save3 end break end # end sequence @@ -16661,7 +16632,7 @@ class RDoc::Markdown https://github.com/ruby/ruby/blob/trunk/lib/rdoc/markdown.rb#L16632 Rules[:_OptionallyIndentedLine] = rule_info("OptionallyIndentedLine", "Indent? Line") Rules[:_StartList] = rule_info("StartList", "&. { [] }") Rules[:_Line] = rule_info("Line", "@RawLine:a { a }") - Rules[:_RawLine] = rule_info("RawLine", "(< (!\"\\r\" !\"\\n\" .)* @Newline > | < .+ > @Eof) { text }") + Rules[:_RawLine] = rule_info("RawLine", "(< /[^\\r\\n]*/ @Newline > | < .+ > @Eof) { text }") Rules[:_SkipBlock] = rule_info("SkipBlock", "(HtmlBlock | (!\"\#\" !SetextBottom1 !SetextBottom2 !@BlankLine @RawLine)+ @BlankLine* | @BlankLine+ | @RawLine)") Rules[:_ExtendedSpecialChar] = rule_info("ExtendedSpecialChar", "&{ notes? } \"^\"") Rules[:_NoteReference] = rule_info("NoteReference", "&{ notes? } RawNoteReference:ref { note_for ref }") -- cgit v1.2.1 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/