summaryrefslogtreecommitdiff
path: root/modules/language/python/compile.scm
diff options
context:
space:
mode:
Diffstat (limited to 'modules/language/python/compile.scm')
-rw-r--r--modules/language/python/compile.scm34
1 files changed, 26 insertions, 8 deletions
diff --git a/modules/language/python/compile.scm b/modules/language/python/compile.scm
index 00443a9..5d7796b 100644
--- a/modules/language/python/compile.scm
+++ b/modules/language/python/compile.scm
@@ -1684,6 +1684,24 @@
(define (gentemp stx) (datum->syntax stx (gensym "x")))
+(define-syntax clambda
+ (lambda (x)
+ (syntax-case x ()
+ ((_ (x ...) code ...)
+ (with-syntax ((n (length #'(x ...))))
+ #'(let ((f (lambda (x ... . u) code ...)))
+ (if (> n 1)
+ (case-lambda
+ ((c)
+ (if (pair? c)
+ (let ((cc (cdr c)))
+ (if (pair? cc)
+ (apply f c)
+ (f c cc)))
+ (py-apply f (* c))))
+ (q (apply f q)))
+ f)))))))
+
(define-syntax cfor
(syntax-rules ()
((_ (x) (a) code #f #f)
@@ -1754,7 +1772,7 @@
(lambda ()
(let lp ()
(call-with-values (lambda () (next inv))
- (lambda (xx ...)
+ (clambda (xx ...)
(set! x xx) ...
(with-sp ((break (values))
(continue (values)))
@@ -1770,7 +1788,7 @@
(lambda ()
(let lp ()
(call-with-values (lambda () (values (next inv) ...))
- (lambda (xx ...)
+ (clambda (xx ...)
(set! x xx) ...
(with-sp ((break (values))
(continue (values)))
@@ -1787,7 +1805,7 @@
(catch StopIteration
(lambda ()
(call-with-values (lambda () (next inv))
- (lambda (xx ...)
+ (clambda (xx ...)
(set! x xx) ...
(let/ec continue-ret
(with-sp ((break (break-ret))
@@ -1805,7 +1823,7 @@
(catch StopIteration
(lambda ()
(call-with-values (lambda () (values (next inv) ...))
- (lambda (xx ...)
+ (clambda (xx ...)
(set! x xx) ...
(let/ec continue-ret
(with-sp ((break (break-ret))
@@ -1841,7 +1859,7 @@
(lambda ()
(let lp ()
(call-with-values (lambda () (next inv))
- (lambda (xx ...)
+ (clambda (xx ...)
(set! x xx) ...
(let/ec continue-ret
(with-sp ((break (break-ret))
@@ -1856,7 +1874,7 @@
(lambda ()
(let lp ()
(call-with-values (lambda () (next inv))
- (lambda (xx ...)
+ (clambda (xx ...)
(set! x xx) ...
(with-sp ((break (break-ret))
(continue (values)))
@@ -1875,7 +1893,7 @@
(lambda ()
(let lp ()
(call-with-values (lambda () get)
- (lambda (xx ...)
+ (clambda (xx ...)
(set! x xx) ...
(let/ec continue-ret
(with-sp ((break (break-ret))
@@ -1890,7 +1908,7 @@
(lambda ()
(let lp ()
(call-with-values (lambda () get)
- (lambda (xx ...)
+ (clambda (xx ...)
(set! x xx) ...
(with-sp ((break (break-ret))
(continue (values)))