From fc61ea4fd744480dcd5cd174f4599e135752882a Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Sat, 7 Nov 2015 15:32:45 +0200 Subject: Speed up lookup in redisplay--variables * lisp/frame.el (redisplay--variables): Make it a hash-table. * src/xdisp.c (maybe_set_redisplay): Access redisplay--variables as a hash-table. This speeds up this function by an order of magnitude: where previously a setq was slowed down by 100% by introducing the maybe_set_redisplay test, it is now only 5% slower. (syms_of_xdisp) : Doc fix. --- src/xdisp.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/xdisp.c b/src/xdisp.c index dbc2d840d44..30dfac55601 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -623,7 +623,8 @@ bset_update_mode_line (struct buffer *b) void maybe_set_redisplay (Lisp_Object symbol) { - if (!NILP (Fassoc_string (symbol, Vredisplay__variables, Qnil))) + if (HASH_TABLE_P (Vredisplay__variables) + && hash_lookup (XHASH_TABLE (Vredisplay__variables), symbol, NULL) >= 0) { bset_update_mode_line (current_buffer); current_buffer->prevent_redisplay_optimizations_p = true; @@ -31478,7 +31479,7 @@ display table takes effect; in this case, Emacs does not consult Vredisplay__mode_lines_cause = Fmake_hash_table (0, NULL); DEFVAR_LISP ("redisplay--variables", Vredisplay__variables, - doc: /* A list of variables changes to which trigger a thorough redisplay. */); + doc: /* A hash-table of variables changing which triggers a thorough redisplay. */); Vredisplay__variables = Qnil; } -- cgit v1.2.1