[#9445] thread.rb — m_seki@...

18 messages 2000/03/16
[#9446] Re: thread.rb — matz@... (Yukihiro Matsumoto) 2000/03/17

[#9460] Re: thread.rb — m_seki@... 2000/03/21

[#9462] Re: thread.rb — matz@... (Yukihiro Matsumoto) 2000/03/21

まつもと ゆきひろです

[#11281] Re: thread.rb — Masatoshi SEKI <m_seki@...> 2000/10/22

[#9498] timeout しない timeout — ARIMA Yasuhiro <fit0298@...>

有馬です。

20 messages 2000/03/26
[#9506] Re: timeout しない timeout — matz@... (Yukihiro Matsumoto) 2000/03/27

まつもと ゆきひろです

[#9509] Re: timeout しない timeout — gotoken@... (GOTO Kentaro) 2000/03/27

In message "[ruby-dev:9506] Re: timeout しない timeout"

[ruby-dev:9429] Re: method_missing(Fixnum)

From: nobu.nakada@...
Date: 2000-03-12 03:20:29 UTC
List: ruby-dev #9429
なかだです。

At Sat, 11 Mar 2000 22:11:54 +0900,
matz@netlab.co.jp (Yukihiro Matsumoto) wrote:
> |  method_missing に Symbol でない値が渡ると undefined method
> |`(null)' とかいわれてしまってワケが分かりません。
> 
> なるほど、でも整数にするよりもArgErrorにしてしまった方がよく
> ありません?

  そうすね。


--- eval.c	2000/03/08 14:19:22	1.34
+++ eval.c	2000/03/12 02:45:32
@@ -3739,8 +3739,13 @@ rb_f_missing(argc, argv, obj)
     char *file = ruby_sourcefile;
     int   line = ruby_sourceline;
+    const char *mname;
 
     if (argc == 0) rb_raise(rb_eArgError, "no id given");
 
     id = NUM2INT(argv[0]);
+    mname = rb_id2name(id);
+    if (!mname) {
+	rb_raise(rb_eArgError, "unknown method id(%ld)", id);
+    }
     argc--; argv++;
 
@@ -3770,6 +3775,4 @@ rb_f_missing(argc, argv, obj)
 	}
 	else if (last_call_status & CSTAT_VCALL) {
-	    const char *mname = rb_id2name(id);
-
 	    if (('a' <= mname[0] && mname[0] <= 'z') || mname[0] == '_') {
 		format = "undefined local variable or method `%s' for %s%s%s";
@@ -3790,5 +3793,5 @@ rb_f_missing(argc, argv, obj)
     *ruby_frame = *_frame.prev->prev;
 
-    rb_raise(rb_eNameError, format, rb_id2name(id),
+    rb_raise(rb_eNameError, format, mname,
 	     desc, desc[0]=='#'?"":":",
 	     desc[0]=='#'?"":rb_class2name(CLASS_OF(obj)));

-- 
そうだ 強気に ちょっと インチキに☆彡
    中田 "Bugるくらいがちょうどいいかも;-)" 伸悦

In This Thread