Mercurial > hg > xemacs-beta
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) |