さかいさん
むとうです。
今、以下のようなサンプルを書いてて気づいたのですが、
signalブロック内のwarningの場所がとてもわかりづらいです。
----------
require 'gtk2'
Gtk.init
b = Gtk::Button.new("click")
b.signal_connect("clicked") do |b|
hoge
end
Gtk::Window.new.add(b).set_default_size(100,100).show_all
Gtk.main
---------
$ruby test.rb
test.rb:12: warning: unexpected jump occured in GClosure invocation
warningの場所がGtk.mainの行になるんですよね。
そこで、以下のようなパッチを書いてみました。
test.rb:7: warning: unexpected jump occured in GClosure invocation
ちょっとはわかりやすくなると思うのですがどうでしょうか?
#でも、この場合はこの場でエラーとして終了してしまっても良いような
#気がしないでもないですが...。
-----
diff -u -r1.19 rbgobj_closure.c
--- rbgobj_closure.c 18 Jul 2003 05:27:21 -0000 1.19
+++ rbgobj_closure.c 20 Jul 2003 09:40:09 -0000
@@ -89,7 +89,7 @@
{
struct marshal_arg arg;
int state;
-
+
arg.closure = closure;
arg.return_value = return_value;
arg.n_param_values = n_param_values;
@@ -99,8 +99,13 @@
rb_protect((VALUE (*)())&rclosure_marshal_body, (VALUE)&arg, &state);
- if (state)
- rb_warn("unexpected jump occured in GClosure invocation");
+ if (state){
+ char buf[BUFSIZ];
+ snprintf(buf, BUFSIZ,
+ "%s:%d: warning: unexpected jump occured in GClosure invocation
\n",
+ ruby_sourcefile, ruby_sourceline);
+ rb_write_deferr(buf);
+ }
}
static VALUE rclosure_marker_list;
--
.:% Masao Mutoh<mu...@hi...>
|