* lisp.h (local_list4) [USE_LOCAL_ALLOCATORS]: New macro.
[!USE_LOCAL_ALLOCATORS]: Fall back to regular list4.
* frame.h (FRAME_PARAMETER): New macro.
* dispnew.c (init_display):
* fontset.c (Fset_fontset_font):
* frame.c (x_default_parameter):
* xfaces.c (set_font_frame_param, Finternal_merge_in_global_face):
* xfns.c (x_default_scroll_bar_color_parameter)
(x_default_font_parameter, x_create_tip_frame): Use it.
* editfns.c (Fpropertize): Use local_cons.
* process.c (status_message): Use build_local_string.
* xfont.c (xfont_open): Use make_local_string.
* xdisp.c (build_desired_tool_bar_string): Use local_list4.
+2014-09-18 Dmitry Antipov <dmantipov@yandex.ru>
+
+ More and more stack-allocated Lisp objects if USE_LOCAL_ALLOCATORS.
+ * lisp.h (local_list4) [USE_LOCAL_ALLOCATORS]: New macro.
+ [!USE_LOCAL_ALLOCATORS]: Fall back to regular list4.
+ * frame.h (FRAME_PARAMETER): New macro.
+ * dispnew.c (init_display):
+ * fontset.c (Fset_fontset_font):
+ * frame.c (x_default_parameter):
+ * xfaces.c (set_font_frame_param, Finternal_merge_in_global_face):
+ * xfns.c (x_default_scroll_bar_color_parameter)
+ (x_default_font_parameter, x_create_tip_frame): Use it.
+ * editfns.c (Fpropertize): Use local_cons.
+ * process.c (status_message): Use build_local_string.
+ * xfont.c (xfont_open): Use make_local_string.
+ * xdisp.c (build_desired_tool_bar_string): Use local_list4.
+
2014-09-18 Paul Eggert <eggert@cs.ucla.edu>
Port USE_LOCAL_ALLOCATORS code to clang 3.4 x86-64.
/* Update frame parameters to reflect the new type. */
Fmodify_frame_parameters
- (selected_frame, list1 (Fcons (Qtty_type,
- Ftty_type (selected_frame))));
+ (selected_frame, FRAME_PARAMETER (Qtty_type,
+ Ftty_type (selected_frame)));
if (t->display_info.tty->name)
Fmodify_frame_parameters
(selected_frame,
- list1 (Fcons (Qtty, build_string (t->display_info.tty->name))));
+ FRAME_PARAMETER (Qtty, build_string (t->display_info.tty->name)));
else
- Fmodify_frame_parameters (selected_frame, list1 (Fcons (Qtty, Qnil)));
+ Fmodify_frame_parameters (selected_frame, FRAME_PARAMETER (Qtty, Qnil));
}
{
string = Fcopy_sequence (args[0]);
for (i = 1; i < nargs; i += 2)
- properties = Fcons (args[i], Fcons (args[i + 1], properties));
+ properties = local_cons (args[i], local_cons (args[i + 1], properties));
Fadd_text_properties (make_number (0),
make_number (SCHARS (string)),
if (! NILP (font_object))
{
update_auto_fontset_alist (font_object, fontset);
- alist = list1 (Fcons (Qfont, Fcons (name, font_object)));
+ alist = FRAME_PARAMETER (Qfont, Fcons (name, font_object));
Fmodify_frame_parameters (fr, alist);
}
}
tem = x_frame_get_arg (f, alist, prop, xprop, xclass, type);
if (EQ (tem, Qunbound))
tem = deflt;
- x_set_frame_parameters (f, list1 (Fcons (prop, tem)));
+ x_set_frame_parameters (f, FRAME_PARAMETER (prop, tem));
return tem;
}
} \
} while (false)
+/* Handy macro to construct an argument to Fmodify_frame_parameters. */
+
+#define FRAME_PARAMETER(parameter, value) \
+ local_list1 (scoped_cons (parameter, value))
+
/* False means there are no visible garbaged frames. */
extern bool frame_garbaged;
# define local_list1(x) local_cons (x, Qnil)
# define local_list2(x, y) local_cons (x, local_list1 (y))
# define local_list3(x, y, z) local_cons (x, local_list2 (y, z))
+# define local_list4(x, y, z, t) local_cons (x, local_list3 (y, z, t))
/* Return a function-scoped vector of length SIZE, with each element
being INIT. */
# define local_list1(x) list1 (x)
# define local_list2(x, y) list2 (x, y)
# define local_list3(x, y, z) list3 (x, y, z)
+# define local_list4(x, y, z, t) list4 (x, y, z, t)
# define make_local_vector(size, init) Fmake_vector (make_number (size), init)
# define make_local_string(data, nbytes) make_string (data, nbytes)
# define build_local_string(data) build_string (data)
{
string = Fnumber_to_string (make_number (code));
string2 = build_local_string ("\n");
- return concat3 (build_string ("failed with code "),
+ return concat3 (build_local_string ("failed with code "),
string, string2);
}
else
(f, Fmake_string (make_number (size_needed), make_number (' ')));
else
{
- props = list4 (Qdisplay, Qnil, Qmenu_item, Qnil);
+ props = local_list4 (Qdisplay, Qnil, Qmenu_item, Qnil);
Fremove_text_properties (make_number (0), make_number (size),
props, f->desired_tool_bar_string);
}
the start of this item's properties in the tool-bar items
vector. */
image = Fcons (Qimage, plist);
- props = list4 (Qdisplay, image,
- Qmenu_item, make_number (i * TOOL_BAR_ITEM_NSLOTS));
+ props = local_list4 (Qdisplay, image, Qmenu_item,
+ make_number (i * TOOL_BAR_ITEM_NSLOTS));
/* Let the last image hide all remaining spaces in the tool bar
string. The string can be longer than needed when we reuse a
ASET (lface, LFACE_FONT_INDEX, font);
}
f->default_face_done_p = 0;
- Fmodify_frame_parameters (frame, list1 (Fcons (Qfont, font)));
+ Fmodify_frame_parameters (frame, FRAME_PARAMETER (Qfont, font));
}
}
&& newface->font)
{
Lisp_Object name = newface->font->props[FONT_NAME_INDEX];
- Fmodify_frame_parameters (frame, list1 (Fcons (Qfont, name)));
+ Fmodify_frame_parameters (frame, FRAME_PARAMETER (Qfont, name));
}
if (STRINGP (gvec[LFACE_FOREGROUND_INDEX]))
- Fmodify_frame_parameters (frame,
- list1 (Fcons (Qforeground_color,
- gvec[LFACE_FOREGROUND_INDEX])));
+ Fmodify_frame_parameters
+ (frame, FRAME_PARAMETER (Qforeground_color,
+ gvec[LFACE_FOREGROUND_INDEX]));
if (STRINGP (gvec[LFACE_BACKGROUND_INDEX]))
- Fmodify_frame_parameters (frame,
- list1 (Fcons (Qbackground_color,
- gvec[LFACE_BACKGROUND_INDEX])));
+ Fmodify_frame_parameters
+ (frame, FRAME_PARAMETER (Qbackground_color,
+ gvec[LFACE_BACKGROUND_INDEX]));
}
}
#endif /* not USE_TOOLKIT_SCROLL_BARS */
}
- x_set_frame_parameters (f, list1 (Fcons (prop, tem)));
+ x_set_frame_parameters (f, FRAME_PARAMETER (prop, tem));
return tem;
}
{
/* Remember the explicit font parameter, so we can re-apply it after
we've applied the `default' face settings. */
- x_set_frame_parameters (f, list1 (Fcons (Qfont_param, font_param)));
+ x_set_frame_parameters (f, FRAME_PARAMETER (Qfont_param, font_param));
}
/* This call will make X resources override any system font setting. */
/* Add `tooltip' frame parameter's default value. */
if (NILP (Fframe_parameter (frame, Qtooltip)))
- Fmodify_frame_parameters (frame, list1 (Fcons (Qtooltip, Qt)));
+ Fmodify_frame_parameters (frame, FRAME_PARAMETER (Qtooltip, Qt));
/* FIXME - can this be done in a similar way to normal frames?
http://lists.gnu.org/archive/html/emacs-devel/2007-10/msg00641.html */
disptype = intern ("color");
if (NILP (Fframe_parameter (frame, Qdisplay_type)))
- Fmodify_frame_parameters (frame, list1 (Fcons (Qdisplay_type, disptype)));
+ Fmodify_frame_parameters
+ (frame, FRAME_PARAMETER (Qdisplay_type, disptype));
}
/* Set up faces after all frame parameters are known. This call
call2 (Qface_set_after_frame_default, frame, Qnil);
if (!EQ (bg, Fframe_parameter (frame, Qbackground_color)))
- Fmodify_frame_parameters (frame, list1 (Fcons (Qbackground_color, bg)));
+ Fmodify_frame_parameters (frame, FRAME_PARAMETER (Qbackground_color, bg));
}
f->no_split = 1;
if (dashes >= 13)
{
len = xfont_decode_coding_xlfd (p0, -1, name);
- fullname = Fdowncase (make_string (name, len));
+ fullname = Fdowncase (make_local_string (name, len));
}
XFree (p0);
}