зеркало из 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>
|
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;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче