aboutsummaryrefslogtreecommitdiffstats
path: root/lib/csc/macros.csc
diff options
context:
space:
mode:
Diffstat (limited to 'lib/csc/macros.csc')
-rw-r--r--lib/csc/macros.csc32
1 files changed, 6 insertions, 26 deletions
diff --git a/lib/csc/macros.csc b/lib/csc/macros.csc
index 6278142..cf4549f 100644
--- a/lib/csc/macros.csc
+++ b/lib/csc/macros.csc
@@ -666,18 +666,6 @@
(_ (raise-syntax-error "unexpected form in let-syntax" (clean-syntax x)))))))
- (define (split-args-rest formals)
- (syntax-case formals
- ('()
- (values '() #f))
- ((var . vars) when (identifier? var)
- (let-values (((args rest) (split-args-rest vars)))
- (values (cons (identifier-name var) args) rest)))
- (var when (identifier? var)
- (values '() (identifier-name var)))
- (_ (raise-syntax-error "unexpected form in split-args-rest" (clean-syntax formals)))))
-
-
(define (expand-lambda-body-rest body env)
(let loop ((body body)
(expanded-body (make-constant #f)))
@@ -731,20 +719,12 @@
(make-macro-transformer
(lambda (x env)
(syntax-case x
- ((_ formals . body)
- (let-values (((args rest) (split-args-rest formals)))
- (define refs (map (lambda (name)
- (make-lexical-ref name (gensym)))
- args))
- (loop for ref in refs
- do (set! env (add-binding (lexical-ref-name ref) ref env)))
- (make-lambda
- refs
- (if rest
- (make-lexical-ref rest (gensym))
- #f)
- (expand-lambda-body body env))))
- (_ (raise-syntax-error "unexpected form in lambda" x))))))
+ ((_ args . body) when (identifier? args)
+ (define ref (make-lexical-ref (identifier-name args) (gensym)))
+ (set! env (add-binding args ref env))
+ (make-lambda
+ ref
+ (expand-lambda-body body env)))))))
(define builtin-define