33 lines
711 B
Racket
33 lines
711 B
Racket
#lang scheme
|
|
(require (for-syntax racket/syntax))
|
|
(provide (all-defined-out))
|
|
|
|
(define-syntax (define-collector-export stx)
|
|
(syntax-case stx ()
|
|
[(_ i)
|
|
(with-syntax
|
|
([collector:i (format-id #'i "collector:~a" #'i)]
|
|
[set-collector:i! (format-id #'i "set-collector:~a!" #'i)])
|
|
#'(begin (define collector:i false)
|
|
(define (set-collector:i! proc)
|
|
(set! collector:i proc))))]))
|
|
|
|
(define-syntax-rule (define-collector-exports i ...)
|
|
(begin (define-collector-export i)
|
|
...))
|
|
|
|
(define-collector-exports
|
|
deref
|
|
alloc-flat
|
|
cons
|
|
first
|
|
rest
|
|
flat?
|
|
cons?
|
|
set-first!
|
|
set-rest!
|
|
closure
|
|
closure?
|
|
closure-code-ptr
|
|
closure-env-ref)
|