forwardable.rb: optimize awy __send__

* lib/forwardable.rb (_delegator_method): remove __send__ call if
  possible, so that more optimizations will be enabled.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55376 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2016-06-11 04:52:35 +00:00
Родитель 2d2b6460f4
Коммит 0f11cda48c
2 изменённых файлов: 16 добавлений и 1 удалений

Просмотреть файл

@ -1,3 +1,8 @@
Sat Jun 11 13:52:33 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
* lib/forwardable.rb (_delegator_method): remove __send__ call if
possible, so that more optimizations will be enabled.
Sat Jun 11 11:24:36 2016 Nobuyoshi Nakada <nobu@ruby-lang.org> Sat Jun 11 11:24:36 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
* enc/iso_8859.h (SHARP_s): name frequently used codepoint. * enc/iso_8859.h (SHARP_s): name frequently used codepoint.

Просмотреть файл

@ -195,13 +195,23 @@ module Forwardable
accessor = "#{accessor}()" accessor = "#{accessor}()"
end end
unless begin
iseq = RubyVM::InstructionSequence
.compile("().#{method}", nil, nil, 0, false)
rescue SyntaxError
else
iseq.to_a.dig(-1, 1, 1, :mid) == method.to_sym
end
method = "__send__ :#{method},"
end
line_no = __LINE__+1; str = "#{<<-"begin;"}\n#{<<-"end;"}" line_no = __LINE__+1; str = "#{<<-"begin;"}\n#{<<-"end;"}"
begin; begin;
proc do proc do
def #{ali}(*args, &block) def #{ali}(*args, &block)
begin begin
#{accessor} #{accessor}
end.__send__ :#{method}, *args, &block end.#{method} *args, &block
end end
end end
end; end;