diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2013-07-01 20:41:16 -0700 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2013-07-01 20:41:16 -0700 |
commit | 52a9bcae40a1c8536cf70cc4622a6877024e4b36 (patch) | |
tree | 90f239c0a7f16286c3938b1e1f4c8b72ce56b1e9 /src/keymap.c | |
parent | bb70a65f1de65b5abf87c0b43d03e55ed6e579f6 (diff) | |
download | emacs-52a9bcae40a1c8536cf70cc4622a6877024e4b36.tar.gz |
Don't convert function pointers to void * and back.
It isn't portable C, and it's easy enough to avoid.
* alloc.c: Verify SAVE_FUNCPOINTER bits, too.
(make_save_value): Add support for SAVE_FUNCPOINTER.
* keymap.c (map_keymap_char_table_item, map_keymap_internal):
* print.c (print_object):
Distinguish function from object pointers.
* lisp.h (SAVE_FUNCPOINTER): New constant.
(SAVE_SLOT_BITS): Adjust to it.
(SAVE_TYPE_FUNCPTR_PTR_OBJ): New constant, replacing
SAVE_TYPE_PTR_PTR_OBJ. Change the only use.
(voidfuncptr): New typedef.
(struct Lisp_Save_Value): New member data[0].funcpointer.
(XSAVE_FUNCPOINTER): New function.
Diffstat (limited to 'src/keymap.c')
-rw-r--r-- | src/keymap.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/src/keymap.c b/src/keymap.c index 4e3eff332cc..d29d5636e1c 100644 --- a/src/keymap.c +++ b/src/keymap.c @@ -572,7 +572,7 @@ map_keymap_char_table_item (Lisp_Object args, Lisp_Object key, Lisp_Object val) if (!NILP (val)) { map_keymap_function_t fun - = (map_keymap_function_t) XSAVE_POINTER (args, 0); + = (map_keymap_function_t) XSAVE_FUNCPOINTER (args, 0); /* If the key is a range, make a copy since map_char_table modifies it in place. */ if (CONSP (key)) @@ -617,8 +617,8 @@ map_keymap_internal (Lisp_Object map, } else if (CHAR_TABLE_P (binding)) map_char_table (map_keymap_char_table_item, Qnil, binding, - make_save_value (SAVE_TYPE_PTR_PTR_OBJ, - fun, data, args)); + make_save_value (SAVE_TYPE_FUNCPTR_PTR_OBJ, + (voidfuncptr) fun, data, args)); } UNGCPRO; return tail; |