[ruby-dev:24210] [SEGV] redefine Struct with same name

From: "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
Date: 2004-09-03 07:47:58 UTC
List: ruby-dev #24210
山本です。Struct を同じ名前で二度定義すると、

  s1 = Struct.new("Point", :x, :y)
  p1 = s1.new(2, 3)
  p p1

  s2 = Struct.new("Point", :size)
  p2 = s2.new(200)
  p p2

  p p1

というコードが SEGV します。ruby-1.8.1, ruby-1.8.2, HEAD, mswin版の
すべてで再現しました。

  E:\>ruby e.rb
  #<struct Struct::Point x=2, y=3>
  #<struct Struct::Point size=200>
  e.rb:13: [BUG] Segmentation fault
  ruby 1.8.2 (2004-09-03) [i386-bccwin32]

無名 Struct だと

  s1 = Struct.new(:x, :y)
  p1 = s1.new(2, 3)
  p p1

  s2 = Struct.new(:size)
  p2 = s2.new(200)
  p p2

  p p1

SEGV しません。

  E:\>ruby d.rb
  #<struct #<Class:0x2b5c2a8> x=2, y=3>
  #<struct #<Class:0x2b5bbd0> size=200>
  #<struct #<Class:0x2b5c2a8> x=2, y=3>



In This Thread

Prev Next