[Swig-user] enum constants vs. functions returning an enum value

Chris Shoemaker c.shoemaker at cox.net
Wed Aug 16 23:46:37 EDT 2006


On Wed, Aug 16, 2006 at 10:08:44PM -0500, John Lenz wrote:
> On 08/16/06 20:19, Chris Shoemaker wrote:
> > Assuming this behavior makes as much sense to other people as it does
> > to me, I think the idea of using a static variable and a
> > scm_c_define() is a good change.  And we can wait for a formal release
> > by using the short-term solution above.  The only thing I wonder about
> > is... wouldn't that be a not-backward-compatible change to swig?
> > 
> 
> I mentioned I would enable this by a feature (read about features
> http://www.swig.org/Doc1.3/Customization.html#features the section about
> Feature Flags).  By default, the feature would be off (the old
> behavior), but you could either globally turn on the feature for every
> enum, or mark individual enums in the .i file you wanted to use the new
> behavior.

Ah, I see.

> So if no scmstub is given, I will have it export
> scm_c_eval_string("(set! %s (%s))");
> into the init section (from code).  Thus, we use (set!) either in the
> scmstub or in the init.
> 
> I do it this way so the old behavior of exporting it as a function stays
> the default, and so I don't need to change any of the wrapping... just
> some extra output if the flag is defined.
> 
> so the slightly modified code would look like (notice the test for the
> feature on this node (the n variable).
> 
> 
> if (Getflag(n, "feature:enumasvar") {
>   if (scmstub) {
>    Printf(scmtext, "(set! %s (%s))\n", name, name);
>   } else {
>    Printf(f_init, "scm_c_eval_string(\"(set! %s (%s))\");\n", name, name);
>   }
> }

Wow, it seems so simple.  Yeah, I think this is a good feature.  BTW,
do you have a feel for how many projects use SWIG for the guile
bindings?

-chris


More information about the gnucash-devel mailing list