emacs-diffs
[Top][All Lists]
Advanced

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

scratch/igc ea29f0f2ebe 3/3: Use PVEC_MODULE_GLOBAL_REFERENCE instead of


From: Gerd Moellmann
Subject: scratch/igc ea29f0f2ebe 3/3: Use PVEC_MODULE_GLOBAL_REFERENCE instead of PVEC_OTHER
Date: Fri, 26 Apr 2024 10:31:26 -0400 (EDT)

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

    Use PVEC_MODULE_GLOBAL_REFERENCE instead of PVEC_OTHER
---
 src/alloc.c        |  4 +++-
 src/data.c         |  4 +++-
 src/emacs-module.c |  6 +++---
 src/igc.c          | 26 ++++++++++++++------------
 src/lisp.h         |  1 +
 src/pdumper.c      |  1 +
 src/print.c        |  1 +
 7 files changed, 26 insertions(+), 17 deletions(-)

diff --git a/src/alloc.c b/src/alloc.c
index 16b5fe917a1..3a9186285c8 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -3486,7 +3486,9 @@ cleanup_vector (struct Lisp_Vector *vector)
          = (struct Lisp_Module_Function *) vector;
        module_finalize_function (function);
       }
-#endif
+# endif
+      break;
+    case PVEC_MODULE_GLOBAL_REFERENCE:
       break;
     case PVEC_NATIVE_COMP_UNIT:
 #ifdef HAVE_NATIVE_COMP
diff --git a/src/data.c b/src/data.c
index 66b8579e113..8a677298fc0 100644
--- a/src/data.c
+++ b/src/data.c
@@ -234,7 +234,8 @@ a fixed set of types.  */)
     case Lisp_Vectorlike:
       /* WARNING!!  Keep 'cl--type-hierarchy' in sync with this code!!  */
       switch (PSEUDOVECTOR_TYPE (XVECTOR (object)))
-        {
+       {
+       case PVEC_MODULE_GLOBAL_REFERENCE: return Qmodule_global_reference;
         case PVEC_NORMAL_VECTOR: return Qvector;
        case PVEC_BIGNUM: return Qbignum;
        case PVEC_MARKER: return Qmarker;
@@ -4220,6 +4221,7 @@ syms_of_data (void)
   DEFSYM (Qcons, "cons");
   DEFSYM (Qmarker, "marker");
   DEFSYM (Qsymbol_with_pos, "symbol-with-pos");
+  DEFSYM (Qmodule_global_reference, "module-global-reference");
   DEFSYM (Qoverlay, "overlay");
   DEFSYM (Qfinalizer, "finalizer");
   DEFSYM (Qmodule_function, "module-function");
diff --git a/src/emacs-module.c b/src/emacs-module.c
index db0018ee84a..92b324185f3 100644
--- a/src/emacs-module.c
+++ b/src/emacs-module.c
@@ -376,7 +376,7 @@ static Lisp_Object Vmodule_refs_hash;
 static struct module_global_reference *
 XMODULE_GLOBAL_REFERENCE (Lisp_Object o)
 {
-  eassert (PSEUDOVECTORP (o, PVEC_OTHER));
+  eassert (PSEUDOVECTORP (o, PVEC_MODULE_GLOBAL_REFERENCE));
   return XUNTAG (o, Lisp_Vectorlike, struct module_global_reference);
 }
 
@@ -425,11 +425,11 @@ module_make_global_ref (emacs_env *env, emacs_value value)
     {
       struct module_global_reference *ref
         = ALLOCATE_PLAIN_PSEUDOVECTOR (struct module_global_reference,
-                                       PVEC_OTHER);
+                                       PVEC_MODULE_GLOBAL_REFERENCE);
       ref->value.v = new_obj;
       ref->refcount = 1;
       Lisp_Object value;
-      XSETPSEUDOVECTOR (value, ref, PVEC_OTHER);
+      XSETPSEUDOVECTOR (value, ref, PVEC_MODULE_GLOBAL_REFERENCE);
       hash_put (h, new_obj, value, hashcode);
       MODULE_INTERNAL_CLEANUP ();
       return &ref->value;
diff --git a/src/igc.c b/src/igc.c
index 2f4e90d5e87..3b9b3de08af 100644
--- a/src/igc.c
+++ b/src/igc.c
@@ -1588,22 +1588,19 @@ fix_xwidget_view (mps_ss_t ss, struct xwidget_view *v)
 
 #endif // HAVE_XWIDGETS
 
+#ifdef HAVE_MODULES
 static mps_res_t
-fix_other (mps_ss_t ss, void *o)
+fix_global_ref (mps_ss_t ss, struct module_global_reference *r)
 {
   MPS_SCAN_BEGIN (ss)
   {
-    IGC_FIX_CALL_FN (ss, struct Lisp_Vector, o, fix_vectorlike);
-    /* FIXME: PVEC_OTHER is also used on w32 for struct scroll_bar,
-       and there seems to be no way to discern both uses. */
-#ifdef HAVE_MODULES
-    struct module_global_reference *r = o;
+    IGC_FIX_CALL_FN (ss, struct Lisp_Vector, r, fix_vectorlike);
     IGC_FIX12_OBJ (ss, &r->value.v);
-#endif
   }
   MPS_SCAN_END (ss);
   return MPS_RES_OK;
 }
+#endif
 
 #ifndef IN_MY_FORK
 static mps_res_t
@@ -1675,10 +1672,6 @@ fix_vector (mps_ss_t ss, struct Lisp_Vector *v)
        IGC_FIX_CALL_FN (ss, struct Lisp_Finalizer, v, fix_finalizer);
        break;
 
-      case PVEC_OTHER:
-       IGC_FIX_CALL_FN (ss, void, v, fix_other);
-       break;
-
       case PVEC_MISC_PTR:
        IGC_FIX_CALL_FN (ss, struct Lisp_Misc_Ptr, v, fix_misc_ptr);
        break;
@@ -1720,6 +1713,12 @@ fix_vector (mps_ss_t ss, struct Lisp_Vector *v)
        IGC_FIX_CALL_FN (ss, struct Lisp_Native_Comp_Unit, v, fix_native_cu);
        break;
 
+      case PVEC_MODULE_GLOBAL_REFERENCE:
+#ifdef HAVE_MODULES
+       IGC_FIX_CALL_FN (ss, struct module_global_reference, v, fix_global_ref);
+#endif
+       break;
+
       case PVEC_NORMAL_VECTOR:
       case PVEC_SYMBOL_WITH_POS:
       case PVEC_PROCESS:
@@ -1735,6 +1734,7 @@ fix_vector (mps_ss_t ss, struct Lisp_Vector *v)
       case PVEC_COMPILED:
       case PVEC_RECORD:
       case PVEC_FONT:
+      case PVEC_OTHER:
 #ifdef IN_MY_FORK
       case PVEC_PACKAGE:
 #endif
@@ -2342,7 +2342,8 @@ finalize_vector (mps_addr_t v)
     case PVEC_TERMINAL:
     case PVEC_MARKER:
     case PVEC_WEAK_REF:
-      igc_assert (!"not implemented");
+    case PVEC_MODULE_GLOBAL_REFERENCE:
+      igc_assert (!"finalization not implemented");
       break;
     }
 }
