Project

General

Profile

Actions

Bug #13145

closed

Symbol#clone doesn't work correctly

Added by hiro4bbh (Tatsuhiro Aoshima) over 7 years ago. Updated about 7 years ago.

Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
ruby 2.4.0p0 (2016-12-24 revision 57164) [x86_64-darwin16]
[ruby-core:79216]

Description

Ruby 2.4.0 has a bug that Symbol converted from String at first cannot be cloned:

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:

class Symbol
  def clone
    self
  end
end

I think something has gone wrong ...

Updated by nobu (Nobuyoshi Nakada) over 7 years ago

  • Description updated (diff)
  • Backport changed from 2.2: UNKNOWN, 2.3: UNKNOWN, 2.4: UNKNOWN to 2.2: DONTNEED, 2.3: DONTNEED, 2.4: REQUIRED
Actions #2

Updated by nobu (Nobuyoshi Nakada) over 7 years ago

  • Status changed from Open to Closed

Applied in changeset r57407.


object.c: no TypeError at Symbol

  • object.c (special_object_p): uninterned Symbol also should not
    raise a TypeError but return itself instead, as well as interned
    Symbols. [ruby-core:79216] [Bug #13145]

Updated by naruse (Yui NARUSE) about 7 years ago

  • 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.

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0