~ chicken-core (chicken-5) 1557f5a4992c9b676474bdde36719f04b3eeab94


commit 1557f5a4992c9b676474bdde36719f04b3eeab94
Author:     felix <felix@call-with-current-continuation.org>
AuthorDate: Sat Jan 24 12:52:39 2015 +0100
Commit:     felix <felix@call-with-current-continuation.org>
CommitDate: Sat Jan 24 12:52:39 2015 +0100

    chicken-ffi-syntax.scm: use mini-srfi-1.scm and dropped use of 3-arg fold-right

diff --git a/chicken-ffi-syntax.scm b/chicken-ffi-syntax.scm
index d3fc79b9..b9bda358 100644
--- a/chicken-ffi-syntax.scm
+++ b/chicken-ffi-syntax.scm
@@ -38,8 +38,9 @@
   (no-bound-checks)
   (no-procedure-checks))
 
-(##sys#provide
- 'chicken-ffi-syntax)
+(include "mini-srfi-1.scm")
+
+(##sys#provide 'chicken-ffi-syntax)
 
 (define ##sys#chicken-ffi-macro-environment
   (let ((me0 (##sys#macro-environment)))
@@ -122,20 +123,22 @@
 		(list (cons a (cddr b)))
 		'() ) )
 	  bindings aliases)
-	,(fold-right
-	  (lambda (b a rest)
-	    (if (= 3 (length b))
-		`(##core#let-location
-		  ,(car b)
-		  ,(cadr b)
-		  ,a
-		  ,rest)
-		`(##core#let-location
-		  ,(car b)
-		  ,(cadr b)
-		  ,rest) ) )
-	  `(##core#let () ,@body)
-	  bindings aliases) ) ) ) ) )
+	,(let loop ((bindings bindings) (aliases aliases))
+	   (if (null? bindings)
+	       `(##core#let () ,@body)
+	       (let ((b (car bindings))
+		     (a (car aliases))
+		     (rest (loop (cdr bindings) (cdr aliases))))
+		 (if (= 3 (length b))
+		     `(##core#let-location
+		       ,(car b)
+		       ,(cadr b)
+		       ,a
+		       ,rest)
+		     `(##core#let-location
+		       ,(car b)
+		       ,(cadr b)
+		       ,rest) ) ))))))))
 
 
 ;;; Embedding code directly:
Trap