I've been trying to add the superclass. Adding it to <vector> and <bytevector> turned out to be extremely simple, but the problem emerged when I was trying to generalize the <array> class.
The thing is that <array> is implemented as a smob, and that there is no easy way to add a superclass to a class created from smob. I can think of a number of ways of making a workaround, but all of them are nasty. Each of them will require the modification of goops.c: create_smob_classes. The first way would be to check whether !strcmp (SCM_SMOBNAME (i), "array") and to behave appropriately when it happens. But that would be just ugly. The other two ways that come to my mind would be: 1. to modify the type `scm_smob_descriptor', adding SCM supers; /* list of superclasses */ or, equivalently 2. to add a new global array, SCM_API SCM smob_supers[MAX_SMOB_COUNT], such that their default would either be SCM_EOL, or scm_list1(scm_class_top). The other idea would be to mess with scm_sys_inherit_magic_x and add a superclass after the creation of "<array>", but that doesn't sound too sound (at least for as long as this action is undocumented) So to me it seems that adding the <generalized-array> (or however should it be called) that would be the ancestor of "array" requires some changes in the guile API. I wouldn't do it without the overall approval. Best regards M. 2011/9/3, Andy Wingo <wi...@pobox.com>: > Hi Panicz, > > On Fri 02 Sep 2011 21:53, Panicz Maciej Godek <godek.mac...@gmail.com> > writes: > >> In other words, classes <vector>, <uvec> and <array> have nothing in >> common, which requires me to triple the number of methods that could >> accept any of these types. > > We should fix this. We can probably do it in 2.0. Interested in > sending a patch? > > Currently this stuff is in C, unfortunately. Perhaps it should move to > Scheme at some point, but if you just wanted to add an <array> or > <generalized-vector> superclass, see goops.c. Look for the <uvec> stuff > and follow the patterns. > > Andy > -- > http://wingolog.org/ >