[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]