[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] /srv/bzr/emacs/trunk r103325: Don't GC-scan stack data red
From: |
Stefan Monnier |
Subject: |
[Emacs-diffs] /srv/bzr/emacs/trunk r103325: Don't GC-scan stack data redundantly. |
Date: |
Thu, 17 Feb 2011 21:07:36 -0500 |
User-agent: |
Bazaar (2.0.3) |
------------------------------------------------------------
revno: 103325
committer: Stefan Monnier <address@hidden>
branch nick: trunk
timestamp: Thu 2011-02-17 21:07:36 -0500
message:
Don't GC-scan stack data redundantly.
* src/alloc.c (Fgarbage_collect): When using stack scanning, don't
redundantly scan byte-code stacks, catchlist, and handlerlist.
* src/bytecode.c (BYTE_MAINTAIN_TOP): New macros.
(struct byte_stack): Only define `top' and `bottom' if used.
(mark_byte_stack): Only define if used.
(BEFORE_POTENTIAL_GC, AFTER_POTENTIAL_GC): Nullify if BYTE_MAINTAIN_TOP
is not set.
(Fbyte_code): Don't set `bottom' unless BYTE_MAINTAIN_TOP is set.
* src/lisp.h (BYTE_MARK_STACK): New macro.
(mark_byte_stack): Only declare if BYTE_MARK_STACK is set.
* src/term.c (OUTPUT_IF): Use OUTPUT.
modified:
src/ChangeLog
src/alloc.c
src/bytecode.c
src/lisp.h
src/term.c
=== modified file 'src/ChangeLog'
--- a/src/ChangeLog 2011-02-17 10:19:29 +0000
+++ b/src/ChangeLog 2011-02-18 02:07:36 +0000
@@ -1,3 +1,20 @@
+2011-02-18 Stefan Monnier <address@hidden>
+
+ * lisp.h (BYTE_MARK_STACK): New macro.
+ (mark_byte_stack): Only declare if BYTE_MARK_STACK is set.
+
+ * bytecode.c (BYTE_MAINTAIN_TOP): New macros.
+ (struct byte_stack): Only define `top' and `bottom' if used.
+ (mark_byte_stack): Only define if used.
+ (BEFORE_POTENTIAL_GC, AFTER_POTENTIAL_GC): Nullify if BYTE_MAINTAIN_TOP
+ is not set.
+ (Fbyte_code): Don't set `bottom' unless BYTE_MAINTAIN_TOP is set.
+
+ * term.c (OUTPUT_IF): Use OUTPUT.
+
+ * alloc.c (Fgarbage_collect): When using stack scanning, don't
+ redundantly scan byte-code stacks, catchlist, and handlerlist.
+
2011-02-17 Jan Djärv <address@hidden>
* nsfns.m (Fx_create_frame, ns_set_name_as_filename)
@@ -18,8 +35,8 @@
* xdisp.c (decode_mode_spec): Don't use MODE_LINE_BINARY_TEXT.
- * fileio.c (Finsert_file_contents, Fwrite_region): Remove
- references to buffer_file_type.
+ * fileio.c (Finsert_file_contents, Fwrite_region):
+ Remove references to buffer_file_type.
(syms_of_fileio): Don't intern and staticpro
find-buffer-file-type.
@@ -112,8 +129,8 @@
(strout, print_string, temp_output_buffer_setup, print_object):
Replace B_ with BVAR.
* msdos.c (IT_frame_up_to_date): Replace B_ with BVAR.
- * minibuf.c (read_minibuf, get_minibuffer, Fread_buffer): Replace
- B_ with BVAR.
+ * minibuf.c (read_minibuf, get_minibuffer, Fread_buffer):
+ Replace B_ with BVAR.
* marker.c (Fmarker_buffer, Fset_marker, set_marker_restricted)
(set_marker_both, set_marker_restricted_both, unchain_marker):
Replace B_ with BVAR.
@@ -275,8 +292,8 @@
* xmenu.c (apply_systemfont_to_dialog): Apply to *dialog.font.
(apply_systemfont_to_menu): Set resources *menubar*font and
*popup*font. Remove defflt.
- (set_frame_menubar, create_and_show_popup_menu): Call
- apply_systemfont_to_menu before lw_create_widget.
+ (set_frame_menubar, create_and_show_popup_menu):
+ Call apply_systemfont_to_menu before lw_create_widget.
2011-02-14 Tom Tromey <address@hidden>
@@ -305,8 +322,8 @@
(PRINTPREPARE, PRINTFINISH, temp_output_buffer_setup)
(print_object): Use B_.
* font.c (font_at): Use B_.
- * fns.c (Fbase64_encode_region, Fbase64_decode_region, Fmd5): Use
- B_.
+ * fns.c (Fbase64_encode_region, Fbase64_decode_region, Fmd5):
+ Use B_.
* callint.c (check_mark, Fcall_interactively): Use B_.
* editfns.c (region_limit, Fmark_marker, save_excursion_save)
(save_excursion_restore, Fprevious_char, Fchar_before)
@@ -329,8 +346,8 @@
(Freplace_match): Use B_.
* indent.c (buffer_display_table, recompute_width_table)
(width_run_cache_on_off, current_column, scan_for_column)
- (Findent_to, position_indentation, compute_motion, vmotion): Use
- B_.
+ (Findent_to, position_indentation, compute_motion, vmotion):
+ Use B_.
* casefiddle.c (casify_object, casify_region): Use B_.
* casetab.c (Fcurrent_case_table, set_case_table): Use B_.
* cmds.c (Fself_insert_command, internal_self_insert): Use B_.
@@ -344,8 +361,8 @@
(Fdo_auto_save, Fset_buffer_auto_saved): Use B_.
* minibuf.c (read_minibuf, get_minibuffer, Fread_buffer): Use B_.
* marker.c (Fmarker_buffer, Fset_marker, set_marker_restricted)
- (set_marker_both, set_marker_restricted_both, unchain_marker): Use
- B_.
+ (set_marker_both, set_marker_restricted_both, unchain_marker):
+ Use B_.
* insdel.c (check_markers, insert_char, insert_1_both)
(insert_from_string_1, insert_from_gap, insert_from_buffer_1)
(adjust_after_replace, replace_range, del_range_2)
@@ -369,8 +386,8 @@
(make_conversion_work_buffer, decode_coding_gap)
(decode_coding_object, encode_coding_object)
(Fdetect_coding_region, Ffind_coding_systems_region_internal)
- (Funencodable_char_position, Fcheck_coding_systems_region): Use
- B_.
+ (Funencodable_char_position, Fcheck_coding_systems_region):
+ Use B_.
* charset.c (Ffind_charset_region): Use B_.
* window.c (window_display_table, unshow_buffer, window_loop)
(window_min_size_2, set_window_buffer, Fset_window_buffer)
@@ -601,8 +618,8 @@
callers changed.
* editfns.c (general_insert_function): Change signature to
match changes to insert functions' signatures.
- * keymap.c (map_keymap_char_table_item, map_keymap_internal): Use
- explicit cast when converting between void * and function pointer
+ * keymap.c (map_keymap_char_table_item, map_keymap_internal):
+ Use explicit cast when converting between void * and function pointer
types, as C89 requires this.
2011-02-05 Paul Eggert <address@hidden>
@@ -722,7 +739,7 @@
2011-02-01 Paul Eggert <address@hidden>
format-time-string now supports subsecond time stamp resolution
- * editfns.c (emacs_nmemftime): Renamed from emacs_memftimeu,
+ * editfns.c (emacs_nmemftime): Rename from emacs_memftimeu,
for consistency with its new argument and with gnulib nstrftime.
All callers changed. New argument NS.
(Fformat_time_string): Check that the time argument's microseconds
@@ -1052,11 +1069,11 @@
(history_delete_duplicates, inhibit_x_resources)
(last_nonmenu_event, load_in_progress, max_specpdl_size)
(minibuffer_auto_raise, print_escape_newlines, scroll_margin)
- (use_dialog_box, use_file_dialog): Remove declaration. Include
- globals.h.
+ (use_dialog_box, use_file_dialog): Remove declaration.
+ Include globals.h.
* keymap.h (Voverriding_local_map)
- (Voverriding_local_map_menu_flag, meta_prefix_char): Remove
- declaration.
+ (Voverriding_local_map_menu_flag, meta_prefix_char):
+ Remove declaration.
* keyboard.h (Vdouble_click_time, Vfunction_key_map)
(Vinput_method_function, Vkey_translation_map)
(Vlucid_menu_bar_dirty_flag, Vthis_original_command)
@@ -1074,16 +1091,16 @@
(focus_follows_mouse): Remove declaration.
* fontset.h (Valternate_fontname_alist, Vfontset_alias_alist)
(Vignore_relative_composition, Votf_script_alist)
- (Vuse_default_ascent, Vvertical_centering_font_regexp): Remove
- declaration.
+ (Vuse_default_ascent, Vvertical_centering_font_regexp):
+ Remove declaration.
* font.h (Vfont_log): Remove declaration.
* dosfns.h (Vdos_display_scancodes, Vdos_version)
(Vdos_windows_version, dos_codepage, dos_country_code)
(dos_decimal_point, dos_hyper_key, dos_keyboard_layout)
- (dos_keypad_mode, dos_super_key, dos_timezone_offset): Remove
- declaration.
- * disptab.h (Vglyph_table, Vstandard_display_table): Remove
- declaration.
+ (dos_keypad_mode, dos_super_key, dos_timezone_offset):
+ Remove declaration.
+ * disptab.h (Vglyph_table, Vstandard_display_table):
+ Remove declaration.
* dispextern.h (Vface_remapping_alist, Vglyphless_char_display)
(Vmouse_autoselect_window, Voverflow_newline_into_fringe)
(Vshow_trailing_whitespace, Vtool_bar_button_margin)
@@ -1111,10 +1128,10 @@
(Vselect_safe_coding_system_function)
(Vtranslation_table_for_input, coding_system_require_warning)
(eol_mnemonic_dos, eol_mnemonic_mac, eol_mnemonic_undecided)
- (eol_mnemonic_unix, inherit_process_coding_system): Remove
- declaration.
- * charset.h (Vcharset_list, Vcurrent_iso639_language): Remove
- declaration.
+ (eol_mnemonic_unix, inherit_process_coding_system):
+ Remove declaration.
+ * charset.h (Vcharset_list, Vcurrent_iso639_language):
+ Remove declaration.
* character.h (Vauto_fill_chars, Vchar_direction_table)
(Vchar_script_table, Vchar_width_table, Vprintable_chars)
(Vscript_representative_chars, Vtranslation_table_vector)
@@ -1229,8 +1246,8 @@
(w32_strict_fontnames, w32_strict_painting): Remove.
(Vhourglass_delay, Vmenu_bar_mode, Vtool_bar_mode)
(Vw32_recognize_altgr, Vwindow_system_version)
- (w32_num_mouse_buttons, w32_use_visible_system_caret): Remove
- declaration.
+ (w32_num_mouse_buttons, w32_use_visible_system_caret):
+ Remove declaration.
* w32console.c (syms_of_ntterm): Update.
(w32_use_full_screen_buffer): Remove.
(Vtty_defined_color_alist): Remove declaration.
=== modified file 'src/alloc.c'
--- a/src/alloc.c 2011-02-14 15:39:19 +0000
+++ b/src/alloc.c 2011-02-18 02:07:36 +0000
@@ -4842,8 +4842,6 @@
(void)
{
register struct specbinding *bind;
- struct catchtag *catch;
- struct handler *handler;
char stack_top_variable;
register int i;
int message_p;
@@ -4972,9 +4970,11 @@
for (i = 0; i < tail->nvars; i++)
mark_object (tail->var[i]);
}
-#endif
-
mark_byte_stack ();
+ {
+ struct catchtag *catch;
+ struct handler *handler;
+
for (catch = catchlist; catch; catch = catch->next)
{
mark_object (catch->tag);
@@ -4985,7 +4985,9 @@
mark_object (handler->handler);
mark_object (handler->var);
}
+ }
mark_backtrace ();
+#endif
#ifdef HAVE_WINDOW_SYSTEM
mark_fringe_data ();
=== modified file 'src/bytecode.c'
--- a/src/bytecode.c 2011-02-16 15:02:50 +0000
+++ b/src/bytecode.c 2011-02-18 02:07:36 +0000
@@ -229,6 +229,8 @@
#define Bconstant 0300
#define CONSTANTLIM 0100
+/* Whether to maintain a `top' and `bottom' field in the stack frame. */
+#define BYTE_MAINTAIN_TOP (BYTE_CODE_SAFE || BYTE_MARK_STACK)
/* Structure describing a value stack used during byte-code execution
in Fbyte_code. */
@@ -241,7 +243,9 @@
/* Top and bottom of stack. The bottom points to an area of memory
allocated with alloca in Fbyte_code. */
+#if BYTE_MAINTAIN_TOP
Lisp_Object *top, *bottom;
+#endif
/* The string containing the byte-code, and its current address.
Storing this here protects it from GC because mark_byte_stack
@@ -268,6 +272,7 @@
/* Mark objects on byte_stack_list. Called during GC. */
+#if BYTE_MARK_STACK
void
mark_byte_stack (void)
{
@@ -292,7 +297,7 @@
mark_object (stack->constants);
}
}
-
+#endif
/* Unmark objects in the stacks on byte_stack_list. Relocate program
counters. Called when GC has completed. */
@@ -346,8 +351,13 @@
/* Actions that must be performed before and after calling a function
that might GC. */
+#if !BYTE_MAINTAIN_TOP
+#define BEFORE_POTENTIAL_GC() ((void)0)
+#define AFTER_POTENTIAL_GC() ((void)0)
+#else
#define BEFORE_POTENTIAL_GC() stack.top = top
#define AFTER_POTENTIAL_GC() stack.top = NULL
+#endif
/* Garbage collect if we have consed enough since the last time.
We do this at every branch, to avoid loops that never GC. */
@@ -447,10 +457,13 @@
stack.byte_string = bytestr;
stack.pc = stack.byte_string_start = SDATA (bytestr);
stack.constants = vector;
- stack.bottom = (Lisp_Object *) alloca (XFASTINT (maxdepth)
+ top = (Lisp_Object *) alloca (XFASTINT (maxdepth)
* sizeof (Lisp_Object));
- top = stack.bottom - 1;
+#if BYTE_MAINTAIN_TOP
+ stack.bottom = top;
stack.top = NULL;
+#endif
+ top -= 1;
stack.next = byte_stack_list;
byte_stack_list = &stack;
=== modified file 'src/lisp.h'
--- a/src/lisp.h 2011-02-16 16:35:16 +0000
+++ b/src/lisp.h 2011-02-18 02:07:36 +0000
@@ -2145,6 +2145,11 @@
#define GC_MARK_STACK GC_USE_GCPROS_AS_BEFORE
#endif
+/* Whether we do the stack marking manually. */
+#define BYTE_MARK_STACK !(GC_MARK_STACK == GC_MAKE_GCPROS_NOOPS
\
+ || GC_MARK_STACK == GC_MARK_STACK_CHECK_GCPROS)
+
+
#if GC_MARK_STACK == GC_MAKE_GCPROS_NOOPS
/* Do something silly with gcproN vars just so gcc shuts up. */
@@ -3253,7 +3258,9 @@
EXFUN (Fbyte_code, 3);
extern void syms_of_bytecode (void);
extern struct byte_stack *byte_stack_list;
+#ifdef BYTE_MARK_STACK
extern void mark_byte_stack (void);
+#endif
extern void unmark_byte_stack (void);
/* Defined in macros.c */
=== modified file 'src/term.c'
--- a/src/term.c 2011-02-16 16:35:16 +0000
+++ b/src/term.c 2011-02-18 02:07:36 +0000
@@ -112,10 +112,7 @@
#define OUTPUT_IF(tty, a) \
do { \
if (a) \
- emacs_tputs ((tty), a, \
- (int) (FRAME_LINES (XFRAME (selected_frame)) \
- - curY (tty) ), \
- cmputc); \
+ OUTPUT (tty, a); \
} while (0)
#define OUTPUT1_IF(tty, a) do { if (a) emacs_tputs ((tty), a, 1, cmputc); }
while (0)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] /srv/bzr/emacs/trunk r103325: Don't GC-scan stack data redundantly.,
Stefan Monnier <=