From eef3cc8cdae33e27e64d0fcad6f8385f0ee3811d Mon Sep 17 00:00:00 2001 From: Keisuke Nishida Date: Fri, 6 Oct 2000 00:39:44 +0000 Subject: [PATCH] Use `values\' and `call-with-values\'. --- vm/compile.scm | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/vm/compile.scm b/vm/compile.scm index 9baf2a40c..cc7bc07cc 100644 --- a/vm/compile.scm +++ b/vm/compile.scm @@ -106,30 +106,29 @@ (make-code:constant env (car args))) (define (canon-formals formals) - ;; foo -> (() . foo) - ;; (foo bar baz) -> ((foo bar baz) . #f) - ;; (foo bar . baz) -> ((foo bar) . baz) + ;; foo -> (), foo + ;; (foo bar baz) -> (foo bar baz), #f + ;; (foo bar . baz) -> (foo bar), baz (cond ((symbol? formals) - (cons '() formals)) + (values '() formals)) ((or (null? formals) (null? (cdr (last-pair formals)))) - (cons formals #f)) + (values formals #f)) (else (let* ((copy (list-copy formals)) (pair (last-pair copy)) (last (cdr pair))) (set-cdr! pair '()) - (cons copy last))))) + (values copy last))))) (define (parse-lambda args env) (let ((formals (car args)) (body (cdr args))) - (let* ((pair (canon-formals formals)) - (reqs (car pair)) - (rest (cdr pair)) - (syms (append reqs (if rest (list rest) '()))) - (new-env (make-env syms env))) - (make-code:program env (length reqs) (if rest #t #f) - (parse-begin body new-env))))) + (call-with-values (lambda () (canon-formals formals)) + (lambda (reqs rest) + (let* ((syms (append reqs (if rest (list rest) '()))) + (new-env (make-env syms env))) + (make-code:program env (length reqs) (if rest #t #f) + (parse-begin body new-env))))))) (define (parse-set! args env) (let ((var (env-ref env (car args)))