view lisp/post-gc.el @ 5374:d967d96ca043

Conditionalise the old-* functions and byte codes at compile time. src/ChangeLog addition: 2011-03-15 Aidan Kehoe <kehoea@parhasard.net> * config.h.in (SUPPORT_CONFOUNDING_FUNCTIONS): New #define, equivalent NEED_TO_HANDLE_21_4_CODE by default, describing whether this XEmacs should support the old-eq, old-equal and related functions and byte codes. * bytecode.c (UNUSED): Only interpret old-eq, old-equal, old-memq if SUPPORT_CONFOUNDING_FUNCTIONS is defined. * data.c: Move Fold_eq to fns.c with the rest of the Fold_* functions. * fns.c: * fns.c (Fmemq): * fns.c (memq_no_quit): * fns.c (assoc_no_quit): * fns.c (Frassq): * fns.c (Fequal): * fns.c (Fold_equal): * fns.c (syms_of_fns): Group old-eq, old-equal, old-memq etc together, surround them with #ifdef SUPPORT_CONFOUNDING_FUNCTIONS. lisp/ChangeLog addition: 2011-03-15 Aidan Kehoe <kehoea@parhasard.net> * bytecomp.el: Don't generate the old-eq, old-memq, old-equal bytecodes any more, but keep the information about them around for the sake of the disassembler. man/ChangeLog addition: 2011-03-15 Aidan Kehoe <kehoea@parhasard.net> * lispref/objects.texi (Character Type): * lispref/objects.texi (Equality Predicates): No longer document `old-eq', `old-equal', they haven't been used in years. tests/ChangeLog addition: 2011-03-17 Aidan Kehoe <kehoea@parhasard.net> * automated/lisp-tests.el: Only test the various old-* function if old-eq is bound and a subr.
author Aidan Kehoe <kehoea@parhasard.net>
date Thu, 17 Mar 2011 20:13:00 +0000
parents d27c1ee1943b
children b9167d522a9a
line wrap: on
line source

;;; post-gc.el --- post-gc actions

;; Copyright (C) 1985-1986, 1990, 1992-1997 Free Software Foundation, Inc.
;; Copyright (c) 1993, 1994 Sun Microsystems, Inc.
;; Copyright (C) 1995 Board of Trustees, University of Illinois

;; Author: Mike Sperber <mike@xemacs.org>
;; Maintainer: XEmacs Development Team
;; Keywords: internal, dumped

;; This file is part of XEmacs.

;; XEmacs is free software; you can redistribute it and/or modify it
;; under the terms of the GNU General Public License as published by
;; the Free Software Foundation; either version 2, or (at your option)
;; any later version.

;; XEmacs is distributed in the hope that it will be useful, but
;; WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
;; General Public License for more details.

;; You should have received a copy of the GNU General Public License
;; along with XEmacs; see the file COPYING.  If not, write to the 
;; Free Software Foundation, 59 Temple Place - Suite 330,
;; Boston, MA 02111-1307, USA.

;;; Synched up with: Not in FSF.

;;; Commentary:

;; This file is dumped with XEmacs.

;; This file defines actions to happen after each GC to perform
;; additional cleanup, call finalizers, etc.

(defun run-finalizers (alist)
  "Run the finalizers for all objects that have just become unreachable."
  (let ((info (assq 'finalize-list alist)))
    (if info
	(let ((finalize-list (cdr info)))
	  (while finalize-list
	    (funcall (cdr (car finalize-list)) (car (car finalize-list)))
	    (setq finalize-list (cdr finalize-list)))))))

(add-hook 'post-gc-hook 'run-finalizers)

(defvar simple-finalizer-ephemerons '()
  "List of ephemerons for objects that have a finalizer attached..")

(defun add-finalizer (object func)
  "Add FUNC as a finalizer for object OBJECT."
  (setq simple-finalizer-ephemerons
	(cons (make-ephemeron object object func)
	      simple-finalizer-ephemerons)))

(defun cleanup-simple-finalizers (alist)
  "Clean up `simple-finalizer-ephemerons'."
  (and simple-finalizer-ephemerons
       (setq simple-finalizer-ephemerons
	     (delete-if-not #'ephemeron-ref simple-finalizer-ephemerons))))

(add-hook 'post-gc-hook 'cleanup-simple-finalizers)