diff --git a/src/libguardians.ss b/src/libguardians.ss new file mode 100644 index 0000000..bf84e84 --- /dev/null +++ b/src/libguardians.ss @@ -0,0 +1,20 @@ + +(let () + (define make-guardian + (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" tc obj) + (void)])))) + (primitive-set! 'make-guardian make-guardian))