comparison lisp/post-gc.el @ 1591:75b8038f720e

[xemacs-hg @ 2003-07-26 14:01:23 by michaels] 2003-07-24 Mike Sperber <mike@xemacs.org> * post-gc.el (simple-finalizer-ephemerons): (add-finalizer): (cleanup-simple-finalizers): Implement simple object finalization.
author michaels
date Sat, 26 Jul 2003 14:01:23 +0000
parents 011e1bce6ece
children d27c1ee1943b 308d34e9f07d
comparison
equal deleted inserted replaced
1590:03009473262a 1591:75b8038f720e
43 (funcall (cdr (car finalize-list)) (car (car finalize-list))) 43 (funcall (cdr (car finalize-list)) (car (car finalize-list)))
44 (setq finalize-list (cdr finalize-list))))))) 44 (setq finalize-list (cdr finalize-list)))))))
45 45
46 (add-hook 'post-gc-hook 'run-finalizers) 46 (add-hook 'post-gc-hook 'run-finalizers)
47 47
48 (defvar simple-finalizer-ephemerons '()
49 "List of ephemerons for objects that have a finalizer attached..")
48 50
49 51 (defun add-finalizer (object func)
52 "Add FUNC as a finalizer for object OBJECT."
53 (setq simple-finalizer-ephemerons
54 (cons (make-ephemeron object object func)
55 simple-finalizer-ephemerons)))
56
57 (defun cleanup-simple-finalizers (alist)
58 "Clean up `simple-finalizer-ephemerons'."
59 ;; We have to do this by hand because DELETE-IF isn't defined yet.
60 (let ((current simple-finalizer-ephemerons)
61 (prev nil))
62 (while (not (null current))
63 (if (not (ephemeron-ref (car current)))
64 (if (null prev)
65 (setq simple-finalizer-ephemerons (cdr current))
66 (setcdr prev (cdr current)))
67 (setq prev current))
68 (setq current (cdr current)))))
69
70 (add-hook 'post-gc-hook 'cleanup-simple-finalizers)