Project

General

Profile

Actions

Bug #14006

closed

2.5.0preview1でWarning.warnを再定義するとSystemStackErrorが発生する

Added by y-yagi (Yuji Yaginuma) about 7 years ago. Updated about 4 years ago.

Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
ruby 2.5.0preview1 (2017-10-10 trunk 60153) [x86_64-linux]
[ruby-dev:50293]

Description

下記スクリプトを2.5.0.preview1で実行するとSystemStackErrorが発生します。 なお、下記スクリプトはRuby 2.4.1p111ではエラーが発生せず正常に動作します。

# warning_test.rb
module Warning
  def warn(message)
    return if message.match?("warning: possibly useless use of a variable in void context")

    super
  end
end

@a 

バックトレースは下記の通りです。

ruby -v warning_test.rb
ruby 2.5.0preview1 (2017-10-10 trunk 60153) [x86_64-linux]
warning_test.rb:9: warning: possibly useless use of a variable in void context
warning_test.rb:2: warning: method redefined; discarding old warn
Traceback (most recent call last):
	7580: from warning_test.rb:9:in `<main>'
	7579: from warning_test.rb:5:in `warn'
	7578: from warning_test.rb:5:in `warn'
	7577: from warning_test.rb:5:in `warn'
	7576: from warning_test.rb:5:in `warn'
	7575: from warning_test.rb:5:in `warn'
	7574: from warning_test.rb:5:in `warn'
	7573: from warning_test.rb:5:in `warn'
	 ... 7568 levels...
	   4: from warning_test.rb:5:in `warn'
	   3: from warning_test.rb:5:in `warn'
	   2: from warning_test.rb:5:in `warn'
	   1: from warning_test.rb:5:in `warn'
warning_test.rb:5:in `warn': stack level too deep (SystemStackError)

なお、再定義の方法を、

def Warning.warn(message) 
  ... 
end 

のように変更すると、エラーが発生せず正常に動作します。

これは意図的な挙動でしょうか?


Related issues 1 (0 open1 closed)

Related to Ruby master - Feature #12944: Change Kernel#warn to call Warning.warnClosedActions
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0