ikarus/src/ikarus.guardians.ss

25 lines
720 B
Scheme
Raw Normal View History

2006-12-19 12:15:36 -05:00
;;; The procedure make-guardian is coped en verbatim
;;; from Dybvig et al. Guardians paper.
2007-04-30 00:33:22 -04:00
(library (ikarus guardians)
(export make-guardian)
(import (except (ikarus) make-guardian))
(define make-guardian
2006-12-19 12:15:36 -05:00
(lambda ()
(let ([tc
(let ([x (cons #f #f)])
(cons x x))])
(case-lambda
[()
(and (not (eq? (car tc) (cdr tc)))
(let ([x (car tc)])
(let ([y (car x)])
(set-car! tc (cdr x))
(set-car! x #f)
(set-cdr! x #f)
y)))]
[(obj)
(foreign-call "ikrt_register_guardian_pair" (cons tc obj))
2007-04-30 00:33:22 -04:00
(void)])))))