[ruby-core:80035] [Ruby trunk Bug#13145] Symbol#clone doesn't work correctly

From: naruse@...
Date: 2017-03-11 17:51:17 UTC
List: ruby-core #80035
Issue #13145 has been updated by Yui NARUSE.

Backport changed from 2.2: DONTNEED, 2.3: DONTNEED, 2.4: REQUIRED to 2.2: DONTNEED, 2.3: DONTNEED, 2.4: DONE

ruby_2_4 r57869 merged revision(s) 57407.

----------------------------------------
Bug #13145: Symbol#clone doesn't work correctly
https://bugs.ruby-lang.org/issues/13145#change-63458

* Author: Tatsuhiro Aoshima
* Status: Closed
* Priority: Normal
* Assignee: 
* Target version: 
* ruby -v: ruby 2.4.0p0 (2016-12-24 revision 57164) [x86_64-darwin16]
* Backport: 2.2: DONTNEED, 2.3: DONTNEED, 2.4: DONE
----------------------------------------
 Ruby 2.4.0 has a bug that `Symbol` converted from `String` at first cannot be cloned:

~~~ ruby
user@mypc ~$ irb
irb(main):001:0> :abc.clone  # When :abc has not been created from String (e.g. 'abc'.to_s.to_sym), clone will work.
=> :abc
irb(main):002:0> 'abc'.to_s.to_sym
=> :abc
irb(main):003:0> :abc.clone  # This clone will also work.
=> :abc
irb(main):004:0> 'abcd'.to_s.to_sym
=> :abcd
irb(main):005:0> :abcd.clone  # This clone WON'T WORK!?
TypeError: allocator undefined for Symbol
	from (irb):5:in `clone'
	from (irb):5
	from /usr/local/bin/irb:11:in `<main>'
irb(main):006:0>
~~~

As written in Ruby 2.4.0 documentation (e.g. https://docs.ruby-lang.org/ja/latest/method/Object/i/clone.html),
Symbol#clone must return itself.

Currently, I define Symbol#clone as the following in order to fix this bug:

~~~ ruby
class Symbol
  def clone
    self
  end
end
~~~
I think something has gone wrong ...



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>

In This Thread

Prev Next