From: Masao M. <mu...@hi...> - 2003-07-10 14:03:31
|
むとうです。 On Thu, 10 Jul 2003 14:03:47 +0900 (JST) Masahiro Sakai (酒井政裕) <sa...@to...> wrote: > さかいです。 > > Modified Files: > > rbgobj_type.c rbgobj_value.c rbgobj_valuetypes.c > > Log Message: > > * src/rbgobj_value.c, rbgobj_value_types.c, rbgobj_type.c: > > Accept rb_cObject as G_TYPE_POINTER. > (snip) > > gpointer ptr = g_value_get_pointer(value); > > if (!ptr) > > return Qnil; > > - else > > - return rbgobj_ptr_new(G_VALUE_TYPE(value), ptr); > > + else{ > > + if (rb_obj_is_kind_of(ptr, rb_cObject)){ > > 正しいVALUEかどうかわからないポインタにrb_obj_is_kind_of()を適用するのは > 危険ではないでしょうか? rbgobj_gvalue_to_rvalue()に渡されるGValue値でgpointerに渡される VALUE以外の値は無いんじゃないのかなぁ、と思いそのようにしました。 あったらバグかなと。 一部、シグナル等でgpointerが返ってくるのがあるのですが、それは呼び出し元 で適切なオブジェクトに独自に変換しますよね。 そういうのはrbgobj_gvalue_to_rvalue()を使いませんし。 ex) gtk/src/rbgtknotebook.cのsignal_g2r_func(num, values) つまり、GLib::Pointerっていらないんじゃないかなと。 GLib::Pointerのまま返されてもRuby側では使えないですしね。 実は、上記も、あえてrbobj_ptr_newを残しましたが、それもいらないん じゃないかなぁと思うのですが、どうでしょうか。 なんかまたスゲー勘違いしてます?(いつものコトですが(^^;))。 -- .:% Masao Mutoh<mu...@hi...> |