X-Git-Url: https://git.distorted.org.uk/~mdw/sod/blobdiff_plain/6bc944c3cebb89056d9ed0b53eff6260909291a9..ed00691544c3b6d4ad15b1c7ef975964ea72b0b6:/lib/sod.h diff --git a/lib/sod.h b/lib/sod.h index cb6b046..efac06b 100644 --- a/lib/sod.h +++ b/lib/sod.h @@ -53,7 +53,7 @@ struct sod_vtable { * these. */ struct sod_instance { - struct sod_vtable *_vt; /* Pointer to (chain's) vtable */ + const struct sod_vtable *_vt; /* Pointer to (chain's) vtable */ }; /* Information about a particular chain of superclasses. In each class, @@ -76,14 +76,15 @@ struct sod_chain { * Arguments: @chead@ = nickname of target chain's head * @obj@ = pointer to an instance chain * - * Returns: Pointer to target chain, as a @char *@. + * Returns: Pointer to target chain, as a @void *@. * * Use: Utility for implementing cross-chain upcasts. It's probably * not that clever to use this macro directly; it's used to make * the automatically-generated upcast macros more palatable. */ -#define SOD_XCHAIN(chead, obj) ((char *)(obj) + (obj)->_vt->_off_##chead) +#define SOD_XCHAIN(chead, obj) \ + ((void *)((char *)(obj) + (obj)->_vt->_off_##chead)) /* --- @SOD_OFFSETDIFF@ --- * * @@ -124,7 +125,7 @@ struct sod_chain { ((struct cls##__ilayout *) \ ((char *)(obj) - offsetof(struct cls##__ilayout, chead))) -/* --- @SOD__CAR@ --- * +/* --- @SOD_CAR@ --- * * * Arguments: @...@ = a nonempty list of arguments * @@ -132,7 +133,7 @@ struct sod_chain { */ #if __STDC_VERSION__ >= 199901 -# define SOD__CAR(...) SOD__CARx(__VA_LIST__, _) +# define SOD_CAR(...) SOD__CARx(__VA_LIST__, _) # define SOD__CARx(a, ...) a #endif