emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

scratch/igc b49bb7f2c6d 6/8: mirror_vectorlike


From: Gerd Moellmann
Subject: scratch/igc b49bb7f2c6d 6/8: mirror_vectorlike
Date: Fri, 17 May 2024 10:03:26 -0400 (EDT)

branch: scratch/igc
commit b49bb7f2c6d4211b1d0408956c65f31ac8eb902e
Author: Gerd Möllmann <gerd@gnu.org>
Commit: Gerd Möllmann <gerd@gnu.org>

    mirror_vectorlike
---
 src/igc.c | 25 ++++++++++++++-----------
 1 file changed, 14 insertions(+), 11 deletions(-)

diff --git a/src/igc.c b/src/igc.c
index 7ad3b78688c..cf78f954c7f 100644
--- a/src/igc.c
+++ b/src/igc.c
@@ -3548,7 +3548,16 @@ mirror_raw (struct igc_mirror *m, mps_addr_t *p)
 }
 
 #define IGC_MIRROR_OBJ(m, obj) mirror_lisp_obj ((m), (obj))
-#define IGC_MIRROR_RAW(m, pp)  mirror_raw ((m), (mps_addr_t *) (pp))
+#define IGC_MIRROR_RAW(m, pp) mirror_raw ((m), (mps_addr_t *) (pp))
+
+static void
+mirror_array (struct igc_mirror *m, Lisp_Object *array, size_t n)
+{
+  for (size_t i = 0; i < n; ++i)
+    IGC_MIRROR_OBJ (m, &array[i]);
+}
+
+#define IGC_MIRROR_NOBJS(m, a, n) mirror_array (m, a, n)
 
 static void
 copy_to_mps (void *dumped, void *closure)
@@ -3630,12 +3639,6 @@ mirror_string (struct igc_mirror *m, struct Lisp_String 
*s)
   IGC_MIRROR_RAW (m, &s->u.s.intervals);
 }
 
-static void
-mirror_float (struct igc_mirror *m, struct Lisp_Float *f)
-{
-  igc_assert (pdumper_cold_object_p (f));
-}
-
 static void
 mirror_interval (struct igc_mirror *m, struct interval *iv)
 {
@@ -3720,7 +3723,10 @@ mirror_blv (struct igc_mirror *m, struct 
Lisp_Buffer_Local_Value *blv)
 static void
 mirror_vectorlike (struct igc_mirror *m, struct Lisp_Vector *v)
 {
-  emacs_abort ();
+  ptrdiff_t size = v->header.size;
+  if (size & PSEUDOVECTOR_FLAG)
+    size &= PSEUDOVECTOR_SIZE_MASK;
+  IGC_MIRROR_NOBJS (m, v->contents, size);
 }
 
 #ifndef IN_MY_FORK
@@ -4017,10 +4023,7 @@ mirror_obj (struct igc_mirror *m, void *base)
       break;
 
     case IGC_OBJ_STRING_DATA:
-      break;
-
     case IGC_OBJ_FLOAT:
-      mirror_float (m, client);
       break;
 
     case IGC_OBJ_SYMBOL:



reply via email to

[Prev in Thread] Current Thread [Next in Thread]