[前][次][番号順一覧][スレッド一覧]

ruby-changes:14069

From: akr <ko1@a...>
Date: Sat, 21 Nov 2009 18:51:53 +0900 (JST)
Subject: [ruby-changes:14069] Ruby:r25882 (trunk): * vm_eval.c (rb_search_method_entry): show flags and klass value in

akr	2009-11-21 18:49:30 +0900 (Sat, 21 Nov 2009)

  New Revision: 25882

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=25882

  Log:
    * vm_eval.c (rb_search_method_entry): show flags and klass value in
      not implemented error message.

  Modified files:
    trunk/ChangeLog
    trunk/vm_eval.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 25881)
+++ ChangeLog	(revision 25882)
@@ -1,3 +1,8 @@
+Sat Nov 21 18:48:35 2009  Tanaka Akira  <akr@f...>
+
+	* vm_eval.c (rb_search_method_entry): show flags and klass value in
+	  not implemented error message.
+
 Sat Nov 21 16:38:50 2009  Nobuyoshi Nakada  <nobu@r...>
 
 	* marshal.c (marshal_dump): use normal object as the buffer so
Index: vm_eval.c
===================================================================
--- vm_eval.c	(revision 25881)
+++ vm_eval.c	(revision 25882)
@@ -336,23 +336,34 @@
     VALUE klass = CLASS_OF(recv);
 
     if (!klass) {
-        if (!IMMEDIATE_P(recv) && RBASIC(recv)->flags != 0) {
+        if (IMMEDIATE_P(recv)) {
+            rb_raise(rb_eNotImpError,
+                     "method `%s' called on unexpected immediate object (%p)",
+                     rb_id2name(mid), (void *)recv);
+        }
+        if (RBASIC(recv)->flags == 0) {
+            rb_raise(rb_eNotImpError,
+                     "method `%s' called on terminated object"
+                     " (%p flags=0x%"PRIxVALUE" klass=0x%"PRIxVALUE")",
+                     rb_id2name(mid), (void *)recv,
+                     RBASIC(recv)->flags, RBASIC(recv)->klass);
+        }
+        else {
             int type = BUILTIN_TYPE(recv);
             const char *typestr = rb_type_str(type);
             if (typestr)
                 rb_raise(rb_eNotImpError,
-                         "method `%s' called on hidden %s object (%p)",
-                         rb_id2name(mid), typestr, (void *)recv);
+                         "method `%s' called on hidden %s object"
+                         " (%p flags=0x%"PRIxVALUE" klass=0x%"PRIxVALUE")",
+                         rb_id2name(mid), typestr, (void *)recv,
+                         RBASIC(recv)->flags, RBASIC(recv)->klass);
             else
                 rb_raise(rb_eNotImpError,
-                         "method `%s' called on hidden T_???" "(0x%02x) object (%p)",
-                         rb_id2name(mid), type, (void *)recv);
+                         "method `%s' called on hidden T_???" "(0x%02x) object"
+                         " (%p flags=0x%"PRIxVALUE" klass=0x%"PRIxVALUE")",
+                         rb_id2name(mid), type, (void *)recv,
+                         RBASIC(recv)->flags, RBASIC(recv)->klass);
         }
-        else {
-            rb_raise(rb_eNotImpError,
-                     "method `%s' called on terminated object (%p)",
-                     rb_id2name(mid), (void *)recv);
-        }
     }
     return rb_method_entry(klass, mid);
 }

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]