26 lines
738 B
Scheme
26 lines
738 B
Scheme
|
|
(module misc mzscheme
|
|
(require (lib "class.ss")
|
|
(lib "framework.ss" "framework"))
|
|
(provide closure-mixin
|
|
pref:get/set)
|
|
|
|
(define-syntax pref:get/set
|
|
(syntax-rules ()
|
|
[(_ get/set prop)
|
|
(define get/set
|
|
(case-lambda
|
|
[() (preferences:get 'prop)]
|
|
[(newval) (preferences:set 'prop newval)]))]))
|
|
|
|
(define-syntax (closure-mixin stx)
|
|
(syntax-case stx ()
|
|
[(closure-mixin interfaces [name proc] ...)
|
|
(with-syntax ([(iname ...) (generate-temporaries #'(name ...))])
|
|
#'(let ([iname proc] ...)
|
|
(mixin () interfaces
|
|
(define/public (name . args) (apply iname args))
|
|
...
|
|
(super-new))))]))
|
|
)
|