From 9fa9c26e42ddb3f67133bc18112147926bae8a50 Mon Sep 17 00:00:00 2001 From: Ken Raeburn Date: Tue, 13 Oct 2015 22:06:01 -0400 Subject: [PATCH] Reduce face-related consing during frame creation. * faces.el (face--attributes-unspecified): Compute the "unspecified" attribute list once. (face-spec-reset-face): Use it instead of building the list. --- lisp/faces.el | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/lisp/faces.el b/lisp/faces.el index 4e7f1a42bff..de8a0b5bcb1 100644 --- a/lisp/faces.el +++ b/lisp/faces.el @@ -1598,6 +1598,13 @@ is given, in which case return its value instead." result no-match-retval)))) +;; When over 80 faces get processed at frame creation time, all but +;; one specifying all attributes as "unspecified", generating this +;; list every time means a lot of consing. +(defconst face--attributes-unspecified + (apply 'append + (mapcar (lambda (x) (list (car x) 'unspecified)) + face-attribute-name-alist))) (defun face-spec-reset-face (face &optional frame) "Reset all attributes of FACE on FRAME to unspecified." @@ -1622,9 +1629,7 @@ is given, in which case return its value instead." "unspecified-fg" "unspecified-bg"))))) ;; For all other faces, unspecify all attributes. - (apply 'append - (mapcar (lambda (x) (list (car x) 'unspecified)) - face-attribute-name-alist))))) + face--attributes-unspecified))) (defun face-spec-set (face spec &optional spec-type) "Set the face spec SPEC for FACE. -- 2.39.2