summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorYusuke Endoh <mame@ruby-lang.org>2021-12-28 11:49:09 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2022-02-12 14:59:26 +0900
commit08137c5dd99354225874abc95280188738030794 (patch)
treec2edd3629f3d0f4226684f88ce212d362871ada3 /lib
parent6e65e04186edbf2b5be88cd30268d455a9c6fec5 (diff)
[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
Diffstat (limited to 'lib')
-rw-r--r--lib/rdoc/markdown.rb45
1 files 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
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
_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
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
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
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 }")