On Fri, Oct 23, 2009 at 09:59:06 -0600, Shawn Ferris wrote: > Hi All -- > > I've been trying to troubleshoot a problem with the libgda vapi and I just > can't figure out where it's coming from.. decided it was time to ask. I'm > sure this is something stupid, but I can't find it. > > The vapi has this: > > public GLib.Value get_value_at (int col, int row) throws GLib.Error; > > Which looks good according to the header from libgda. But the generated c > is: > > GValue _tmp10_; > GValue _tmp9_ = {0}; > _tmp10_ = (gda_data_model_get_value_at (self->res, 1, 1, &_tmp9_, > &_inner_error_), _tmp9_); > > The problem is that &_tmp9_ is being injected into the arguments and I can't > figure out how to prevent it. gda_data_model_get_value_at should return the > value rather then set it through a pointer.
Hm, gda_data_model_get_value_at's signature is evil. GValue is normally passed by reference and for that reason it is not a [SimpleType]. That however means Vala assumes it's returned by reference too. All GValue-returning functions in glib, gdk and gtk do it that way. I don't know whether there is any [CCode(...)] attribute to force pass or return by value. In fact I think returning it by value is not legal. The type-dependent setter is free to store it in any way it wants, which could teoretically include doing it in a location-dependent fashion, which would make copying the memory in other way than via g_value_copy incorrect. The code generated by vala is not valid either, since the assignment from _tmp9_ to _tmp10_ is not valid for precisely the same reason. -- Jan 'Bulb' Hudec <b...@ucw.cz> _______________________________________________ Vala-list mailing list Vala-list@gnome.org http://mail.gnome.org/mailman/listinfo/vala-list