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

ruby-changes:66612

From: Takashi <ko1@a...>
Date: Sun, 27 Jun 2021 10:53:00 +0900 (JST)
Subject: [ruby-changes:66612] 35c7e83bb3 (master): [ruby/irb] Optimize show_source command further

https://git.ruby-lang.org/ruby.git/commit/?id=35c7e83bb3

From 35c7e83bb32869cd96112ffd850b02047b48fac1 Mon Sep 17 00:00:00 2001
From: Takashi Kokubun <takashikkbn@g...>
Date: Sun, 27 Jun 2021 10:48:53 +0900
Subject: [ruby/irb] Optimize show_source command further

https://github.com/ruby/irb/pull/249 actually slowed down how `code` is
concatenated. The original way of creating `code` is faster.

[before]
    user     system      total        real
2.420137   0.005364   2.425501 (  2.426264)

[after]
    user     system      total        real
1.000221   0.007454   1.007675 (  1.008295)

Theoretically, this implementation might skip lines that don't appear in
Ripper tokens, but this assumes such lines don't impact whether the code
passes compilation or not. At least normal blank lines seem to have an
`on_ignored_nl` token anyway though.

https://github.com/ruby/irb/commit/27dd2867cd
---
 lib/irb/cmd/show_source.rb | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/lib/irb/cmd/show_source.rb b/lib/irb/cmd/show_source.rb
index dcba1d1..feff831 100644
--- a/lib/irb/cmd/show_source.rb
+++ b/lib/irb/cmd/show_source.rb
@@ -61,12 +61,15 @@ module IRB https://github.com/ruby/ruby/blob/trunk/lib/irb/cmd/show_source.rb#L61
         lex = RubyLex.new
         lines = File.read(file).lines[(first_line - 1)..-1]
         tokens = RubyLex.ripper_lex_without_warning(lines.join)
+
+        code = +""
         prev_tokens = []
 
         # chunk with line number
         tokens.chunk { |tok| tok[0][0] }.each do |lnum, chunk|
-          code = lines[0..lnum].join
+          code << lines[lnum]
           prev_tokens.concat chunk
+
           continue = lex.process_continue(prev_tokens)
           code_block_open = lex.check_code_block(code, prev_tokens)
           if !continue && !code_block_open
-- 
cgit v1.1


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

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