Now the mark_object's stack is just 32 bytes on a 64-bit
system, which means extra 20% off the stack usage.
* alloc.c (mark_save_value): As before, refactored out from ...
(mark_object): ... adjusted user. Also add comment.
This change moves a few cold paths from mark_object to NO_INLINE
functions and adjusts symbol marking loop. According to GCC 4.8.2
-Wstack-usage, this reduces mark_object's stack usage from 80 to
48 bytes on a 64-bit system. For a long byte-force-recompile runs,
stack usage at the mark phase is reduced up to 28%. Surprisingly,
it also gains up to 3% in speed (with default '-O2 -g3' flags).
* alloc.c (mark_compiled, mark_localized_symbol): New functions,
refactored out from ...
(mark_object): ... adjusted user. Also mark symbols in a tight
inner loop.
(mark_face_cache): Add NO_INLINE.
src/term.c (tty_menu_show) [WINDOWSNT]: Make tty_menu_show extern
only for WINDOWSNT.
src/menu.h (tty_menu_show) [WINDOWSNT]: Declare extern only for WINDOWSNT.
* nt/inc/ms-w32.h (POLL_FOR_INPUT): Likewise.
* src/keyboard.c, src/process.c: Do not define POLL_FOR_INPUT here
because it will be defined in generated config.h if needed.
src/term.c (tty_menu_display): Don't position cursor here. Instead,
pass the cursor coordinates to update_frame_with_menu.
(tty_menu_activate): Send the hide cursor command only once in an
iteration through the outer 'while' loop.
src/dispnew.c (update_frame_1): Accept an additional argument
SET_CURSOR_P, and position the cursor at the end of the frame
update only if that argument is non-zero. All callers changed to
provide the additional argument as non-zero, except for
update_frame_with_menu.
(update_frame_with_menu): Accept 2 additional arguments ROW and
COL; if they are non-negative, instruct update_frame_1 not to
position the cursor, and instead position it according to ROW and
COL.
src/dispextern.h (update_frame_with_menu): Update prototype.
* lwlib/lwlib-widget.h: New file, with contents taken from lwlib.h.
(widget_value) [HAVE_NTGUI]: New member 'title'.
* lwlib/lwlib.h: Include lwlib-widget.h.
(change_type, enum button_type, widget_value):
Move to lwlib-widget.h.
* src/gtkutil.h, src/menu.h: Include lwlib-widget.h, not lwlib-h, to avoid
dependency on libXt-devel.
* src/menu.h [HAVE_NTGUI]: Include lwlib-widget.h in this case too.
(enum button_type, widget_value) [HAVE_NTGUI]: Remove, as
lwlib-widget.h now does this.
* src/nsmenu.m (ns_menu_show): "enabled" -> "enable" to fix typo.
configure.ac (C_HEAP_SWITCH): Remove.
src/w32heap.c (DUMPED_HEAP_SIZE): Move from w32heap.h. Don't use
HEAPSIZE; instead, define separate values for the 32- and 64-bit
builds.
src/Makefile.in (C_HEAP_SWITCH): Remove.
(ALL_CFLAGS): Don't use $(C_HEAP_SWITCH).
src/w32menu.c (w32_menu_show): Fix a typo that broke compilation.
src/menu.h (enum button_type, struct _widget_value) [HAVE_NTGUI]:
Define instead of including ../lwlib/lwlib.h, which causes
compilation errors due to missing X11 headers.
src/w32heap.c (malloc_after_dump, realloc_after_dump): Update the
emulated break value only if it goes up.
(sbrk): Add assertion that the INCREMENT argument is strictly
zero. Improve and correct the commentary.
* conf_post.h (FLEXIBLE_ARRAY_MEMBER): Fix comment.
* lisp.h (ENUMABLE) [!_AIX]: Don't define to 0 merely because we're
not on AIX; since we're on the trunk we can use enums more broadly.
And only if it's not pre-4.2 GCC.
* lisp.h (ENUMABLE, DEFINE_GDB_SYMBOL_ENUM): New macros.
(ARRAY_MARK_FLAG, PSEUDOVECTOR_FLAG, VALMASK): Use them.
(ARRAY_MARK_FLAG_val, PSEUDOVECTOR_FLAG_val, VALMASK_val):
New macros.