[#46807] [ruby-trunk - Bug #7625][Open] Arrayを継承したオブジェクトのcompactがArrayを返す — "mogya@... (Daisuke Furukawa)" <mogya@...>

19 messages 2012/12/26

[#46822] [ruby-trunk - Feature #7639][Open] More freedom for location of comments — "sawa (Tsuyoshi Sawada)" <sawadatsuyoshi@...>

14 messages 2012/12/30

[ruby-dev:46753] [ruby-trunk - Bug #7572][Assigned] クラス定義においてスーパークラスとしてクラスでないものを指定してもエラーにならない事がある

From: "shugo (Shugo Maeda)" <redmine@...>
Date: 2012-12-17 14:00:58 UTC
List: ruby-dev #46753
Issue #7572 has been updated by shugo (Shugo Maeda).

File defineclass_fix.diff added
Status changed from Open to Assigned
Assignee set to ko1 (Koichi Sasada)

前田です。

tadf (tadayoshi funaba) wrote:
> クラス定義においてスーパークラスとしてクラスでないものを指定してもエラーにならない事がある。
> 
> $ ruby -v -e 'class Foo < nil; end'
> ruby 2.0.0dev (2012-12-16 trunk 38415) [i686-linux]

以下のように、コンパイルすると'class Foo; end'と'class Foo < nil; end'が同じ命令列に
なってしまうためのようです。

$ cat defineclass.rb 
ary = RubyVM::InstructionSequence.compile(<<EOF).disasm
class Foo; end
class Foo < nil; end
EOF
print ary
$ ruby defineclass.rb
== disasm: <RubyVM::InstructionSequence:<compiled>@<compiled>>==========
0000 trace            1                                               (   1)
0002 putspecialobject 3
0004 putnil           
0005 defineclass      :Foo, <class:Foo>, 3
0009 pop              
0010 trace            1                                               (   2)
0012 putspecialobject 3
0014 putnil           
0015 defineclass      :Foo, <class:Foo>, 3
0019 leave            
...

define_typeにスーパークラスを指定したかどうかを表すフラグを追加したパッチを添付します。
フラグの渡し方とかマジックナンバーでいいのかとか色々気になりますが、どうするのがよいでしょう? > ささださん

スーパークラスが指定されなかった場合はnilでなくQundefをputobjectしたらどうかとも
思ったのですが、r12621を見るとQundefはVMスタックに置かない方針なのですよね?
----------------------------------------
Bug #7572: クラス定義においてスーパークラスとしてクラスでないものを指定してもエラーにならない事がある
https://bugs.ruby-lang.org/issues/7572#change-34800

Author: tadf (tadayoshi funaba)
Status: Assigned
Priority: Low
Assignee: ko1 (Koichi Sasada)
Category: core
Target version: 2.0.0
ruby -v: ruby 2.0.0dev (2012-12-16 trunk 38415) [i686-linux]


クラス定義においてスーパークラスとしてクラスでないものを指定してもエラーにならない事がある。

$ ruby -v -e 'class Foo < nil; end'
ruby 2.0.0dev (2012-12-16 trunk 38415) [i686-linux]

$ ruby -v -e 'class Foo < false; end'
ruby 2.0.0dev (2012-12-16 trunk 38415) [i686-linux]

$ ruby -v -e 'class Foo < true; end'
ruby 2.0.0dev (2012-12-16 trunk 38415) [i686-linux]
-e:1:in `<main>': wrong argument type true (expected Class) (TypeError)



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

In This Thread