[PD-dev] type of A_GIMME argc?
Miller Puckette via Pd-dev
pd-dev at lists.iem.at
Mon Jun 2 17:34:45 CEST 2014
... oops, and to belatedly respond to some other questions raiesd below -
t_int is much overused in m_pd.h - I'm windering if I can just change
them to 'int' without causing any damage?
On Mon, Jun 02, 2014 at 12:03:13PM +0200, IOhannes m zmoelnig via Pd-dev wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA256
> recently, i received a bug-report for the "puredata" Debian-package,
> that warned of conflicting declarations of the glist_scalar() function.
> the problem seems to be, that glist_scalar() uses "int argc" for it's
> A_GIMME argument in the declaration in g_canvas.c, but uses "t_int
> argc" in the function definition in g_scalar.c.
> now "t_int" is defined as a "pointer-sized integer", which is a "long
> int" on amd64, thus incompatible with the 32bit "int".
> it is often tempting to use "t_int" whenever possible, as it is the
> Pd-native integer type.
> unfortunately this can (and will) break binary compatibility in some
> i think it should be *well documented* which types to use.
> e.g. the only way to find out how to use A_GIMME is reading the source
> code (where we have at least 4 occurences that use "t_int"
> (glist_scalar(), curve_new(), plot_new() and drawnumber_new()) and a
> lot more (>200) uses of "int".
> also t_listmethod and t_anymethod in m_imp.h seem to suggest that
> "int" is the correct type (though "m_imp.h" was historically
> considered a "private" header, not meant for documentation).
> i think it's necessary to fix all uses of "t_int argc" to "int argc".
> additionally i think it would be good to:
> - - clearly document the function-signature for (A_GIMME) callbacks (and
> while doing so, move the various callback-typedefs from m_imp.h to m_pd.h)
> - - split the generic "t_int" type into multiple names, that suggest
> their usage.
> afaict, the original use of "t_int" is for the dsp process function
> (t_perfroutine) , though the name does not suggest anything like this.
> probably we should move to a new (probably even more pointer-like) type
> typedef t_perfarg void*;
> and replace all other uses of t_int (e.g. the return value of
> "atom_getint()" or the struct-member "t_resample.upsample") by other
> types, e.g. "int",
> for compatibility reasons, we might need to keep the two (or more)
> types the same size, but they should be separated on a semantic level.
> PS: it's pure coincidence that we had this recent conversation on
> pd-list, where argc was declared "short".
>  https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=750168
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1
> Comment: Using GnuPG with Icedove - http://www.enigmail.net/
> -----END PGP SIGNATURE-----
> Pd-dev mailing list
> Pd-dev at lists.iem.at
More information about the Pd-dev