Issue #14726 has been updated by duerst (Martin Drst).


mame (Yusuke Endoh) wrote:
> くだらないコメントです。英語がわかりませんが、"given a XXX" の語順は変な気がします。"a XXX given" でいいような?

念のためぐたいれいをみたいですが、"given a(n) XXX" は大丈夫かもしれません。"was XXX" はもうちょっと短くて簡単なのかもしれません。

----------------------------------------
Bug #14726: wrong message when superclass is not a Class
https://bugs.ruby-lang.org/issues/14726#change-71886

* Author: usa (Usaku NAKAMURA)
* Status: Open
* Priority: Normal
* Assignee: 
* Target version: 
* ruby -v: ruby 2.6.0dev (2018-05-01 trunk 63310) [x64-mswin64_140]
* Backport: 2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN
----------------------------------------
クラス定義の際に親クラスとして`Class`でないものを与えると`TypeError`になりますが、その際にエラーメッセージに与えられたもののクラス名が表示されるため、メッセージだけ見ると何が間違ってるのかわけがわからなくなっています。

```ruby
class C1; end
class C2 < C1.new; end #=> TypeError (superclass must be a Class (C1 given))
```

ここはクラス名ではなく与えられたオブジェクトそのものを表示すべきではないでしょうか?

```diff
Index: class.c
===================================================================
--- class.c	(revision 63310)
+++ class.c	(working copy)
@@ -221,7 +221,7 @@
 {
     if (!RB_TYPE_P(super, T_CLASS)) {
 	rb_raise(rb_eTypeError, "superclass must be a Class (%"PRIsVALUE" given)",
-		 rb_obj_class(super));
+		 super);
     }
     if (RBASIC(super)->flags & FL_SINGLETON) {
 	rb_raise(rb_eTypeError, "can't make subclass of singleton class");
Index: vm_insnhelper.c
===================================================================
--- vm_insnhelper.c	(revision 63310)
+++ vm_insnhelper.c	(working copy)
@@ -3150,7 +3150,7 @@
     if (VM_DEFINECLASS_HAS_SUPERCLASS_P(flags) && !RB_TYPE_P(super, T_CLASS)) {
 	rb_raise(rb_eTypeError,
 		 "superclass must be a Class (%"PRIsVALUE" given)",
-		 rb_obj_class(super));
+		 super);
     }
 
     vm_check_if_namespace(cbase);
```




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