* src/lisp.h (XSAVE_POINTER, XSAVE_INTEGER): Change to allow extraction
from any Lisp_Save_Value slot. Add type checking. * src/alloc.c, src/dired.c, src/editfns.c, src/fileio.c, src/ftfont.c: * src/gtkutil.c, src/keymap.c, src/lread.c, src/nsterm.h, src/nsmenu.c: * src/xfns.c, src/xmenu.c, src/xselect.c: All users changed. * admin/coccinelle/xsave.cocci: Semantic patch to adjust users of XSAVE_POINTER and XSAVE_INTEGER macros.
This commit is contained in:
parent
1b971ac155
commit
2b30549c49
18 changed files with 61 additions and 31 deletions
|
@ -1,3 +1,8 @@
|
|||
2013-01-15 Dmitry Antipov <dmantipov@yandex.ru>
|
||||
|
||||
* coccinelle/xsave.cocci: Semantic patch to adjust users of
|
||||
XSAVE_POINTER and XSAVE_INTEGER macros.
|
||||
|
||||
2013-01-03 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* check-doc-strings: Update for CVS->bzr, moved lispref/ directory.
|
||||
|
|
11
admin/coccinelle/xsave.cocci
Normal file
11
admin/coccinelle/xsave.cocci
Normal file
|
@ -0,0 +1,11 @@
|
|||
// Adjust users of XSAVE_POINTER and XSAVE_INTEGER.
|
||||
@@
|
||||
expression E;
|
||||
@@
|
||||
(
|
||||
- XSAVE_POINTER (E)
|
||||
+ XSAVE_POINTER (E, 0)
|
||||
|
|
||||
- XSAVE_INTEGER (E)
|
||||
+ XSAVE_INTEGER (E, 1)
|
||||
)
|
|
@ -1,3 +1,11 @@
|
|||
2013-01-15 Dmitry Antipov <dmantipov@yandex.ru>
|
||||
|
||||
* lisp.h (XSAVE_POINTER, XSAVE_INTEGER): Change to allow
|
||||
extraction from any Lisp_Save_Value slot. Add type checking.
|
||||
* alloc.c, dired.c, editfns.c, fileio.c, ftfont.c, gtkutil.c:
|
||||
* keymap.c, lread.c, nsterm.h, nsmenu.c, xfns.c, xmenu.c:
|
||||
* xselect.c: All users changed.
|
||||
|
||||
2013-01-15 Dmitry Antipov <dmantipov@yandex.ru>
|
||||
|
||||
Some convenient bits to deal with Lisp_Save_Values.
|
||||
|
|
|
@ -3420,7 +3420,7 @@ make_save_value (void *pointer, ptrdiff_t integer)
|
|||
void
|
||||
free_save_value (Lisp_Object save)
|
||||
{
|
||||
xfree (XSAVE_POINTER (save));
|
||||
xfree (XSAVE_POINTER (save, 0));
|
||||
free_misc (save);
|
||||
}
|
||||
|
||||
|
|
|
@ -78,7 +78,7 @@ directory_files_internal_w32_unwind (Lisp_Object arg)
|
|||
static Lisp_Object
|
||||
directory_files_internal_unwind (Lisp_Object dh)
|
||||
{
|
||||
DIR *d = XSAVE_POINTER (dh);
|
||||
DIR *d = XSAVE_POINTER (dh, 0);
|
||||
block_input ();
|
||||
closedir (d);
|
||||
unblock_input ();
|
||||
|
|
|
@ -4254,7 +4254,7 @@ usage: (format STRING &rest OBJECTS) */)
|
|||
memcpy (buf, initial_buffer, used);
|
||||
}
|
||||
else
|
||||
XSAVE_POINTER (buf_save_value) = buf = xrealloc (buf, bufsize);
|
||||
XSAVE_POINTER (buf_save_value, 0) = buf = xrealloc (buf, bufsize);
|
||||
|
||||
p = buf + used;
|
||||
}
|
||||
|
|
|
@ -5507,7 +5507,7 @@ static Lisp_Object
|
|||
do_auto_save_unwind (Lisp_Object arg) /* used as unwind-protect function */
|
||||
|
||||
{
|
||||
FILE *stream = XSAVE_POINTER (arg);
|
||||
FILE *stream = XSAVE_POINTER (arg, 0);
|
||||
auto_saving = 0;
|
||||
if (stream != NULL)
|
||||
{
|
||||
|
|
|
@ -1857,7 +1857,7 @@ otf_open (Lisp_Object file)
|
|||
OTF *otf;
|
||||
|
||||
if (! NILP (val))
|
||||
otf = XSAVE_POINTER (XCDR (val));
|
||||
otf = XSAVE_POINTER (XCDR (val), 0);
|
||||
else
|
||||
{
|
||||
otf = STRINGP (file) ? OTF_open (SSDATA (file)) : NULL;
|
||||
|
|
18
src/ftfont.c
18
src/ftfont.c
|
@ -400,7 +400,7 @@ ftfont_lookup_cache (Lisp_Object key, enum ftfont_cache_for cache_for)
|
|||
else
|
||||
{
|
||||
val = XCDR (cache);
|
||||
cache_data = XSAVE_POINTER (val);
|
||||
cache_data = XSAVE_POINTER (val, 0);
|
||||
}
|
||||
|
||||
if (cache_for == FTFONT_CACHE_FOR_ENTITY)
|
||||
|
@ -466,7 +466,7 @@ ftfont_get_fc_charset (Lisp_Object entity)
|
|||
|
||||
cache = ftfont_lookup_cache (entity, FTFONT_CACHE_FOR_CHARSET);
|
||||
val = XCDR (cache);
|
||||
cache_data = XSAVE_POINTER (val);
|
||||
cache_data = XSAVE_POINTER (val, 0);
|
||||
return cache_data->fc_charset;
|
||||
}
|
||||
|
||||
|
@ -1198,9 +1198,9 @@ ftfont_open (FRAME_PTR f, Lisp_Object entity, int pixel_size)
|
|||
filename = XCAR (val);
|
||||
idx = XCDR (val);
|
||||
val = XCDR (cache);
|
||||
cache_data = XSAVE_POINTER (XCDR (cache));
|
||||
cache_data = XSAVE_POINTER (XCDR (cache), 0);
|
||||
ft_face = cache_data->ft_face;
|
||||
if (XSAVE_INTEGER (val) > 0)
|
||||
if (XSAVE_INTEGER (val, 1) > 0)
|
||||
{
|
||||
/* FT_Face in this cache is already used by the different size. */
|
||||
if (FT_New_Size (ft_face, &ft_size) != 0)
|
||||
|
@ -1211,13 +1211,13 @@ ftfont_open (FRAME_PTR f, Lisp_Object entity, int pixel_size)
|
|||
return Qnil;
|
||||
}
|
||||
}
|
||||
XSAVE_INTEGER (val)++;
|
||||
XSAVE_INTEGER (val, 1)++;
|
||||
size = XINT (AREF (entity, FONT_SIZE_INDEX));
|
||||
if (size == 0)
|
||||
size = pixel_size;
|
||||
if (FT_Set_Pixel_Sizes (ft_face, size, size) != 0)
|
||||
{
|
||||
if (XSAVE_INTEGER (val) == 0)
|
||||
if (XSAVE_INTEGER (val, 1) == 0)
|
||||
FT_Done_Face (ft_face);
|
||||
return Qnil;
|
||||
}
|
||||
|
@ -1326,10 +1326,10 @@ ftfont_close (FRAME_PTR f, struct font *font)
|
|||
cache = ftfont_lookup_cache (val, FTFONT_CACHE_FOR_FACE);
|
||||
eassert (CONSP (cache));
|
||||
val = XCDR (cache);
|
||||
(XSAVE_INTEGER (val))--;
|
||||
if (XSAVE_INTEGER (val) == 0)
|
||||
XSAVE_INTEGER (val, 1)--;
|
||||
if (XSAVE_INTEGER (val, 1) == 0)
|
||||
{
|
||||
struct ftfont_cache_data *cache_data = XSAVE_POINTER (val);
|
||||
struct ftfont_cache_data *cache_data = XSAVE_POINTER (val, 0);
|
||||
|
||||
FT_Done_Face (cache_data->ft_face);
|
||||
#ifdef HAVE_LIBOTF
|
||||
|
|
|
@ -1650,7 +1650,7 @@ xg_dialog_response_cb (GtkDialog *w,
|
|||
static Lisp_Object
|
||||
pop_down_dialog (Lisp_Object arg)
|
||||
{
|
||||
struct xg_dialog_data *dd = XSAVE_POINTER (arg);
|
||||
struct xg_dialog_data *dd = XSAVE_POINTER (arg, 0);
|
||||
|
||||
block_input ();
|
||||
if (dd->w) gtk_widget_destroy (dd->w);
|
||||
|
|
|
@ -565,14 +565,14 @@ map_keymap_char_table_item (Lisp_Object args, Lisp_Object key, Lisp_Object val)
|
|||
{
|
||||
if (!NILP (val))
|
||||
{
|
||||
map_keymap_function_t fun = XSAVE_POINTER (XCAR (args));
|
||||
map_keymap_function_t fun = XSAVE_POINTER (XCAR (args), 0);
|
||||
args = XCDR (args);
|
||||
/* If the key is a range, make a copy since map_char_table modifies
|
||||
it in place. */
|
||||
if (CONSP (key))
|
||||
key = Fcons (XCAR (key), XCDR (key));
|
||||
map_keymap_item (fun, XCDR (args), key, val,
|
||||
XSAVE_POINTER (XCAR (args)));
|
||||
XSAVE_POINTER (XCAR (args), 0));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
14
src/lisp.h
14
src/lisp.h
|
@ -1413,15 +1413,21 @@ struct Lisp_Save_Value
|
|||
} data[4];
|
||||
};
|
||||
|
||||
/* Compatibility macro to set and extract saved pointer. */
|
||||
/* Macro to set and extract Nth saved pointer. Type
|
||||
checking is ugly because it's used as an lvalue. */
|
||||
|
||||
#define XSAVE_POINTER(obj) XSAVE_VALUE (obj)->data[0].pointer
|
||||
#define XSAVE_POINTER(obj, n) \
|
||||
XSAVE_VALUE (obj)->data[(eassert (XSAVE_VALUE (obj)->type \
|
||||
## n == SAVE_POINTER), n)].pointer
|
||||
|
||||
/* Likewise for the saved integer. */
|
||||
|
||||
#define XSAVE_INTEGER(obj) XSAVE_VALUE (obj)->data[1].integer
|
||||
#define XSAVE_INTEGER(obj, n) \
|
||||
XSAVE_VALUE (obj)->data[(eassert (XSAVE_VALUE (obj)->type \
|
||||
## n == SAVE_INTEGER), n)].integer
|
||||
|
||||
/* Macro to extract Nth saved object. */
|
||||
/* Macro to extract Nth saved object. This is never used as
|
||||
an lvalue, so we can do more convenient type checking. */
|
||||
|
||||
#define XSAVE_OBJECT(obj, n) \
|
||||
(eassert (XSAVE_VALUE (obj)->type ## n == SAVE_OBJECT), \
|
||||
|
|
|
@ -1357,7 +1357,7 @@ Return t if the file exists and loads successfully. */)
|
|||
static Lisp_Object
|
||||
load_unwind (Lisp_Object arg) /* Used as unwind-protect function in load. */
|
||||
{
|
||||
FILE *stream = XSAVE_POINTER (arg);
|
||||
FILE *stream = XSAVE_POINTER (arg, 0);
|
||||
if (stream != NULL)
|
||||
{
|
||||
block_input ();
|
||||
|
|
|
@ -1347,7 +1347,7 @@ - (NSRect) frame
|
|||
static Lisp_Object
|
||||
pop_down_menu (Lisp_Object arg)
|
||||
{
|
||||
struct Popdown_data *unwind_data = XSAVE_POINTER (arg);
|
||||
struct Popdown_data *unwind_data = XSAVE_POINTER (arg, 0);
|
||||
|
||||
block_input ();
|
||||
if (popup_activated_flag)
|
||||
|
|
|
@ -675,9 +675,9 @@ struct x_output
|
|||
#define FRAME_FONT(f) ((f)->output_data.ns->font)
|
||||
|
||||
#ifdef __OBJC__
|
||||
#define XNS_SCROLL_BAR(vec) ((id) XSAVE_POINTER (vec))
|
||||
#define XNS_SCROLL_BAR(vec) ((id) XSAVE_POINTER (vec, 0))
|
||||
#else
|
||||
#define XNS_SCROLL_BAR(vec) XSAVE_POINTER (vec)
|
||||
#define XNS_SCROLL_BAR(vec) XSAVE_POINTER (vec, 0)
|
||||
#endif
|
||||
|
||||
/* Compute pixel size for vertical scroll bars */
|
||||
|
|
|
@ -5292,7 +5292,7 @@ file_dialog_unmap_cb (Widget widget, XtPointer client_data, XtPointer call_data)
|
|||
static Lisp_Object
|
||||
clean_up_file_dialog (Lisp_Object arg)
|
||||
{
|
||||
Widget dialog = XSAVE_POINTER (arg);
|
||||
Widget dialog = XSAVE_POINTER (arg, 0);
|
||||
|
||||
/* Clean up. */
|
||||
block_input ();
|
||||
|
|
|
@ -1413,7 +1413,7 @@ pop_down_menu (Lisp_Object arg)
|
|||
{
|
||||
popup_activated_flag = 0;
|
||||
block_input ();
|
||||
gtk_widget_destroy (GTK_WIDGET (XSAVE_POINTER (arg)));
|
||||
gtk_widget_destroy (GTK_WIDGET (XSAVE_POINTER (arg, 0)));
|
||||
unblock_input ();
|
||||
return Qnil;
|
||||
}
|
||||
|
@ -1610,7 +1610,7 @@ create_and_show_popup_menu (FRAME_PTR f, widget_value *first_wv,
|
|||
static Lisp_Object
|
||||
cleanup_widget_value_tree (Lisp_Object arg)
|
||||
{
|
||||
free_menubar_widget_value_tree (XSAVE_POINTER (arg));
|
||||
free_menubar_widget_value_tree (XSAVE_POINTER (arg, 0));
|
||||
return Qnil;
|
||||
}
|
||||
|
||||
|
@ -2236,8 +2236,8 @@ menu_help_callback (char const *help_string, int pane, int item)
|
|||
static Lisp_Object
|
||||
pop_down_menu (Lisp_Object arg)
|
||||
{
|
||||
FRAME_PTR f = XSAVE_POINTER (Fcar (arg));
|
||||
XMenu *menu = XSAVE_POINTER (Fcdr (arg));
|
||||
FRAME_PTR f = XSAVE_POINTER (Fcar (arg), 0);
|
||||
XMenu *menu = XSAVE_POINTER (Fcdr (arg), 0);
|
||||
|
||||
block_input ();
|
||||
#ifndef MSDOS
|
||||
|
|
|
@ -1120,7 +1120,7 @@ unexpect_property_change (struct prop_location *location)
|
|||
static Lisp_Object
|
||||
wait_for_property_change_unwind (Lisp_Object loc)
|
||||
{
|
||||
struct prop_location *location = XSAVE_POINTER (loc);
|
||||
struct prop_location *location = XSAVE_POINTER (loc, 0);
|
||||
|
||||
unexpect_property_change (location);
|
||||
if (location == property_change_reply_object)
|
||||
|
|
Loading…
Add table
Reference in a new issue