~ chicken-core (chicken-5) fb0304220af9473b18e238dbecf88bac25491f27
commit fb0304220af9473b18e238dbecf88bac25491f27
Author: unknown <felix@.(none)>
AuthorDate: Tue Nov 3 23:53:32 2009 +0100
Commit: Felix <bunny351@gmail.com>
CommitDate: Sun Nov 8 01:15:18 2009 +0100
handle non-atomic operator in function call generically by introducing temporary
diff --git a/compiler.scm b/compiler.scm
index 8ae2907d..ef9c68a7 100644
--- a/compiler.scm
+++ b/compiler.scm
@@ -1224,20 +1224,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