On Mon, Aug 14, 2006 at 12:01:53PM -0400, Chris Shoemaker wrote: > On Mon, Aug 14, 2006 at 08:51:35AM -0400, Reed Hedges wrote: > > Chris Shoemaker wrote: > > > However, the wrapper for gncOwnerGetType() returns the enum value > > > immediately, not a thunk. E.g. "(gncOwnerGetType employee)" evaluates > > > to 1. > > > > > > This means that the return value of the wrapper for the function that > > > returns an enum value is not comparable to the enum values. > > > > Doesn't this work? -- > > > > (= (GNC-OWNER-EMPLOYEE) (gncOwnerGetType employee)) > > > > Yes, it does. I just didn't expect to have to treat enum constants as > functions, but maybe that's the easiest way to implement the wrapper. > I'm used to treating constants as immediate scheme objects. However, > I wouldn't be surprised if libguile didn't provide a mechanism for > binding symbols to immediate scheme objects.
Turns out it does: scm_c_define() > G-wrap wraps constants > as immediates, but it generates helper scheme code to do it. And I was wrong about that last part. G-wrap does it right from C. So, SWIG uses scm_c_define_gsubr() to convert the enum value to a _function_ returning the enum value. Is there some reason why it doesn't include: scm_c_define("GNC-OWNER-EMPLOYEE", scm_long2_num(gswig_const_GNC_OWNER_EMPLOYEE)); inside the scm_init_FOO_module() function? That treatment of enum values would allow: (eq? GNC-OWNER-EMPLOYEE (gncOwnerGetType employee)) which seems more natural to me. I've looked at the "enum SWIGTYPE" typemaps for guile, but I didn't see any mechanism for generating code into the scm_init_FOO_module() function. Is that even possible? Thanks. -chris _______________________________________________ gnucash-devel mailing list gnucash-devel@gnucash.org https://lists.gnucash.org/mailman/listinfo/gnucash-devel