]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix merging of anonymous faces with an `:extend' property on unexec
authorPo Lu <luangruo@yahoo.com>
Thu, 12 May 2022 06:55:41 +0000 (14:55 +0800)
committerPo Lu <luangruo@yahoo.com>
Thu, 12 May 2022 06:56:32 +0000 (14:56 +0800)
* src/emacs.c (main): Unconditionally call `init_xfaces'.
* src/lisp.h: Enable `init_xfaces' on unexec builds too.
* src/xfaces.c (init_xfaces): Move fix for bug#34226 into
pdumper-specific section leaving the initialization of
`face_attr_sym' intact.

src/emacs.c
src/lisp.h
src/xfaces.c

index ca99a8c787d8e3435dd1d2913c1b744ce5839860..fe138366f3a00f8183c5e8323db5f1b7c4b539bc 100644 (file)
@@ -1952,15 +1952,11 @@ Using an Emacs configured with --with-x-toolkit=lucid does not have this problem
   init_threads ();
   init_eval ();
 #ifdef HAVE_PGTK
-  init_pgtkterm ();   /* before init_atimer(). */
+  init_pgtkterm (); /* Must come before `init_atimer'.  */
 #endif
   running_asynch_code = 0;
   init_random ();
-
-#ifdef HAVE_PDUMPER
-  if (dumped_with_pdumper_p ())
-    init_xfaces ();
-#endif
+  init_xfaces ();
 
 #if defined HAVE_JSON && !defined WINDOWSNT
   init_json ();
index b00f3f7e2e69e143e33e201870336632cbb599bb..e76a36d26956f23a7de9ccd4821452e37019adbb 100644 (file)
@@ -5093,9 +5093,7 @@ extern void syms_of_w32cygwinx (void);
 extern Lisp_Object Vface_alternative_font_family_alist;
 extern Lisp_Object Vface_alternative_font_registry_alist;
 extern void syms_of_xfaces (void);
-#ifdef HAVE_PDUMPER
 extern void init_xfaces (void);
-#endif
 
 #ifdef HAVE_X_WINDOWS
 /* Defined in xfns.c.  */
index 05e0df4b7dc8243008f405b799901994c59c7da5..7395ce157ece206c9d2cfd68d6deaa611d105bd0 100644 (file)
@@ -6871,7 +6871,6 @@ DEFUN ("show-face-resources", Fshow_face_resources, Sshow_face_resources,
                            Initialization
  ***********************************************************************/
 
-#ifdef HAVE_PDUMPER
 /* All the faces defined during loadup are recorded in
    face-new-frame-defaults.  We need to set next_lface_id to the next
    face ID number, so that any new faces defined in this session will
@@ -6881,26 +6880,35 @@ DEFUN ("show-face-resources", Fshow_face_resources, Sshow_face_resources,
 void
 init_xfaces (void)
 {
-  int nfaces = XFIXNAT (Fhash_table_count (Vface_new_frame_defaults));
-  if (nfaces > 0)
-    {
-      /* Allocate the lface_id_to_name[] array.  */
-      lface_id_to_name_size = next_lface_id = nfaces;
-      lface_id_to_name = xnmalloc (next_lface_id, sizeof *lface_id_to_name);
+#ifdef HAVE_PDUMPER
+  int nfaces;
 
-      /* Store the faces.  */
-      struct Lisp_Hash_Table* table = XHASH_TABLE (Vface_new_frame_defaults);
-      for (ptrdiff_t idx = 0; idx < nfaces; ++idx)
+  if (dumped_with_pdumper_p ())
+    {
+      nfaces = XFIXNAT (Fhash_table_count (Vface_new_frame_defaults));
+      if (nfaces > 0)
        {
-         Lisp_Object lface = HASH_KEY (table, idx);
-         Lisp_Object face_id = CAR (HASH_VALUE (table, idx));
-          if (FIXNATP (face_id)) {
-              int id = XFIXNAT (face_id);
-              eassert (id >= 0);
-              lface_id_to_name[id] = lface;
-            }
+         /* Allocate the lface_id_to_name[] array.  */
+         lface_id_to_name_size = next_lface_id = nfaces;
+         lface_id_to_name = xnmalloc (next_lface_id, sizeof *lface_id_to_name);
+
+         /* Store the faces.  */
+         struct Lisp_Hash_Table* table = XHASH_TABLE (Vface_new_frame_defaults);
+         for (ptrdiff_t idx = 0; idx < nfaces; ++idx)
+           {
+             Lisp_Object lface = HASH_KEY (table, idx);
+             Lisp_Object face_id = CAR (HASH_VALUE (table, idx));
+             if (FIXNATP (face_id))
+               {
+                 int id = XFIXNAT (face_id);
+                 eassert (id >= 0);
+                 lface_id_to_name[id] = lface;
+               }
+           }
        }
     }
+#endif
+
   face_attr_sym[0] = Qface;
   face_attr_sym[LFACE_FOUNDRY_INDEX] = QCfoundry;
   face_attr_sym[LFACE_SWIDTH_INDEX] = QCwidth;
@@ -6921,7 +6929,6 @@ init_xfaces (void)
   face_attr_sym[LFACE_DISTANT_FOREGROUND_INDEX] = QCdistant_foreground;
   face_attr_sym[LFACE_EXTEND_INDEX] = QCextend;
 }
-#endif
 
 void
 syms_of_xfaces (void)