1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

Disable tailcall optimization [Bug #15303]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66349 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2018-12-12 05:46:13 +00:00
parent c33e716d6d
commit 241dced625
4 changed files with 3 additions and 14 deletions

View file

@ -1,7 +1,5 @@
# :stopdoc: # :stopdoc:
module Forwardable module Forwardable
FILTER_EXCEPTION = ""
def self._valid_method?(method) def self._valid_method?(method)
iseq = RubyVM::InstructionSequence.compile("().#{method}", nil, nil, 0, false) iseq = RubyVM::InstructionSequence.compile("().#{method}", nil, nil, 0, false)
rescue SyntaxError rescue SyntaxError
@ -12,8 +10,7 @@ module Forwardable
def self._compile_method(src, file, line) def self._compile_method(src, file, line)
RubyVM::InstructionSequence.compile(src, file, file, line, RubyVM::InstructionSequence.compile(src, file, file, line,
trace_instruction: false, trace_instruction: false)
tailcall_optimization: true)
.eval .eval
end end
end end

View file

@ -222,7 +222,7 @@ module Forwardable
#{pre} #{pre}
begin begin
#{accessor} #{accessor}
end#{method_call}#{FILTER_EXCEPTION} end#{method_call}
end end
end end
end; end;

View file

@ -1,13 +1,5 @@
# :stopdoc: # :stopdoc:
module Forwardable module Forwardable
FILE_REGEXP = %r"#{Regexp.quote(File.dirname(__FILE__))}"
FILTER_EXCEPTION = <<-'END'
rescue ::Exception
$@.delete_if {|s| ::Forwardable::FILE_REGEXP =~ s} unless ::Forwardable::debug
::Kernel::raise
END
def self._valid_method?(method) def self._valid_method?(method)
catch {|tag| catch {|tag|
eval("BEGIN{throw tag}; ().#{method}", binding, __FILE__, __LINE__) eval("BEGIN{throw tag}; ().#{method}", binding, __FILE__, __LINE__)

View file

@ -148,7 +148,7 @@ prelude_eval(VALUE code, VALUE name, int line)
static const rb_compile_option_t optimization = { static const rb_compile_option_t optimization = {
TRUE, /* int inline_const_cache; */ TRUE, /* int inline_const_cache; */
TRUE, /* int peephole_optimization; */ TRUE, /* int peephole_optimization; */
TRUE, /* int tailcall_optimization; */ FALSE,/* int tailcall_optimization; */
TRUE, /* int specialized_instruction; */ TRUE, /* int specialized_instruction; */
TRUE, /* int operands_unification; */ TRUE, /* int operands_unification; */
TRUE, /* int instructions_unification; */ TRUE, /* int instructions_unification; */