]> git.eshelyaron.com Git - emacs.git/commitdiff
Optimize conditional recursive merge face.
authorJimmy Aguilar Mena <spacibba@aol.com>
Sun, 27 Oct 2019 01:43:11 +0000 (02:43 +0100)
committerJimmy Aguilar Mena <spacibba@aol.com>
Tue, 29 Oct 2019 13:34:00 +0000 (14:34 +0100)
* src/xfaces.c (merge_face_vectors) : Pass ATTR_FILTER to
merge_face_ref to stop recursion merging in advance when possible.
(merge_named_face) : add more conditions to potentially reduce calls to
merge_face_vectors in more unneeded situations.

src/xfaces.c

index e4d19440bc91404bfc3788ffef95d41fb172bdf9..3806fa90e2390109710c00358fef784ab607ccf6 100644 (file)
@@ -2085,7 +2085,7 @@ merge_face_vectors (struct window *w, struct frame *f,
          memcpy (tmp, to, LFACE_VECTOR_SIZE * sizeof *tmp);
 
          merge_face_ref (w, f, from[LFACE_INHERIT_INDEX],
-                         tmp, false, named_merge_points, 0);
+                         tmp, false, named_merge_points, attr_filter);
 
          if (NILP (tmp[attr_filter])
              || UNSPECIFIEDP (tmp[attr_filter]))
@@ -2172,7 +2172,12 @@ merge_named_face (struct window *w,
       bool ok = get_lface_attributes (w, f, face_name, from, false,
                                       named_merge_points);
 
-      if (ok && (attr_filter == 0 || !NILP(from[attr_filter])))
+      if (ok && (attr_filter == 0              /* No filter.  */
+                 || (!NILP(from[attr_filter])  /* Filter, but specified.  */
+                    && !UNSPECIFIEDP(from[attr_filter]))
+                 || (!NILP(from[attr_filter])  /* Filter, unspecified, but inherited.  */
+                    && UNSPECIFIEDP(from[attr_filter])
+                    && !NILP (from[LFACE_INHERIT_INDEX]))))
         merge_face_vectors (w, f, from, to, named_merge_points, attr_filter);
 
       return ok;