projects
/
m17n
/
m17n-lib.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
*** empty log message ***
[m17n/m17n-lib.git]
/
src
/
plist.h
diff --git
a/src/plist.h
b/src/plist.h
index
1d89c16
..
80f94aa
100644
(file)
--- 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. */
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;
/**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)
/** 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)
#define MPLIST_NEXT(plist) ((plist)->next)
#define MPLIST_TAIL_P(plist) ((plist)->key == Mnil)
@@
-55,10
+59,15
@@
struct MPlist
#define MPLIST_PLIST_P(plist) (MPLIST_KEY (plist) == Mplist)
#define MPLIST_NESTED_P(plist) \
#define MPLIST_PLIST_P(plist) (MPLIST_KEY (plist) == Mplist)
#define MPLIST_NESTED_P(plist) \
- (MPLIST_PLIST_P (plist) || ((plist)->control.flag & 1))
+ ((plist)->control.flag & 1)
#define MPLIST_SET_NESTED_P(plist) \
((plist)->control.flag |= 1)
#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))
#define MPLIST_SYMBOL(plist) ((MSymbol) MPLIST_VAL (plist))
#define MPLIST_STRING(plist) ((char *) MPLIST_VAL (plist))
#define MPLIST_MTEXT(plist) ((MText *) MPLIST_VAL (plist))