From: Masao M. <mu...@hi...> - 2003-07-20 09:43:34
|
さかいさん むとうです。 今、以下のようなサンプルを書いてて気づいたのですが、 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...> |