1(library (yuni miniobj base)
2         (export define-miniobj-typeof define-miniobj-ref define-miniobj-set!)
3         (import (rnrs))
4
5(define-syntax define-miniobj-typeof
6  (syntax-rules ()
7    ((_ name ref0 ref1 ... refnext term)
8     (define-miniobj-ref name ref0 ref1 ... (lambda (obj) (refnext obj term))))
9    ((_ name ref0 term)
10     (define (name obj) (ref0 obj term)))))
11
12(define-syntax define-miniobj-ref
13  (syntax-rules ()
14    ((_ name ref0 ref1 ... refnext term)
15     (define-miniobj-ref name ref0 ref1 ... (lambda (obj slot) (refnext obj slot term))))
16    ((_ name ref0 term)
17     (define (name obj slot) (ref0 obj slot term)))))
18
19(define-syntax define-miniobj-set!
20  (syntax-rules ()
21    ((_ name set0 set1 ... setnext term)
22     (define-miniobj-set! name set0 set1 ... (lambda (obj slot value) (setnext obj slot value term))))
23    ((_ name set0 term)
24     (define (name obj slot value) (set0 obj slot value term)))))
25)
26