From: nobu.nakada@... Date: 2002-08-09T21:51:16+09:00 Subject: [ruby-dev:17968] [PATCH] source file/line of Proc なかだです。 Procを使うスクリプトをデバッグしていると、一体どれがどのブロッ クに対応するのか分からなくなることがないでしょうか。ということ でProc#to_sにファイル名と行番号を追加するパッチです。 Index: eval.c =================================================================== RCS file: /cvs/ruby/src/ruby/eval.c,v retrieving revision 1.309 diff -u -2 -p -r1.309 eval.c --- eval.c 3 Aug 2002 12:27:33 -0000 1.309 +++ eval.c 7 Aug 2002 01:35:55 -0000 @@ -6623,9 +6623,18 @@ proc_to_s(self, other) struct BLOCK *data; char *cname = rb_class2name(CLASS_OF(self)); + long len = strlen(cname)+6+16+1; /* 6:tags 16:addr 1:nul */ VALUE str; Data_Get_Struct(self, struct BLOCK, data); - str = rb_str_new(0, strlen(cname)+6+16+1); /* 6:tags 16:addr 1:nul */ - sprintf(RSTRING(str)->ptr, "#<%s:0x%p>", cname, data->tag); + if (data->body) { + len += strlen(data->body->nd_file)+16; + str = rb_str_new(0, len); + sprintf(RSTRING(str)->ptr, "#<%s:0x%p@%s:%d>", cname, data->tag, + data->body->nd_file, nd_line(data->body)); + } + else { + str = rb_str_new(0, len); + sprintf(RSTRING(str)->ptr, "#<%s:0x%p>", cname, data->tag); + } RSTRING(str)->len = strlen(RSTRING(str)->ptr); if (OBJ_TAINTED(self)) OBJ_TAINT(str); -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