[#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:46778] [ruby-trunk - Bug #7572] クラス定義においてスーパークラスとしてクラスでないものを指定してもエラーにならない事がある

From: "shugo (Shugo Maeda)" <redmine@...>
Date: 2012-12-20 05:27:27 UTC
List: ruby-dev #46778
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 `<main>': wrong argument type true (expected Class) (TypeError)



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

In This Thread