зеркало из https://github.com/github/ruby.git
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:
Родитель
2d2b6460f4
Коммит
0f11cda48c
|
@ -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>
|
||||
|
||||
* enc/iso_8859.h (SHARP_s): name frequently used codepoint.
|
||||
|
|
|
@ -195,13 +195,23 @@ module Forwardable
|
|||
accessor = "#{accessor}()"
|
||||
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;"}"
|
||||
begin;
|
||||
proc do
|
||||
def #{ali}(*args, &block)
|
||||
begin
|
||||
#{accessor}
|
||||
end.__send__ :#{method}, *args, &block
|
||||
end.#{method} *args, &block
|
||||
end
|
||||
end
|
||||
end;
|
||||
|
|
Загрузка…
Ссылка в новой задаче