@@ -2433,6 +2434,7 @@ maybe_finalize (mps_addr_t client, enum pvec_type tag)
     case PVEC_PACKAGE:
 #endif
     case PVEC_WEAK_REF:
+    case PVEC_MODULE_GLOBAL_REFERENCE:
       break;
     }
 }
diff --git a/src/lisp.h b/src/lisp.h
index 32b28921c44..f3e41bcc798 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -1042,6 +1042,7 @@ enum pvec_type
   PVEC_MUTEX,
   PVEC_CONDVAR,
   PVEC_MODULE_FUNCTION,
+  PVEC_MODULE_GLOBAL_REFERENCE,
   PVEC_NATIVE_COMP_UNIT,
   PVEC_TS_PARSER,
   PVEC_TS_NODE,
diff --git a/src/pdumper.c b/src/pdumper.c
index cca773a41bf..5b6358d6d35 100644
--- a/src/pdumper.c
+++ b/src/pdumper.c
@@ -3164,6 +3164,7 @@ dump_vectorlike (struct dump_context *ctx,
     case PVEC_CONDVAR:
     case PVEC_SQLITE:
     case PVEC_MODULE_FUNCTION:
+    case PVEC_MODULE_GLOBAL_REFERENCE:
     case PVEC_SYMBOL_WITH_POS:
     case PVEC_FREE:
     case PVEC_TS_PARSER:
diff --git a/src/print.c b/src/print.c
index fbdd096ba76..440c1c0e575 100644
--- a/src/print.c
+++ b/src/print.c
@@ -2115,6 +2115,7 @@ print_vectorlike_unreadable (Lisp_Object obj, Lisp_Object 
printcharfun,
     /* Impossible cases.  */
     case PVEC_FREE:
     case PVEC_OTHER:
+    case PVEC_MODULE_GLOBAL_REFERENCE:
       break;
     }
   emacs_abort ();



reply via email to

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