blob: 1f383e6f4626a652cf35898f992d2f47491857b9 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
(defmacro define-param-expander (:form f keyword
(parms body : (env (gensym)) (form (gensym)))
. forms)
(let ((lambda ^(lambda (,parms ,body ,env ,form) ,*forms)))
(set-macro-ancestor lambda f)
^(progn
(set [*param-macro* ,keyword] ,lambda)
,keyword)))
(defun macroexpand-params (prototype-form : env)
(tree-case prototype-form
((name params . body)
(cons name (sys:expand-param-macro params body env prototype-form)))
(else (error "~s: invalid prototype-form argument ~s" %fun% else))))
|