source: project/misc-extn/trunk/misc-extn-dsssl.scm @ 6200

Last change on this file since 6200 was 6200, checked in by Kon Lovett, 14 years ago

Added tests (finally).

File size: 816 bytes
Line 
1;;;; misc-extn-dsssl.scm
2;;;; Kon Lovett, Aug '07
3
4;;; DSSSL Extended Lambda List
5
6(cond-expand
7  [hygienic-macros
8(syntax-error 'dsssl-fixup "unsupported by hygienic macros") ]
9  [else
10(define-macro (dsssl-fixup ?keys ?opts ?rest . ?body)
11  (let-values (
12      [(optvars optvals)
13        (let loop ([opts ?opts]
14                   [varlst '()]
15                   [vallst '()])
16          (if (null? opts)
17              (values (reverse varlst) (reverse vallst))
18              (let* ([opt (car opts)]
19                     [var (car opt)])
20                (loop (cdr opts)
21                      (cons var varlst)
22                      (cons `(list ,var ,(cadr opt)) vallst)))))])
23    `(let-values ([(,?rest ,@optvars)
24                   (fixup-extended-lambda-list ',?keys ,?rest ,@optvals)])
25       ,@?body ) ) ) ] )
Note: See TracBrowser for help on using the repository browser.