VALUE rbgobj_ruby_object_from_instance2(gpointer instance, gboolean alloc) { VALUE object; GType type; if (!instance) return Qnil; type = G_TYPE_FROM_INSTANCE(instance); if (alloc) { GType parent_type; for (parent_type = type; parent_type != G_TYPE_INVALID; parent_type = g_type_parent(parent_type)) { if (rbgobj_convert_instance2robj(parent_type, instance, &object)) return object; } } switch (G_TYPE_FUNDAMENTAL(type)) { case G_TYPE_OBJECT: return rbgobj_get_ruby_object_from_gobject(instance, alloc); case G_TYPE_PARAM: return rbgobj_get_ruby_object_from_param_spec(instance, alloc); default: if (alloc) { rb_raise(rb_eTypeError, "%s isn't supported", g_type_name(type)); } else { return Qnil; } } }
VALUE rbgobj_make_boxed(gpointer p, GType gtype) { VALUE result; if (!p) return Qnil; if (rbgobj_convert_instance2robj(gtype, p, &result)) { return result; } return rbgobj_make_boxed_default(p, gtype); }