From: "shugo (Shugo Maeda)" Date: 2012-12-20T14:27:27+09:00 Subject: [ruby-dev:46778] [ruby-trunk - Bug #7572] クラス定義においてスーパークラスとしてクラスでないものを指定してもエラーにならない事がある Issue #7572 has been updated by shugo (Shugo Maeda). File defineclass_fix_1220.diff added 前田です。 ko1 (Koichi Sasada) wrote: > 方針はその方向で,少し整理するといいでしょうか. 今のdefine_typeの値の付け方にとくに意味がないのであれば、scopedかどうか(class Foo::Barのような形か)も フラグにしてしまった方がすっきりする気がします。 例えば、以下のようにしてはどうでしょうか。 下位3ビット -> 定義のタイプ (0 = クラス, 1 = 特異クラス, 2 = モジュール, 3以上は予約) 下から4ビット目 -> scopedなら1、そうでなければ0 下から5ビット目 -> スーパークラスが指定されていれば1、そうでなければ0 具体的には以下のような定義を考えています。 typedef enum { VM_DEFINE_TYPE_CLASS = 0x00, VM_DEFINE_TYPE_SINGLETON_CLASS = 0x01, VM_DEFINE_TYPE_MODULE = 0x02, /* 0x03..0x06 is reserved */ VM_DEFINE_TYPE_MASK = 0x07, } rb_vm_define_type_t; #define VM_DEFINE_FLAG_SCOPED 0x08 #define VM_DEFINE_FLAG_HAS_SUPERCLASS 0x10 その方針で作成したパッチを添付します。 i686-linux (Ubuntu 12.04)上でmake checkが通ることは確認しています。 ---------------------------------------- Bug #7572: クラス定義においてスーパークラスとしてクラスでないものを指定してもエラーにならない事がある https://bugs.ruby-lang.org/issues/7572#change-34885 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/