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

ruby-changes:14108

From: akr <ko1@a...>
Date: Wed, 25 Nov 2009 20:47:39 +0900 (JST)
Subject: [ruby-changes:14108] Ruby:r25922 (trunk): * vm_eval.c (rb_search_method_entry): refine error message.

akr	2009-11-25 20:47:19 +0900 (Wed, 25 Nov 2009)

  New Revision: 25922

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

  Log:
    * vm_eval.c (rb_search_method_entry): refine error message.

  Modified files:
    trunk/ChangeLog
    trunk/vm_eval.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 25921)
+++ ChangeLog	(revision 25922)
@@ -1,3 +1,7 @@
+Wed Nov 25 20:46:37 2009  Tanaka Akira  <akr@f...>
+
+	* vm_eval.c (rb_search_method_entry): refine error message.
+
 Wed Nov 25 19:29:05 2009  Akinori MUSHA  <knu@i...>
 
 	* ext/digest/digest.c (rb_digest_instance_method_unimpl): Do not
Index: vm_eval.c
===================================================================
--- vm_eval.c	(revision 25921)
+++ vm_eval.c	(revision 25922)
@@ -336,33 +336,38 @@
     VALUE klass = CLASS_OF(recv);
 
     if (!klass) {
+        VALUE flags, klass;
         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) {
+        flags = RBASIC(recv)->flags;
+        klass = RBASIC(recv)->klass;
+        if (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);
+                     rb_id2name(mid), (void *)recv, flags, klass);
         }
         else {
             int type = BUILTIN_TYPE(recv);
             const char *typestr = rb_type_str(type);
-            if (typestr)
+            if (typestr && T_OBJECT <= type && type < T_NIL)
                 rb_raise(rb_eNotImpError,
                          "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);
+                         rb_id2name(mid), typestr, (void *)recv, flags, klass);
+            if (typestr)
+                rb_raise(rb_eNotImpError,
+                         "method `%s' called on unexpected %s object"
+                         " (%p flags=0x%"PRIxVALUE" klass=0x%"PRIxVALUE")",
+                         rb_id2name(mid), typestr, (void *)recv, flags, klass);
             else
                 rb_raise(rb_eNotImpError,
-                         "method `%s' called on hidden T_???" "(0x%02x) object"
+                         "method `%s' called on broken T_???" "(0x%02x) object"
                          " (%p flags=0x%"PRIxVALUE" klass=0x%"PRIxVALUE")",
-                         rb_id2name(mid), type, (void *)recv,
-                         RBASIC(recv)->flags, RBASIC(recv)->klass);
+                         rb_id2name(mid), type, (void *)recv, flags, klass);
         }
     }
     return rb_method_entry(klass, mid);

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

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