I'll commit this in the next few days, unless somebody objects.
src/ChangeLog addition:
2005-09-26 Marcus Crestani <crestani(a)xemacs.org>
* symbols.c (check_module_subr): Fix new allocator's module
support: remove duplicating the subr.
xemacs-21.5 source patch:
Diff command: cvs -q diff -u
Files affected: src/symbols.c
Index: src/symbols.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/symbols.c,v
retrieving revision 1.50
diff -u -r1.50 symbols.c
--- src/symbols.c 15 May 2005 16:38:14 -0000 1.50
+++ src/symbols.c 26 Sep 2005 06:24:39 -0000
@@ -3474,6 +3474,7 @@
#endif
#ifdef HAVE_SHLIB
+#ifndef MC_ALLOC
/*
* If we are not in a pure undumped Emacs, we need to make a duplicate of
* the subr. This is because the only time this function will be called
@@ -3533,6 +3534,45 @@
subr = newsubr; \
} \
} while (0)
+#else /* MC_ALLOC */
+/*
+ * If we have the new allocator enabled, we do not need to make a
+ * duplicate of the subr. The new allocator already does allocate all
+ * subrs in Lisp-accessible memory rather than have it in the static
+ * subr struct.
+ *
+ * NOTE: The DOC pointer is not set here as described above.
+ */
+#define check_module_subr(subr) \
+do { \
+ if (initialized) { \
+ Lisp_Object f; \
+ \
+ if (subr->min_args < 0) \
+ signal_ferror (Qdll_error, "%s min_args (%hd) too small", \
+ subr_name (subr), subr->min_args); \
+ if (subr->min_args > SUBR_MAX_ARGS) \
+ signal_ferror (Qdll_error, "%s min_args (%hd) too big (max = %d)",
\
+ subr_name (subr), subr->min_args, SUBR_MAX_ARGS); \
+ \
+ if (subr->max_args != MANY && \
+ subr->max_args != UNEVALLED) \
+ { \
+ /* Need to fix lisp.h and eval.c if SUBR_MAX_ARGS too small */ \
+ if (subr->max_args > SUBR_MAX_ARGS) \
+ signal_ferror (Qdll_error, "%s max_args (%hd) too big (max = %d)", \
+ subr_name (subr), subr->max_args, SUBR_MAX_ARGS); \
+ if (subr->min_args > subr->max_args) \
+ signal_ferror (Qdll_error, "%s min_args (%hd) > max_args (%hd)", \
+ subr_name (subr), subr->min_args, subr->max_args); \
+ } \
+ \
+ f = XSYMBOL (sym)->function; \
+ if (!UNBOUNDP (f) && (!CONSP (f) || !EQ (XCAR (f), Qautoload))) \
+ signal_ferror (Qdll_error, "Attempt to redefine %s", subr_name (subr));
\
+ } \
+} while (0)
+#endif /* MC_ALLOC */
#else /* ! HAVE_SHLIB */
#define check_module_subr(subr)
#endif
--
Marcus
Show replies by date
>>>> "Marcus" == Marcus Crestani
<crestani(a)informatik.uni-tuebingen.de> writes:
2005-09-26 Marcus Crestani <crestani(a)xemacs.org>
* symbols.c (check_module_subr): Fix new allocator's module
support: remove duplicating the subr.
Well, I don't understand the theory, but it certainly works for me.
I'll revert the patch to disable on the Xft branch tomorrow, and if
after a few days that seems OK, I'll push the modular Canna patch to
mainline.
--
School of Systems and Information Engineering
http://turnbull.sk.tsukuba.ac.jp
University of Tsukuba Tennodai 1-1-1 Tsukuba 305-8573 JAPAN
Ask not how you can "do" free software business;
ask what your business can "do for" free software.
I've committed this one.
--
Marcus