[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 ();