emacs-diffs
[Top][All Lists]
Advanced

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

scratch/comp-static-data 83c49e2f376 01/16: Avoid additional recursion w


From: Vibhav Pant
Subject: scratch/comp-static-data 83c49e2f376 01/16: Avoid additional recursion while marking natively compiled unit.
Date: Thu, 19 Jan 2023 12:44:32 -0500 (EST)

branch: scratch/comp-static-data
commit 83c49e2f376c070e7448773e7add55b3a1e4a37e
Author: Vibhav Pant <vibhavp@gmail.com>
Commit: Vibhav Pant <vibhavp@gmail.com>

    Avoid additional recursion while marking natively compiled unit.
    
    * src/alloc.c (mark_native_comp_unit): Push psuedovector fields on the
    mark stack only, avoiding additional recursion.
---
 src/alloc.c | 21 ++++++++++++++-------
 1 file changed, 14 insertions(+), 7 deletions(-)

diff --git a/src/alloc.c b/src/alloc.c
index 0a4323d1ceb..40f4402bca4 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -6821,9 +6821,16 @@ mark_char_table (struct Lisp_Vector *ptr, enum pvec_type 
pvectype)
 }
 
 static void
-mark_native_comp_unit (struct Lisp_Native_Comp_Unit *comp_u)
+mark_stack_push_values (Lisp_Object *values, ptrdiff_t n);
+
+static void
+mark_native_comp_unit (struct Lisp_Vector *ptr)
 {
-  mark_vectorlike (&comp_u->header);
+  struct Lisp_Native_Comp_Unit *comp_u
+    = (struct Lisp_Native_Comp_Unit *) ptr;
+  ptrdiff_t size = ptr->header.size & PSEUDOVECTOR_SIZE_MASK;
+  set_vector_marked (ptr);
+  mark_stack_push_values (ptr->contents, size);
 
 #ifdef HAVE_STATIC_LISP_GLOBALS
   if (comp_u->have_static_lisp_data)
@@ -6836,13 +6843,13 @@ mark_native_comp_unit (struct Lisp_Native_Comp_Unit 
*comp_u)
 
       Lisp_Object u_staticvec = comp_u->staticpro;
       if (!NILP (u_staticvec))
-       mark_objects (XVECTOR (u_staticvec)->contents,
-                     ASIZE (u_staticvec));
+       mark_stack_push_values (XVECTOR (u_staticvec)->contents,
+                               ASIZE (u_staticvec));
 
       Lisp_Object u_ephemeral = comp_u->ephemeral;
       if (!NILP (u_ephemeral))
-       mark_objects (XVECTOR (u_ephemeral)->contents,
-                     ASIZE (u_ephemeral));
+       mark_stack_push_values (XVECTOR (u_ephemeral)->contents,
+                               ASIZE (u_ephemeral));
     }
 #endif
 }
@@ -7288,7 +7295,7 @@ process_mark_stack (ptrdiff_t base_sp)
                break;
 
              case PVEC_NATIVE_COMP_UNIT:
-               mark_native_comp_unit (XNATIVE_COMP_UNIT (obj));
+               mark_native_comp_unit (ptr);
                break;
 
              case PVEC_FREE:



reply via email to

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