From: "shugo (Shugo Maeda)" Date: 2012-12-17T23:00:58+09:00 Subject: [ruby-dev:46753] [ruby-trunk - Bug #7572][Assigned] クラス定義においてスーパークラスとしてクラスでないものを指定してもエラーにならない事がある 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(<@>========== 0000 trace 1 ( 1) 0002 putspecialobject 3 0004 putnil 0005 defineclass :Foo, , 3 0009 pop 0010 trace 1 ( 2) 0012 putspecialobject 3 0014 putnil 0015 defineclass :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 `
': wrong argument type true (expected Class) (TypeError) -- http://bugs.ruby-lang.org/