~ chicken-core (chicken-5) 505ec20962cab7c54baa86c37a525ce525a4c40c
commit 505ec20962cab7c54baa86c37a525ce525a4c40c Author: unknown <felix@.(none)> AuthorDate: Tue Nov 3 23:53:32 2009 +0100 Commit: felix <felix@call-with-current-continuation.org> CommitDate: Mon Nov 23 17:49:55 2009 +0100 handle non-atomic operator in function call generically by introducing temporary Signed-off-by: felix <felix@call-with-current-continuation.org> diff --git a/compiler.scm b/compiler.scm index dd8a629f..4010ad8f 100644 --- a/compiler.scm +++ b/compiler.scm @@ -1225,20 +1225,12 @@ (else (emit-syntax-trace-info x #f) - (let ((x (mapwalk x e se))) - (if (and (pair? (car x)) - (symbol? (caar x)) - (memq (or (lookup (caar x) se) (caar x)) '(lambda ##core#lambda))) - (let ((lexp (car x)) - (args (cdr x)) ) - (##sys#check-syntax 'lambda lexp '(_ lambda-list . #(_ 1)) #f se) - (let ((llist (cadr lexp))) - (if (and (proper-list? llist) (= (llist-length llist) (length args))) - `(let ,(map list llist args) ,@(cddr lexp)) - (let ((var (gensym 't))) - `(let ((,var ,(car x))) - (,var ,@(cdr x)) ) ) ) ) ) - x))) ) ) + (let ((tmp (gensym))) + (walk + `(##core#let + ((,tmp ,(car x))) + (,tmp ,@(cdr x))) + e se dest))))) (define (mapwalk xs e se) (map (lambda (x) (walk x e se #f)) xs) )Trap