X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=src%2Fplist.h;h=931762f0702f65b72c80cfd44a7ebe0bc5a2dd71;hb=0793e3bffb93b37b42eab1223c19ffc70c4ba1ae;hp=1d89c16a9830d8131d1f96d4b0dcdab1ce8ed7a5;hpb=b5b8aa7815757a933f7fc8174781e1df34303de6;p=m17n%2Fm17n-lib.git diff --git a/src/plist.h b/src/plist.h index 1d89c16..931762f 100644 --- a/src/plist.h +++ b/src/plist.h @@ -35,7 +35,10 @@ struct MPlist MSymbol key; /**en Value of the first element of the plist. */ - void *val; + union { + void *pointer; + M17NFunc func; + } val; /**en Plist for the next element. */ MPlist *next; @@ -44,7 +47,8 @@ struct MPlist /** Macros to access each member of PLIST. */ #define MPLIST_KEY(plist) ((plist)->key) -#define MPLIST_VAL(plist) ((plist)->val) +#define MPLIST_VAL(plist) ((plist)->val.pointer) +#define MPLIST_FUNC(plist) ((plist)->val.func) #define MPLIST_NEXT(plist) ((plist)->next) #define MPLIST_TAIL_P(plist) ((plist)->key == Mnil) @@ -59,6 +63,11 @@ struct MPlist #define MPLIST_SET_NESTED_P(plist) \ ((plist)->control.flag |= 1) +#define MPLIST_VAL_FUNC_P(plist) \ + ((plist)->control.flag & 2) +#define MPLIST_SET_VAL_FUNC_P(plist) \ + ((plist)->control.flag |= 2) + #define MPLIST_SYMBOL(plist) ((MSymbol) MPLIST_VAL (plist)) #define MPLIST_STRING(plist) ((char *) MPLIST_VAL (plist)) #define MPLIST_MTEXT(plist) ((MText *) MPLIST_VAL (plist))