From: SASADA Koichi Date: 2012-12-20T16:19:14+09:00 Subject: [ruby-dev:46779] Re: [ruby-trunk - Bug #7572] クラス定義においてスーパークラスとしてクラスでないものを指定してもエラーにならない事がある (2012/12/20 14:27), shugo (Shugo Maeda) 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が通ることは確認しています。  どうもありがとうございます.1点だけ,define_type を defineclass_type にして頂ければ.  コミット頂いてもいいでしょうか. -- // SASADA Koichi at atdot dot net